[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34115 - gnunet/src/dht
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34115 - gnunet/src/dht |
Date: |
Wed, 6 Aug 2014 13:07:42 +0200 |
Author: supriti
Date: 2014-08-06 13:07:42 +0200 (Wed, 06 Aug 2014)
New Revision: 34115
Modified:
gnunet/src/dht/gnunet-service-xdht_neighbours.c
gnunet/src/dht/gnunet-service-xdht_routing.c
gnunet/src/dht/gnunet_dht_profiler.c
Log:
- added basic layout for b/w and successor stats collection in profiler
- fixes in neighbours
Modified: gnunet/src/dht/gnunet-service-xdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-05 16:27:13 UTC
(rev 34114)
+++ gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-06 11:07:42 UTC
(rev 34115)
@@ -1259,13 +1259,9 @@
vsm->source_peer = source_peer;
vsm->successor = successor;
vsm->trail_id = trail_id;
+ peer_list = (struct GNUNET_PeerIdentity *) &vsm[1];
+ memcpy (peer_list, trail, trail_length * sizeof (struct
GNUNET_PeerIdentity));
- if (trail_length != 0)
- {
- peer_list = (struct GNUNET_PeerIdentity *) &vsm[1];
- memcpy (peer_list, trail, trail_length * sizeof (struct
GNUNET_PeerIdentity));
- }
-
/* Send the message to chosen friend. */
GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail,
pending);
target_friend->pending_count++;
@@ -1385,14 +1381,10 @@
vsmr->current_successor = current_successor;
vsmr->probable_successor = probable_successor;
vsmr->trail_direction = htonl (trail_direction);
- vsmr->trail_id = trail_id;
-
- if (trail_length > 0)
- {
- peer_list = (struct GNUNET_PeerIdentity *) &vsmr[1];
- memcpy (peer_list, trail, trail_length * sizeof (struct
GNUNET_PeerIdentity));
- }
-
+ vsmr->trail_id = trail_id;
+ peer_list = (struct GNUNET_PeerIdentity *) &vsmr[1];
+ memcpy (peer_list, trail, trail_length * sizeof (struct
GNUNET_PeerIdentity));
+
/* Send the message to chosen friend. */
GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail,
pending);
target_friend->pending_count++;
@@ -1451,13 +1443,10 @@
nsm->source_peer = source_peer;
nsm->trail_id = succesor_trail_id;
- if (successor_trail_length > 0)
- {
- peer_list = (struct GNUNET_PeerIdentity *) &nsm[1];
- memcpy (peer_list, successor_trail,
- successor_trail_length * sizeof (struct GNUNET_PeerIdentity));
- }
-
+ peer_list = (struct GNUNET_PeerIdentity *) &nsm[1];
+ memcpy (peer_list, successor_trail,
+ successor_trail_length * sizeof (struct GNUNET_PeerIdentity));
+
/* Send the message to chosen friend. */
GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail,
pending);
target_friend->pending_count++;
@@ -1962,7 +1951,7 @@
current_closest_peer->best_known_destination = finger->finger_identity;
current_closest_peer->next_hop = finger_trail->friend.id;
current_closest_peer->trail_id = finger_trail->trail_id;
- //GNUNET_free(finger_trail);//FIXME: where should we free the finger
trail.
+ GNUNET_free(finger_trail);
}
continue;
}
@@ -2870,13 +2859,9 @@
/**
- * FIXME: ensure that you are not adding any trail to reach to a friend which
- * is a finger. Also decide on should you increment trails count of a friend
- * which is also a finger.
* Add a new entry in finger table at finger_table_index.
- * In case finger identity is me or a friend, then don't add a trail. NOTE
- * trail length to reach to a finger can be 0 only if the finger is a friend
- * or my identity.
+ * In case I am my own finger, then we don't have a trail. In case of a friend,
+ * we have a trail with unique id and '0' trail length.
* In case a finger is a friend, then increment the trails count of the friend.
* @param finger_identity Peer Identity of new finger
* @param finger_trail Trail to reach from me to finger (excluding both end
points).
@@ -2902,7 +2887,8 @@
new_entry->is_present = GNUNET_YES;
/* If the new entry is my own identity. */
- if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &finger_identity))
+ if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity,
+ &finger_identity))
{
new_entry->trails_count = 0;
finger_table[finger_table_index] = *new_entry;
@@ -2923,7 +2909,7 @@
new_entry->trail_list[0].trail_tail = NULL;
finger_table[finger_table_index] = *new_entry;
GNUNET_assert (NULL !=
- (first_trail_hop =
+ (first_trail_hop =
GNUNET_CONTAINER_multipeermap_get (friend_peermap,
&finger_identity)));
@@ -2932,10 +2918,6 @@
return;
}
- /* finger trail length can be 0 only in case if finger is my identity or
- finger is friend. We should never reach here. */
- GNUNET_assert (finger_trail_length > 0);
-
GNUNET_assert (NULL !=
(first_trail_hop =
GNUNET_CONTAINER_multipeermap_get (friend_peermap,
@@ -2965,8 +2947,7 @@
new_entry->trail_list[0].trail_id = trail_id;
new_entry->trail_list[0].is_present = GNUNET_YES;
finger_table[finger_table_index] = *new_entry;
- //GNUNET_free (new_entry);
- //GNUNET_free (trail);
+ GNUNET_free (new_entry);
return;
}
@@ -3064,8 +3045,8 @@
}
/* If we did not compress the trail, return the original trail back.*/
- new_trail = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity) *
trail_length);
*new_trail_length = trail_length;
+ new_trail = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity) *
trail_length);
memcpy (new_trail, trail, trail_length * sizeof (struct
GNUNET_PeerIdentity));
return new_trail;
}
@@ -3400,6 +3381,7 @@
add_new_finger (finger_identity, updated_trail,
updated_finger_trail_length,
finger_trail_id, finger_table_index);
+ GNUNET_free_non_null(updated_trail);
update_current_search_finger_index (finger_identity,
finger_table_index);
return;
@@ -3428,7 +3410,7 @@
remove_existing_finger (existing_finger, finger_table_index);
add_new_finger (finger_identity, updated_trail,
updated_finger_trail_length,
finger_trail_id, finger_table_index);
-
+ GNUNET_free_non_null((struct GNUNET_PeerIdentity *)updated_trail);
}
else
{
@@ -3615,7 +3597,6 @@
struct Closest_Peer successor;
key_value = GNUNET_ntohll (key_value);
successor = find_successor (key_value, GDS_FINGER_TYPE_NON_PREDECESSOR);
-
next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
*next_hop = successor.next_hop;
intermediate_trail_id = successor.trail_id;
@@ -4366,6 +4347,7 @@
return trail_list;
}
+
/**
* Check if trail_1 and trail_2 have any common element. If yes then join
* them at common element. trail_1 always preceeds trail_2 in joined trail.
@@ -4401,7 +4383,7 @@
/* Copy all the elements from 0 to i into joined_trail. */
- for(k = 0; k < trail_1_len; k++)
+ for(k = 0; k < (i+1); k++)
{
joined_trail[k] = trail_1[k];
}
@@ -4410,9 +4392,10 @@
j = j+1;
/* Copy all the elements from j+1 to trail_2_len-1 to joined trail.*/
- while(k < *joined_trail_len)
+ while((k < *joined_trail_len) && (j < trail_2_len));
{
joined_trail[k] = trail_2[j];
+ j++;
k++;
}
@@ -4473,6 +4456,7 @@
&trail_me_to_curr_pred[0])))
{
*trail_src_to_curr_pred_length = 0;
+ GNUNET_free_non_null(trail_me_to_curr_pred);
return NULL;
}
@@ -4503,6 +4487,7 @@
{
trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i];
}
+ GNUNET_free_non_null(trail_me_to_curr_pred);
return trail_src_to_curr_pred;
}
}
@@ -4514,6 +4499,7 @@
trail_me_to_curr_pred_length,
&len);
*trail_src_to_curr_pred_length = len;
+ GNUNET_free_non_null(trail_me_to_curr_pred);
return trail_src_to_curr_pred;
}
@@ -4580,7 +4566,7 @@
add_new_finger (finger, trail_to_new_predecessor, trail_length,
trail_to_new_predecessor_id, PREDECESSOR_FINGER_ID);
- GNUNET_free_non_null (trail_to_new_predecessor);
+ GNUNET_free_non_null(trail_to_new_predecessor);
}
@@ -4658,13 +4644,13 @@
struct GNUNET_PeerIdentity source_peer;
struct GNUNET_PeerIdentity *trail;
struct GNUNET_PeerIdentity *next_hop;
- struct FingerInfo *current_predecessor;
+ struct FingerInfo current_predecessor;
struct FriendInfo *target_friend;
unsigned int trail_src_to_curr_pred_len = 0;
struct GNUNET_PeerIdentity *trail_src_to_curr_pred;
+ unsigned int trail_length;
size_t msize;
- unsigned int trail_length;
-
+
msize = ntohs (message->size);
if (msize < sizeof (struct PeerVerifySuccessorMessage))
@@ -4702,7 +4688,7 @@
}
target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap,
next_hop);
-
+
if(NULL == target_friend)
{
GNUNET_break_op(0);
@@ -4719,10 +4705,10 @@
/* Check if the source_peer could be our predecessor and if yes then update
* it. */
compare_and_update_predecessor (source_peer, trail, trail_length);
- current_predecessor = &finger_table[PREDECESSOR_FINGER_ID];
+ current_predecessor = finger_table[PREDECESSOR_FINGER_ID];
/* Is source of this message NOT my predecessor. */
- if (0 != (GNUNET_CRYPTO_cmp_peer_identity
(¤t_predecessor->finger_identity,
+ if (0 != (GNUNET_CRYPTO_cmp_peer_identity
(¤t_predecessor.finger_identity,
&source_peer)))
{
trail_src_to_curr_pred = get_trail_src_to_curr_pred (source_peer,
@@ -4735,7 +4721,8 @@
trail_src_to_curr_pred_len = trail_length;
int i;
- trail_src_to_curr_pred = GNUNET_malloc(sizeof(struct
GNUNET_PeerIdentity)*trail_length);
+ trail_src_to_curr_pred = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity)
+ *trail_src_to_curr_pred_len);
for(i = 0; i < trail_src_to_curr_pred_len; i++)
{
trail_src_to_curr_pred[i] = trail[i];
@@ -4747,12 +4734,12 @@
(target_friend =
GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer)));
GDS_NEIGHBOURS_send_verify_successor_result (source_peer, my_identity,
-
current_predecessor->finger_identity,
+
current_predecessor.finger_identity,
trail_id,
trail_src_to_curr_pred,
trail_src_to_curr_pred_len,
GDS_ROUTING_DEST_TO_SRC,
target_friend);
-
+ GNUNET_free_non_null(trail_src_to_curr_pred);
return GNUNET_OK;
}
@@ -4786,7 +4773,7 @@
*trail_to_new_successor_length = 0;
return trail_to_new_successor;
}
-
+
/* Is there any friend of yours in this trail. */
if(trail_me_to_probable_successor_len > 1)
{
@@ -4801,15 +4788,19 @@
trail_to_new_successor = GNUNET_malloc (sizeof(struct
GNUNET_PeerIdentity)*
*trail_to_new_successor_length);
- for(j = 0;i < trail_me_to_probable_successor_len;i++,j++)
+
+ for(j = 0;j < *trail_to_new_successor_length;i++,j++)
{
trail_to_new_successor[j] = trail_me_to_probable_successor[i];
}
+
return trail_to_new_successor;
}
}
*trail_to_new_successor_length = trail_me_to_probable_successor_len;
+ return (struct GNUNET_PeerIdentity*)trail_me_to_probable_successor;
+#if 0
trail_to_new_successor = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)*
*trail_to_new_successor_length);
@@ -4817,6 +4808,7 @@
trail_to_new_successor[i] = trail_me_to_probable_successor[i];
return trail_to_new_successor;
+#endif
}
@@ -4925,7 +4917,7 @@
add_new_finger (probable_successor, trail_me_to_probable_succ,
trail_me_to_probable_succ_len, trail_id, 0);
-
+
GDS_NEIGHBOURS_send_notify_new_successor (my_identity, probable_successor,
trail_me_to_probable_succ,
trail_me_to_probable_succ_len,
@@ -5695,9 +5687,6 @@
return;
}
- GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# peers connected"), 1,
- GNUNET_NO);
-
friend = GNUNET_new (struct FriendInfo);
friend->id = *peer_identity;
Modified: gnunet/src/dht/gnunet-service-xdht_routing.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_routing.c 2014-08-05 16:27:13 UTC
(rev 34114)
+++ gnunet/src/dht/gnunet-service-xdht_routing.c 2014-08-06 11:07:42 UTC
(rev 34115)
@@ -311,7 +311,6 @@
struct GNUNET_PeerIdentity next_hop)
{
struct RoutingTrail *new_entry;
- int ret;
new_entry = GNUNET_new (struct RoutingTrail);
new_entry->trail_id = new_trail_id;
@@ -319,11 +318,10 @@
new_entry->prev_hop = prev_hop;
- ret = GNUNET_CONTAINER_multihashmap_put (routing_table,
- &new_trail_id, new_entry,
-
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
- //GNUNET_assert(ret == GNUNET_OK);
- return ret;
+ return GNUNET_CONTAINER_multihashmap_put (routing_table,
+ &new_trail_id, new_entry,
+
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+
}
Modified: gnunet/src/dht/gnunet_dht_profiler.c
===================================================================
--- gnunet/src/dht/gnunet_dht_profiler.c 2014-08-05 16:27:13 UTC (rev
34114)
+++ gnunet/src/dht/gnunet_dht_profiler.c 2014-08-06 11:07:42 UTC (rev
34115)
@@ -205,8 +205,17 @@
*/
static unsigned int replication;
+/**
+ * Testbed Operation (to get stats).
+ */
+static struct GNUNET_TESTBED_Operation *stats_op;
/**
+ * Testbed peer handles.
+ */
+static struct GNUNET_TESTBED_Peer **testbed_handles;
+
+/**
* Shutdown task. Cleanup all resources and operations.
*
* @param cls NULL
@@ -245,7 +254,65 @@
}
+/**
+ * Stats callback. Finish the stats testbed operation and when all stats have
+ * been iterated, shutdown the test.
+ *
+ * @param cls closure
+ * @param op the operation that has been finished
+ * @param emsg error message in case the operation has failed; will be NULL if
+ * operation has executed successfully.
+ */
static void
+bandwidth_stats_cont (void *cls,
+ struct GNUNET_TESTBED_Operation *op, const char *emsg)
+{
+
+}
+
+
+/**
+ * Process statistic values.
+ *
+ * @param cls closure
+ * @param peer the peer the statistic belong to
+ * @param subsystem name of subsystem that created the statistic
+ * @param name the name of the datum
+ * @param value the current value
+ * @param is_persistent GNUNET_YES if the value is persistent, GNUNET_NO if not
+ * @return GNUNET_OK to continue, GNUNET_SYSERR to abort iteration
+ */
+static int
+bandwidth_stats_iterator (void *cls, const struct GNUNET_TESTBED_Peer *peer,
+ const char *subsystem, const char *name,
+ uint64_t value, int is_persistent)
+{
+ return GNUNET_OK;
+}
+
+
+/**
+ * Task that collects bandwidth used by all the peers.
+ *
+ * @param cls Closure (NULL).
+ * @param tc Task Context.
+ */
+static void
+collect_bandwidth_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext
*tc)
+{
+ if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
+ return;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting bandwidth
statistics...\n");
+ //FIXME: what is the name of transport subsystem?
+ stats_op = GNUNET_TESTBED_get_statistics (n_active, testbed_handles,
+ NULL, NULL,
+ bandwidth_stats_iterator,
+ bandwidth_stats_cont, NULL);
+}
+
+
+static void
summarize ()
{
INFO ("# PUTS made: %u\n", n_puts);
@@ -254,7 +321,9 @@
INFO ("# GETS made: %u\n", n_gets);
INFO ("# GETS succeeded: %u\n", n_gets_ok);
INFO ("# GETS failed: %u\n", n_gets_fail);
- GNUNET_SCHEDULER_shutdown ();
+ //FIXME: is this the right place to call b/w stats?
+ GNUNET_SCHEDULER_add_now (&collect_bandwidth_stats, NULL);
+ GNUNET_SCHEDULER_shutdown ();
}
@@ -398,8 +467,72 @@
ac->delay_task = GNUNET_SCHEDULER_add_delayed (delay, &delayed_get, ac);
}
+/**
+ * Stats callback. Finish the stats testbed operation and when all stats have
+ * been iterated, shutdown the test.
+ *
+ * @param cls closure
+ * @param op the operation that has been finished
+ * @param emsg error message in case the operation has failed; will be NULL if
+ * operation has executed successfully.
+ */
+static void
+finger_stats_cont (void *cls,
+ struct GNUNET_TESTBED_Operation *op,
+ const char *emsg)
+{
+
+}
+
/**
+ * Process statistic values.
+ *
+ * @param cls closure
+ * @param peer the peer the statistic belong to
+ * @param subsystem name of subsystem that created the statistic
+ * @param name the name of the datum
+ * @param value the current value
+ * @param is_persistent GNUNET_YES if the value is persistent, GNUNET_NO if not
+ * @return GNUNET_OK to continue, GNUNET_SYSERR to abort iteration
+ */
+static int
+finger_stats_iterator (void *cls, const struct GNUNET_TESTBED_Peer *peer,
+ const char *subsystem, const char *name,
+ uint64_t value, int is_persistent)
+{
+ uint32_t i;
+
+ i = GNUNET_TESTBED_get_index (peer);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " STATS %u - %s [%s]: %llu\n",
+ i, subsystem, name, value);
+
+ return GNUNET_OK;
+}
+
+
+/**
+ * Task check that keepalives were sent and received.
+ *
+ * @param cls Closure (NULL).
+ * @param tc Task Context.
+ */
+static void
+collect_finger_stats (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
+ return;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start collecting statistics...\n");
+ /* FIXME: Write subsystem name. */
+ stats_op = GNUNET_TESTBED_get_statistics (n_active, testbed_handles,
+ "dht", NULL,
+ finger_stats_iterator,
+ finger_stats_cont, NULL);
+}
+
+
+/**
* Task to do DHT PUTS
*
* @param cls the active context
@@ -410,6 +543,12 @@
{
struct ActiveContext *ac = cls;
+ /*FIXME: Before doing anything else, first collect statistics from each peer
+ DHT and check if circle is formed. If yes then go ahead with more puts,
+ else wait for 'delay' time. This function does not return anything, so we
+ should have some way to notify that circle is done or we need to wait.*/
+ GNUNET_SCHEDULER_add_now(collect_finger_stats,NULL);
+
ac->delay_task = GNUNET_SCHEDULER_NO_TASK;
/* Generate and DHT PUT some random data */
ac->put_data_size = 16; /* minimum */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34115 - gnunet/src/dht,
gnunet <=