]> rtime.felk.cvut.cz Git - frescor/fna.git/commitdiff
tested negotiation in master.. TODO: check if the waiting time of the mode change...
authorsangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Thu, 25 Sep 2008 18:29:48 +0000 (18:29 +0000)
committersangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Thu, 25 Sep 2008 18:29:48 +0000 (18:29 +0000)
git-svn-id: http://www.frescor.org/private/svn/frescor/fna/trunk@1337 35b4ef3e-fd22-0410-ab77-dab3279adceb

src_frescan/frescan_bwres_mode_change.c
src_frescan/frescan_bwres_threads.c
src_frescan/frescan_debug.h
tests/tests_frescan/test_frescan_bwres_negotiate_in_master.c

index 307575637ee6ecae16d9ed17e09b6d7d1c830a78..0bfb7e989c9052c45689269e798521ee9d7b2930 100644 (file)
  *
  */
 
-#include "frescan_bwres_mode_change.h"
+#include <misc/linux_list.h>
+#include <stdbool.h>
+
 #include "frescan_data.h"
 #include "frescan_servers.h"
 #include "frescan_bwres_messages.h"
-#include <misc/linux_list.h>
-
+#include "frescan_bwres_mode_change.h"
+#include "frescan_debug.h"
 
 int frescan_bwres_budget_change(frescan_request_data_t *req_data,
                                 frescan_node_t node,
@@ -93,6 +95,8 @@ int frescan_bwres_mode_change_protocol(frescan_request_data_t *req_data)
         frsh_sa_time_t max_period_in_budget_inc;
         struct timespec start_timestamp, next_activation;
 
+        DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG, "starting mode change\n");
+
         for(node=0; node<FRESCAN_MX_NODES; node++) {
                 INIT_LIST_HEAD(&the_networks[req_data->net].
                                 mode_change_budget_inc_list_head[node]);
@@ -126,7 +130,7 @@ int frescan_bwres_mode_change_protocol(frescan_request_data_t *req_data)
                             (&(vres->mode_change_list),
                              &(the_networks[req_data->net].
                                mode_change_budget_inc_list_head[vres->node]));
-                } else {
+                } else if (sa_vres_data->c < vres->old_c) {
                         vres->mode_change_type |= FRESCAN_SA_BUDGET_DEC;
 
                         if (sa_vres_data->t > max_period_in_budget_dec) {
@@ -141,19 +145,26 @@ int frescan_bwres_mode_change_protocol(frescan_request_data_t *req_data)
 
                 if (sa_vres_data->t > vres->old_t) {
                         vres->mode_change_type |= FRESCAN_SA_PERIOD_INC;
-                } else {
+                } else if (sa_vres_data->t < vres->old_t) {
                         vres->mode_change_type |= FRESCAN_SA_PERIOD_DEC;
                 }
 
                 if (sa_vres_data->p > vres->old_p) {
                         vres->mode_change_type |= FRESCAN_SA_PRIO_INC;
-                } else {
+                } else if (sa_vres_data->p < vres->old_p) {
                         vres->mode_change_type |= FRESCAN_SA_PRIO_DEC;
                 }
 
                 vres->old_c = sa_vres_data->c;
                 vres->old_t = sa_vres_data->t;
                 vres->old_p = sa_vres_data->p;
+
+                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                      "vres: %u type: %X budget_change: %s\n",
+                      vres->fsa_vres_global_id,
+                      vres->mode_change_type,
+                      ((vres->mode_change_type & FRESCAN_SA_BUDGET_INC) ==
+                       FRESCAN_SA_BUDGET_INC) ? "inc" : "dec");
         }
 
         // 1.- mode change for B- members
@@ -206,8 +217,16 @@ int frescan_bwres_budget_change
         struct timespec start_timestamp, next_activation;
         struct list_head *the_mode_change_list;
         frescan_node_t me = the_networks[req_data->net].local_node;
+        bool is_increase;
 
