aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-07-02 15:08:37 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-07-02 15:08:37 +0000
commit1524472d6ceafe79495a81fc9313fa981495a3b1 (patch)
treedeb6e9502e700356192e4638ad934bb168d68e3d /src/ats
parentf1f81d41ae55f0107d4f2ac752544b3dce7d2214 (diff)
downloadgnunet-1524472d6ceafe79495a81fc9313fa981495a3b1.tar.gz
gnunet-1524472d6ceafe79495a81fc9313fa981495a3b1.zip
finished buld support
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats-solver_mlp.c19
-rw-r--r--src/ats/gnunet-service-ats-solver_mlp.h2
-rw-r--r--src/ats/gnunet-service-ats-solver_proportional.c40
3 files changed, 28 insertions, 33 deletions
diff --git a/src/ats/gnunet-service-ats-solver_mlp.c b/src/ats/gnunet-service-ats-solver_mlp.c
index 5dbbee4e8..32e360688 100644
--- a/src/ats/gnunet-service-ats-solver_mlp.c
+++ b/src/ats/gnunet-service-ats-solver_mlp.c
@@ -953,6 +953,12 @@ GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addr
953 struct GNUNET_TIME_Relative duration_mlp; 953 struct GNUNET_TIME_Relative duration_mlp;
954 GNUNET_assert (NULL != solver); 954 GNUNET_assert (NULL != solver);
955 955
956 if (GNUNET_YES == mlp->bulk_lock)
957 {
958 mlp->bulk_request ++;
959 return GNUNET_NO;
960 }
961
956 if ((GNUNET_NO == mlp->mlp_prob_changed) && (GNUNET_NO == mlp->mlp_prob_updated)) 962 if ((GNUNET_NO == mlp->mlp_prob_changed) && (GNUNET_NO == mlp->mlp_prob_updated))
957 { 963 {
958 LOG (GNUNET_ERROR_TYPE_DEBUG, "No changes to problem\n"); 964 LOG (GNUNET_ERROR_TYPE_DEBUG, "No changes to problem\n");
@@ -1356,6 +1362,7 @@ GAS_mlp_address_update (void *solver,
1356 1362
1357 /* Problem size changed: new address for peer with pending request */ 1363 /* Problem size changed: new address for peer with pending request */
1358 mlp->mlp_prob_updated = GNUNET_YES; 1364 mlp->mlp_prob_updated = GNUNET_YES;
1365
1359 if (GNUNET_YES == mlp->mlp_auto_solve) 1366 if (GNUNET_YES == mlp->mlp_auto_solve)
1360 GAS_mlp_solve_problem (solver, addresses); 1367 GAS_mlp_solve_problem (solver, addresses);
1361 return; 1368 return;
@@ -1538,10 +1545,10 @@ GAS_mlp_bulk_stop (void *solver)
1538 } 1545 }
1539 s->bulk_lock --; 1546 s->bulk_lock --;
1540 1547
1541 if (0 < s->bulk_changes) 1548 if (0 < s->bulk_request)
1542 { 1549 {
1543 GAS_mlp_solve_problem (solver, s->addresses); 1550 GAS_mlp_solve_problem (solver, s->addresses);
1544 s->bulk_changes = 0; 1551 s->bulk_request= 0;
1545 } 1552 }
1546} 1553}
1547 1554
@@ -1613,12 +1620,6 @@ GAS_mlp_address_change_preference (void *solver,
1613 1620
1614 /* Problem size changed: new address for peer with pending request */ 1621 /* Problem size changed: new address for peer with pending request */
1615 mlp->mlp_prob_updated = GNUNET_YES; 1622 mlp->mlp_prob_updated = GNUNET_YES;
1616 if (GNUNET_YES == mlp->bulk_lock)
1617 {
1618 mlp->bulk_changes++;
1619 return;
1620 }
1621
1622 if (GNUNET_YES == mlp->mlp_auto_solve) 1623 if (GNUNET_YES == mlp->mlp_auto_solve)
1623 GAS_mlp_solve_problem (solver, addresses); 1624 GAS_mlp_solve_problem (solver, addresses);
1624 return; 1625 return;
@@ -1908,6 +1909,8 @@ GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1908 mlp->mlp_prob_updated = GNUNET_NO; 1909 mlp->mlp_prob_updated = GNUNET_NO;
1909 mlp->mlp_auto_solve = GNUNET_YES; 1910 mlp->mlp_auto_solve = GNUNET_YES;
1910 mlp->peers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); 1911 mlp->peers = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
1912 mlp->bulk_request = 0;
1913 mlp->bulk_lock = 0;
1911 1914
1912 /* Setup GLPK */ 1915 /* Setup GLPK */
1913 /* Redirect GLPK output to GNUnet logging */ 1916 /* Redirect GLPK output to GNUnet logging */
diff --git a/src/ats/gnunet-service-ats-solver_mlp.h b/src/ats/gnunet-service-ats-solver_mlp.h
index efdd3d420..da149eeef 100644
--- a/src/ats/gnunet-service-ats-solver_mlp.h
+++ b/src/ats/gnunet-service-ats-solver_mlp.h
@@ -254,7 +254,7 @@ struct GAS_MLP_Handle
254 /** 254 /**
255 * Number of changes while solver was locked 255 * Number of changes while solver was locked
256 */ 256 */
257 int bulk_changes; 257 int bulk_request;
258 258
259 /** 259 /**
260 * GLPK LP control parameter 260 * GLPK LP control parameter
diff --git a/src/ats/gnunet-service-ats-solver_proportional.c b/src/ats/gnunet-service-ats-solver_proportional.c
index b9b0d9a4e..7f3fe58d8 100644
--- a/src/ats/gnunet-service-ats-solver_proportional.c
+++ b/src/ats/gnunet-service-ats-solver_proportional.c
@@ -251,7 +251,7 @@ struct GAS_PROPORTIONAL_Handle
251 /** 251 /**
252 * Number of changes while solver was locked 252 * Number of changes while solver was locked
253 */ 253 */
254 int bulk_changes; 254 int bulk_requests;
255 255
256 256
257 /** 257 /**
@@ -416,6 +416,13 @@ distribute_bandwidth_in_network (struct GAS_PROPORTIONAL_Handle *s,
416 unsigned long long assigned_quota_out = 0; 416 unsigned long long assigned_quota_out = 0;
417 struct AddressWrapper *cur; 417 struct AddressWrapper *cur;
418 418
419
420 if (GNUNET_YES == s->bulk_lock)
421 {
422 s->bulk_requests++;
423 return;
424 }
425
419 LOG (GNUNET_ERROR_TYPE_DEBUG, 426 LOG (GNUNET_ERROR_TYPE_DEBUG,
420 "Recalculate quota for network type `%s' for %u addresses (in/out): %llu/%llu \n", 427 "Recalculate quota for network type `%s' for %u addresses (in/out): %llu/%llu \n",
421 net->desc, net->active_addresses, net->total_quota_in, net->total_quota_in); 428 net->desc, net->active_addresses, net->total_quota_in, net->total_quota_in);
@@ -654,6 +661,7 @@ static void
654distribute_bandwidth_in_all_networks (struct GAS_PROPORTIONAL_Handle *s) 661distribute_bandwidth_in_all_networks (struct GAS_PROPORTIONAL_Handle *s)
655{ 662{
656 int i; 663 int i;
664
657 for (i = 0; i < s->networks; i++) 665 for (i = 0; i < s->networks; i++)
658 distribute_bandwidth_in_network (s, &s->network_entries[i], NULL); 666 distribute_bandwidth_in_network (s, &s->network_entries[i], NULL);
659 667
@@ -865,10 +873,7 @@ GAS_proportional_address_change_preference (void *solver,
865 GNUNET_assert (NULL != solver); 873 GNUNET_assert (NULL != solver);
866 GNUNET_assert (NULL != peer); 874 GNUNET_assert (NULL != peer);
867 875
868 if (GNUNET_NO == s->bulk_lock) 876 distribute_bandwidth_in_all_networks (s);
869 distribute_bandwidth_in_all_networks (s);
870 else
871 s->bulk_changes ++;
872} 877}
873 878
874/** 879/**
@@ -934,10 +939,7 @@ GAS_proportional_get_preferred_address (void *solver,
934 s->bw_changed (s->bw_changed_cls, prev); /* notify about bw change, REQUIRED? */ 939 s->bw_changed (s->bw_changed_cls, prev); /* notify about bw change, REQUIRED? */
935 if (GNUNET_SYSERR == addresse_decrement (s, net_prev, GNUNET_NO, GNUNET_YES)) 940 if (GNUNET_SYSERR == addresse_decrement (s, net_prev, GNUNET_NO, GNUNET_YES))
936 GNUNET_break (0); 941 GNUNET_break (0);
937 if (GNUNET_NO == s->bulk_lock) 942 distribute_bandwidth_in_network (s, net_prev, NULL);
938 distribute_bandwidth_in_network (s, net_prev, NULL);
939 else
940 s->bulk_changes ++;
941 } 943 }
942 944
943 if (GNUNET_NO == (is_bandwidth_available_in_network (cur->solver_information))) 945 if (GNUNET_NO == (is_bandwidth_available_in_network (cur->solver_information)))
@@ -948,11 +950,7 @@ GAS_proportional_get_preferred_address (void *solver,
948 950
949 cur->active = GNUNET_YES; 951 cur->active = GNUNET_YES;
950 addresse_increment(s, net_cur, GNUNET_NO, GNUNET_YES); 952 addresse_increment(s, net_cur, GNUNET_NO, GNUNET_YES);
951 if (GNUNET_NO == s->bulk_lock) 953 distribute_bandwidth_in_network (s, net_cur, cur);
952 distribute_bandwidth_in_network (s, net_cur, cur);
953 else
954 s->bulk_changes ++;
955
956 return cur; 954 return cur;
957} 955}
958 956
@@ -1037,10 +1035,7 @@ GAS_proportional_address_delete (void *solver,
1037 address->active = GNUNET_NO; 1035 address->active = GNUNET_NO;
1038 if (GNUNET_SYSERR == addresse_decrement (s, net, GNUNET_NO, GNUNET_YES)) 1036 if (GNUNET_SYSERR == addresse_decrement (s, net, GNUNET_NO, GNUNET_YES))
1039 GNUNET_break (0); 1037 GNUNET_break (0);
1040 if (GNUNET_NO == s->bulk_lock) 1038 distribute_bandwidth_in_network (s, net, NULL);
1041 distribute_bandwidth_in_network (s, net, NULL);
1042 else
1043 s->bulk_changes ++;
1044 } 1039 }
1045 LOG (GNUNET_ERROR_TYPE_DEBUG, "After deleting address now total %u and active %u addresses in network `%s'\n", 1040 LOG (GNUNET_ERROR_TYPE_DEBUG, "After deleting address now total %u and active %u addresses in network `%s'\n",
1046 net->total_addresses, 1041 net->total_addresses,
@@ -1082,11 +1077,11 @@ GAS_proportional_bulk_stop (void *solver)
1082 return; 1077 return;
1083 } 1078 }
1084 s->bulk_lock --; 1079 s->bulk_lock --;
1085 if ((0 == s->bulk_lock) && (s->bulk_changes)) 1080 if ((0 == s->bulk_lock) && (0 < s->bulk_requests))
1086 { 1081 {
1087 LOG (GNUNET_ERROR_TYPE_ERROR, "No lock pending, recalculating\n"); 1082 LOG (GNUNET_ERROR_TYPE_ERROR, "No lock pending, recalculating\n");
1088 distribute_bandwidth_in_all_networks (s); 1083 distribute_bandwidth_in_all_networks (s);
1089 s->bulk_changes = 0; 1084 s->bulk_requests = 0;
1090 } 1085 }
1091} 1086}
1092 1087
@@ -1194,10 +1189,7 @@ GAS_proportional_address_update (void *solver,
1194 /* Suggest updated address */ 1189 /* Suggest updated address */
1195 address->active = GNUNET_YES; 1190 address->active = GNUNET_YES;
1196 addresse_increment (s, new_net, GNUNET_NO, GNUNET_YES); 1191 addresse_increment (s, new_net, GNUNET_NO, GNUNET_YES);
1197 if (GNUNET_NO == s->bulk_lock) 1192 distribute_bandwidth_in_network (solver, new_net, NULL);
1198 distribute_bandwidth_in_network (solver, new_net, NULL);
1199 else
1200 s->bulk_changes ++;
1201 } 1193 }
1202 else 1194 else
1203 { 1195 {