finished buld support
authorMatthias Wachs <wachs@net.in.tum.de>
Tue, 2 Jul 2013 15:08:37 +0000 (15:08 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Tue, 2 Jul 2013 15:08:37 +0000 (15:08 +0000)
src/ats/gnunet-service-ats-solver_mlp.c
src/ats/gnunet-service-ats-solver_mlp.h
src/ats/gnunet-service-ats-solver_proportional.c

index 5dbbee4e8b94186125ea1f76c9381df2b9017c31..32e36068899006106825601727d5921c59b3af36 100644 (file)
@@ -953,6 +953,12 @@ GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addr
        struct GNUNET_TIME_Relative duration_mlp;
        GNUNET_assert (NULL != solver);
 
+       if (GNUNET_YES == mlp->bulk_lock)
+       {
+               mlp->bulk_request ++;
+               return GNUNET_NO;
+       }
+
        if ((GNUNET_NO == mlp->mlp_prob_changed) && (GNUNET_NO == mlp->mlp_prob_updated))
        {
                LOG (GNUNET_ERROR_TYPE_DEBUG, "No changes to problem\n");
@@ -1356,6 +1362,7 @@ GAS_mlp_address_update (void *solver,
 
        /* Problem size changed: new address for peer with pending request */
        mlp->mlp_prob_updated = GNUNET_YES;
+
        if (GNUNET_YES == mlp->mlp_auto_solve)
                GAS_mlp_solve_problem (solver, addresses);
   return;
@@ -1538,10 +1545,10 @@ GAS_mlp_bulk_stop (void *solver)
   }
   s->bulk_lock --;
 
-  if (0 < s->bulk_changes)
+  if (0 < s->bulk_request)
   {
        GAS_mlp_solve_problem (solver, s->addresses);
-       s->bulk_changes = 0;
+       s->bulk_request= 0;
   }
 }
 
@@ -1613,12 +1620,6 @@ GAS_mlp_address_change_preference (void *solver,
 
        /* Problem size changed: new address for peer with pending request */
        mlp->mlp_prob_updated = GNUNET_YES;
-       if (GNUNET_YES == mlp->bulk_lock)
-       {
-               mlp->bulk_changes++;
-               return;
-       }
-
        if (GNUNET_YES == mlp->mlp_auto_solve)
                GAS_mlp_solve_problem (solver, addresses);
   return;
@@ -1908,6 +1909,8 @@ GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
   mlp->mlp_prob_updated = GNUNET_NO;
   mlp->mlp_auto_solve = GNUNET_YES;
   mlp->peers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
+  mlp->bulk_request = 0;
+  mlp->bulk_lock = 0;
 
   /* Setup GLPK */
   /* Redirect GLPK output to GNUnet logging */
index efdd3d42000e6119544308855c83ae3acce852c1..da149eeef5e10e9f0ceb6aa88d11f550620c1453 100644 (file)
@@ -254,7 +254,7 @@ struct GAS_MLP_Handle
   /**
    * Number of changes while solver was locked
    */
-  int bulk_changes;
+  int bulk_request;
 
   /**
    * GLPK LP control parameter
index b9b0d9a4ef603d2afe9d2443ce52669d26bb05f7..7f3fe58d8ae03ef521454f43e66010d68e638b10 100644 (file)
@@ -251,7 +251,7 @@ struct GAS_PROPORTIONAL_Handle
   /**
    * Number of changes while solver was locked
    */
-  int bulk_changes;
+  int bulk_requests;
 
 
   /**
@@ -416,6 +416,13 @@ distribute_bandwidth_in_network (struct GAS_PROPORTIONAL_Handle *s,
   unsigned long long assigned_quota_out = 0;
   struct AddressWrapper *cur;
 
+
+       if (GNUNET_YES == s->bulk_lock)
+       {
+               s->bulk_requests++;
+               return;
+       }
+
   LOG (GNUNET_ERROR_TYPE_DEBUG,
               "Recalculate quota for network type `%s' for %u addresses (in/out): %llu/%llu \n",
               net->desc, net->active_addresses, net->total_quota_in, net->total_quota_in);
@@ -654,6 +661,7 @@ static void
 distribute_bandwidth_in_all_networks (struct GAS_PROPORTIONAL_Handle *s)
 {
        int i;
+
        for (i = 0; i < s->networks; i++)
                distribute_bandwidth_in_network (s, &s->network_entries[i], NULL);
 
@@ -865,10 +873,7 @@ GAS_proportional_address_change_preference (void *solver,
   GNUNET_assert (NULL != solver);
   GNUNET_assert (NULL != peer);
 
-  if (GNUNET_NO == s->bulk_lock)
-       distribute_bandwidth_in_all_networks (s);
-  else
-       s->bulk_changes ++;
+       distribute_bandwidth_in_all_networks (s);
 }
 
 /**
@@ -934,10 +939,7 @@ GAS_proportional_get_preferred_address (void *solver,
       s->bw_changed (s->bw_changed_cls, prev); /* notify about bw change, REQUIRED? */
       if (GNUNET_SYSERR == addresse_decrement (s, net_prev, GNUNET_NO, GNUNET_YES))
         GNUNET_break (0);
-      if (GNUNET_NO == s->bulk_lock)
-       distribute_bandwidth_in_network (s, net_prev, NULL);
-      else
-       s->bulk_changes ++;
+       distribute_bandwidth_in_network (s, net_prev, NULL);
   }
 
   if (GNUNET_NO == (is_bandwidth_available_in_network (cur->solver_information)))
@@ -948,11 +950,7 @@ GAS_proportional_get_preferred_address (void *solver,
 
   cur->active = GNUNET_YES;
   addresse_increment(s, net_cur, GNUNET_NO, GNUNET_YES);
-  if (GNUNET_NO == s->bulk_lock)
-       distribute_bandwidth_in_network (s, net_cur, cur);
-  else
-       s->bulk_changes ++;
-
+  distribute_bandwidth_in_network (s, net_cur, cur);
   return cur;
 }
 
@@ -1037,10 +1035,7 @@ GAS_proportional_address_delete (void *solver,
       address->active = GNUNET_NO;
       if (GNUNET_SYSERR == addresse_decrement (s, net, GNUNET_NO, GNUNET_YES))
         GNUNET_break (0);
-      if (GNUNET_NO == s->bulk_lock)
-       distribute_bandwidth_in_network (s, net, NULL);
-      else
-       s->bulk_changes ++;
+      distribute_bandwidth_in_network (s, net, NULL);
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG, "After deleting address now total %u and active %u addresses in network `%s'\n",
       net->total_addresses,
@@ -1082,11 +1077,11 @@ GAS_proportional_bulk_stop (void *solver)
        return;
   }
   s->bulk_lock --;
-  if ((0 == s->bulk_lock) && (s->bulk_changes))
+  if ((0 == s->bulk_lock) && (0 < s->bulk_requests))
   {
        LOG (GNUNET_ERROR_TYPE_ERROR, "No lock pending, recalculating\n");
        distribute_bandwidth_in_all_networks (s);
-       s->bulk_changes = 0;
+       s->bulk_requests = 0;
   }
 }
 
@@ -1194,10 +1189,7 @@ GAS_proportional_address_update (void *solver,
               /* Suggest updated address */
               address->active = GNUNET_YES;
               addresse_increment (s, new_net, GNUNET_NO, GNUNET_YES);
-              if (GNUNET_NO == s->bulk_lock)
-               distribute_bandwidth_in_network (solver, new_net, NULL);
-              else
-               s->bulk_changes ++;
+              distribute_bandwidth_in_network (solver, new_net, NULL);
           }
           else
           {