diff options
author | Supriti Singh <supritisingh08@gmail.com> | 2014-08-21 12:55:17 +0000 |
---|---|---|
committer | Supriti Singh <supritisingh08@gmail.com> | 2014-08-21 12:55:17 +0000 |
commit | 5ac199dcc8af3a7052086087d36feda38bc4b4de (patch) | |
tree | affa693795bee216ed960b048847fbbf0bdd58c0 /src | |
parent | 967ed6ed4721a97d4d741820483149e9bda96f0b (diff) | |
download | gnunet-5ac199dcc8af3a7052086087d36feda38bc4b4de.tar.gz gnunet-5ac199dcc8af3a7052086087d36feda38bc4b4de.zip |
Changing the logic to check for circle completion
Diffstat (limited to 'src')
-rw-r--r-- | src/dht/gnunet_dht_profiler.c | 78 |
1 files changed, 54 insertions, 24 deletions
diff --git a/src/dht/gnunet_dht_profiler.c b/src/dht/gnunet_dht_profiler.c index 7889042e0..9fa9f33c4 100644 --- a/src/dht/gnunet_dht_profiler.c +++ b/src/dht/gnunet_dht_profiler.c | |||
@@ -802,37 +802,47 @@ successor_stats_cont (void *cls, | |||
802 | { | 802 | { |
803 | struct GNUNET_HashCode *val; | 803 | struct GNUNET_HashCode *val; |
804 | struct GNUNET_HashCode *start_val; | 804 | struct GNUNET_HashCode *start_val; |
805 | int count = 0; | ||
806 | struct GNUNET_HashCode *key; | 805 | struct GNUNET_HashCode *key; |
807 | 806 | int count; | |
807 | |||
808 | /* Don't schedule the task till we are looking for circle here. */ | ||
808 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; | 809 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; |
809 | GNUNET_TESTBED_operation_done (successor_stats_op); | 810 | GNUNET_TESTBED_operation_done (successor_stats_op); |
810 | successor_stats_op = NULL; | 811 | successor_stats_op = NULL; |
811 | start_val =(struct GNUNET_HashCode *) GNUNET_CONTAINER_multihashmap_get(successor_peer_hashmap, | 812 | |
813 | start_val = | ||
814 | (struct GNUNET_HashCode *) GNUNET_CONTAINER_multihashmap_get(successor_peer_hashmap, | ||
812 | start_key); | 815 | start_key); |
813 | |||
814 | val = GNUNET_new(struct GNUNET_HashCode); | 816 | val = GNUNET_new(struct GNUNET_HashCode); |
817 | key = GNUNET_new(struct GNUNET_HashCode); | ||
815 | val = start_val; | 818 | val = start_val; |
816 | while (count < num_peers) | 819 | for (count = 0; count < num_peers; count++) |
817 | { | 820 | { |
818 | key = GNUNET_new(struct GNUNET_HashCode); | ||
819 | key = val; | 821 | key = val; |
820 | val = GNUNET_CONTAINER_multihashmap_get (successor_peer_hashmap, | 822 | val = GNUNET_CONTAINER_multihashmap_get (successor_peer_hashmap, |
821 | key); | 823 | key); |
822 | //FIXME: REMOVE ENTRY FROM HASHMAP | ||
823 | GNUNET_assert(NULL != val); | 824 | GNUNET_assert(NULL != val); |
824 | count++; | 825 | /* Remove the entry from hashmap. This is done to take care of loop. */ |
826 | if (GNUNET_NO == | ||
827 | GNUNET_CONTAINER_multihashmap_remove (successor_peer_hashmap, | ||
828 | key, val)) | ||
829 | { | ||
830 | DEBUG ("Failed to remove entry from hashmap\n"); | ||
831 | break; | ||
832 | } | ||
833 | /* If a peer has its own identity as its successor. */ | ||
834 | if (0 == memcmp(&key, &val, sizeof (struct GNUNET_HashCode))) | ||
835 | { | ||
836 | break; | ||
837 | } | ||
825 | } | 838 | } |
826 | 839 | ||
827 | if (start_val == val) | 840 | if ((start_val == val) && (count == num_peers)) |
828 | { | 841 | { |
829 | DEBUG("CIRCLE COMPLETED after %u tries", tries); | 842 | DEBUG("CIRCLE COMPLETED after %u tries", tries); |
830 | 843 | //FIXME: FREE HASHMAP. | |
831 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) | 844 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) |
832 | { | ||
833 | start_profiling(); | 845 | start_profiling(); |
834 | } | ||
835 | |||
836 | return; | 846 | return; |
837 | } | 847 | } |
838 | else | 848 | else |
@@ -843,12 +853,11 @@ successor_stats_cont (void *cls, | |||
843 | "Maximum tries %u exceeded while checking successor TOTAL TRIES %u" | 853 | "Maximum tries %u exceeded while checking successor TOTAL TRIES %u" |
844 | " cirle formation. Exiting\n", | 854 | " cirle formation. Exiting\n", |
845 | max_searches,tries); | 855 | max_searches,tries); |
856 | //FIXME: FREE HASHMAP | ||
846 | if (GNUNET_SCHEDULER_NO_TASK != successor_stats_task) | 857 | if (GNUNET_SCHEDULER_NO_TASK != successor_stats_task) |
847 | { | 858 | { |
848 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; | 859 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; |
849 | //FIXME: FREE HASHMAP | ||
850 | } | 860 | } |
851 | |||
852 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) | 861 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) |
853 | { | 862 | { |
854 | start_profiling(); | 863 | start_profiling(); |
@@ -857,7 +866,7 @@ successor_stats_cont (void *cls, | |||
857 | return; | 866 | return; |
858 | } | 867 | } |
859 | 868 | ||
860 | //FIXME: change delay use exponential back off. | 869 | flag = 0; |
861 | successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay, &collect_stats, cls); | 870 | successor_stats_task = GNUNET_SCHEDULER_add_delayed (delay, &collect_stats, cls); |
862 | } | 871 | } |
863 | } | 872 | } |
@@ -911,6 +920,8 @@ successor_stats_iterator (void *cls, | |||
911 | start_key = my_id_key; | 920 | start_key = my_id_key; |
912 | flag = 1; | 921 | flag = 1; |
913 | } | 922 | } |
923 | /* FIXME: GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE do not free the value | ||
924 | which is replaced, need to free it. */ | ||
914 | GNUNET_CONTAINER_multihashmap_put (successor_peer_hashmap, | 925 | GNUNET_CONTAINER_multihashmap_put (successor_peer_hashmap, |
915 | my_id_key, (void *)succ_key, | 926 | my_id_key, (void *)succ_key, |
916 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); | 927 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); |
@@ -932,12 +943,7 @@ collect_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
932 | return; | 943 | return; |
933 | 944 | ||
934 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n"); | 945 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n"); |
935 | DEBUG("num_peers = %d", num_peers); | ||
936 | GNUNET_assert(NULL != testbed_handles); | 946 | GNUNET_assert(NULL != testbed_handles); |
937 | |||
938 | |||
939 | /* Check for successor pointer, don't start put till the virtual ring topology | ||
940 | is not created. */ | ||
941 | successor_stats_op = | 947 | successor_stats_op = |
942 | GNUNET_TESTBED_get_statistics (num_peers, testbed_handles, | 948 | GNUNET_TESTBED_get_statistics (num_peers, testbed_handles, |
943 | "dht", NULL, | 949 | "dht", NULL, |
@@ -947,6 +953,30 @@ collect_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
947 | GNUNET_assert(NULL != successor_stats_op); | 953 | GNUNET_assert(NULL != successor_stats_op); |
948 | } | 954 | } |
949 | 955 | ||
956 | |||
957 | #if ENABLE_MALICIOUS | ||
958 | /** | ||
959 | * Set the malicious variable in peer malicious context. | ||
960 | */ | ||
961 | static void | ||
962 | set_malicious() | ||
963 | { | ||
964 | unsigned int i; | ||
965 | DEBUG ("Setting %u peers malicious"); | ||
966 | for(i = 0; i < n_malicious; i++) | ||
967 | { | ||
968 | struct MaliciousContext *mc = &a_mc[i]; | ||
969 | mc->ctx->op = | ||
970 | GNUNET_TESTBED_service_connect (ac->ctx, | ||
971 | ac->ctx->peer, | ||
972 | "dht", | ||
973 | &dht_set_malicious, mc, | ||
974 | &dht_connect, | ||
975 | &dht_finish, | ||
976 | mc); | ||
977 | } | ||
978 | } | ||
979 | #endif | ||
950 | /** | 980 | /** |
951 | * Callback called when DHT service on the peer is started | 981 | * Callback called when DHT service on the peer is started |
952 | * | 982 | * |
@@ -969,9 +999,9 @@ service_started (void *cls, | |||
969 | DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers); | 999 | DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers); |
970 | if (GNUNET_SCHEDULER_NO_TASK == successor_stats_task && peers_started == num_peers) | 1000 | if (GNUNET_SCHEDULER_NO_TASK == successor_stats_task && peers_started == num_peers) |
971 | { | 1001 | { |
972 | //FIXME: Here we have started service on all the peers, now we should first | 1002 | #if ENABLE_MALICIOUS |
973 | // call act malicious API on malicious peer context. it will just set, | 1003 | set_malicious(); |
974 | // act_malicious to 1 in the selected peers. and then it exists | 1004 | #endif |
975 | DEBUG("successor_stats_task \n"); | 1005 | DEBUG("successor_stats_task \n"); |
976 | struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context); | 1006 | struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context); |
977 | collect_stat_cls->service_connect_ctx = cls; | 1007 | collect_stat_cls->service_connect_ctx = cls; |