-        if (mode_change_type == FRESCAN_SA_BUDGET_INC) {
+        is_increase = (mode_change_type & FRESCAN_SA_BUDGET_INC) ==
+                       FRESCAN_SA_BUDGET_INC;
+
+        DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+              "budget change node: %u (me: %u) type: '%s'\n",
+               node, me, is_increase ? "inc" : "dec");
+
+        if (is_increase) {
                 the_mode_change_list = &the_networks[req_data->net].
                                 mode_change_budget_inc_list_head[node];
         } else {
@@ -217,6 +236,9 @@ int frescan_bwres_budget_change
 
         list_for_each_entry(vres, the_mode_change_list, mode_change_list)
         {
+                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                      "vres %u\n", vres->fsa_vres_global_id);
+
                 server_params.budget = frsh_rel_time_to_usec(
                                 frsh_sa_time_to_rel_time(vres->old_c)) /
                                 FRESCAN_FRAME_TX_TIME_US;
@@ -224,12 +246,16 @@ int frescan_bwres_budget_change
                 server_params.prio   = vres->old_p;
 
                 if (node == me) {
-                        if (mode_change_type == FRESCAN_SA_BUDGET_INC) {
+                        if (is_increase) {
+                                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                                      "Local: update server\n");
                                 ret = frescan_servers_update(req_data->net,
                                                              &server_params,
                                                              vres->ss);
                                 if (ret != 0) return ret;
                         } else {
+                                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                                      "Local: set perceived\n");
                                 ret = frescan_servers_set_perceived
                                      (req_data->net, &server_params, vres->ss);
                                 if (ret != 0) return ret;
@@ -237,18 +263,20 @@ int frescan_bwres_budget_change
                 } else {
                         if ((node == req_data->request_node) &&
                             (vres->ss == req_data->ss)) {
-                                // External: send reply to reneg
+                                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                                      "External: send reply to reneg\n");
                                 req_data->type = FRESCAN_REP_NEG;
                                 req_data->final_values = server_params;
 
                                 ret = frescan_messages_send_request(req_data);
                                 if (ret != 0) return -1;
                         } else {
-                                // External: send SC change update
+                                DEBUG(FRESCAN_MODECHANGE_ENABLE_DEBUG,
+                                      "External: send SC change update\n");
                                 tmp_req_data.net  = req_data->net;
                                 tmp_req_data.request_node = node;
 
-                                if (mode_change_type == FRESCAN_SA_BUDGET_INC) {
+                                if (is_increase) {
                                         tmp_req_data.type =
                                                         FRESCAN_REP_INC_BUDGET;
                                 } else {
@@ -263,7 +291,7 @@ int frescan_bwres_budget_change
                 }
         }
 
-        if (mode_change_type == FRESCAN_SA_BUDGET_INC) return 0;
+        if (is_increase) return 0;
 
         if (node == me) {
                 ret = clock_gettime(CLOCK_MONOTONIC, &start_timestamp);
index 351f13677f3a308635280ec238a60d07b420fb7f..fed6212169192b8f70a175cc093fffa477d33e65 100644 (file)
@@ -265,6 +265,14 @@ static void frescan_manager_neg(frescan_request_data_t *req_data)
 
                         ret = frescan_bwres_mode_change_protocol(req_data);
                         assert(ret == 0);
+
+                        if (req_data->request_node == FRESCAN_NEG_MASTER_NODE) {
+                                DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG,
+                                      "signal local request\n");
+                                ret = frescan_bwres_robjs_signal
+                                                        (req_data->robj);
+                                assert(ret == 0);
+                        }
                 } else {
                         DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG,
                               "not schedulable!\n");
index 3d1121f47be20632ef01d039800664644c8277c0..cb11efc24b0d0e02243ea7f6486afb0458a872b9 100644 (file)
 #define FRESCAN_HW_BUFFER_ENABLE_DEBUG  false
 #define FRESCAN_REPLENSH_ENABLE_DEBUG   false
 #define FRESCAN_ROBJS_ENABLE_DEBUG      false
-#define FRESCAN_BWRES_ENABLE_DEBUG      false
+#define FRESCAN_BWRES_ENABLE_DEBUG      true
 #define FRESCAN_REQUESTS_ENABLE_DEBUG   false
-#define FRESCAN_MANAGER_ENABLE_DEBUG    false
+#define FRESCAN_MANAGER_ENABLE_DEBUG    true
 #define FRESCAN_ACCEPTOR_ENABLE_DEBUG   false
+#define FRESCAN_MODECHANGE_ENABLE_DEBUG true
 #define FRESCAN_FNA_ENABLE_DEBUG        false
 #define FRESCAN_MESSAGES_ENABLE_DEBUG   false
 #define FRESCAN_SA_ENABLE_DEBUG         false
index 6eb54450709c44631e9da4b45239a6665220b010..b9d34e94c2edbd58f892eb74dabcf166ad386b82 100644 (file)
@@ -37,11 +37,15 @@ int main ()
         ret = frescan_bwres_init(NETWORK);
         if (ret != 0) PUT_ERROR ("could not init BWRES");
 
+        printf("Creating contract\n");
+
         ret = frsh_contract_init(&contract);
         if (ret != 0) PUT_ERROR ("could not init contract");
 
-        budget_min.tv_sec = 5;
-        period_max = frsh_msec_to_rel_time(3369);
+        ret = frescan_fna_network_bytes_to_budget (NETWORK, 10, &budget_min);
+        if (ret != 0) PUT_ERROR ("could not transform bytes to budget");
+
+        period_max = frsh_msec_to_rel_time(3369); // 3,369 secs
 
         ret = frsh_contract_set_basic_params
                         (&contract,
@@ -52,10 +56,13 @@ int main ()
         if (ret != 0) PUT_ERROR ("could not set basic params");
 
 #if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
+        printf("Setting preemption level manually to the contract\n");
         ret = frsh_contract_set_preemption_level(&contract, 7);
         if (ret != 0) PUT_ERROR ("could not set preemption level");
 #endif
 
+        printf("Negotiating contract\n");
+
         ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted);
         if (ret != 0) PUT_ERROR ("could not negotiate");
 
@@ -79,5 +86,3 @@ int main ()
 
         return 0;
 }
-
-