diff options
author | Florian Dold <florian.dold@gmail.com> | 2013-08-13 23:39:08 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2013-08-13 23:39:08 +0000 |
commit | 4d3806a259258dcacc6c2a858967700c34b12086 (patch) | |
tree | 1b92d8346f28826ab5481cfa47321d3ea7d778ef /src/consensus | |
parent | a23b776478202335270b516010466a660fed4ad1 (diff) |
- profiler can be verbose
Diffstat (limited to 'src/consensus')
-rw-r--r-- | src/consensus/gnunet-consensus-profiler.c | 15 | ||||
-rw-r--r-- | src/consensus/gnunet-service-consensus.c | 29 |
2 files changed, 37 insertions, 7 deletions
diff --git a/src/consensus/gnunet-consensus-profiler.c b/src/consensus/gnunet-consensus-profiler.c index 42040527f0..baa6a3623c 100644 --- a/src/consensus/gnunet-consensus-profiler.c +++ b/src/consensus/gnunet-consensus-profiler.c @@ -55,6 +55,8 @@ static unsigned int peers_done = 0; static unsigned *results_for_peer; +static int verbose; + /** * Signature of the event handler function called by the @@ -202,10 +204,18 @@ new_element_cb (void *cls, const struct GNUNET_SET_Element *element) { struct GNUNET_CONSENSUS_Handle **chp = cls; + int idx = chp - consensus_handles; GNUNET_assert (NULL != cls); - results_for_peer[chp - consensus_handles]++; + results_for_peer[idx]++; + + GNUNET_assert (sizeof (struct GNUNET_HashCode) == element->size); + + if (GNUNET_YES == verbose) + { + printf ("P%d received %s\n", idx, GNUNET_h2s ((struct GNUNET_HashCode *) element->data)); + } } @@ -389,6 +399,9 @@ main (int argc, char **argv) { 't', "timeout", NULL, gettext_noop ("consensus timeout"), GNUNET_YES, &GNUNET_GETOPT_set_relative_time, &conclude_timeout }, + { 'V', "verbose", NULL, + gettext_noop ("be more verbose (print received values)"), + GNUNET_NO, &GNUNET_GETOPT_set_one, &verbose }, GNUNET_GETOPT_OPTION_END }; conclude_timeout = GNUNET_TIME_UNIT_SECONDS; diff --git a/src/consensus/gnunet-service-consensus.c b/src/consensus/gnunet-service-consensus.c index 94d532c3d9..3e1d1ad959 100644 --- a/src/consensus/gnunet-service-consensus.c +++ b/src/consensus/gnunet-service-consensus.c @@ -177,11 +177,15 @@ struct ConsensusSession /** * Permutation of peers for the current round, - * maps logical index (for current round) to physical index (location in info array) */ uint32_t *shuffle; /** + * Inverse permutation of peers for the current round, + */ + uint32_t *shuffle_inv; + + /** * Current round of the exponential scheme. */ uint32_t exp_round; @@ -331,6 +335,11 @@ destroy_session (struct ConsensusSession *session) GNUNET_free (session->shuffle); session->shuffle = NULL; } + if (NULL != session->shuffle_inv) + { + GNUNET_free (session->shuffle_inv); + session->shuffle_inv = NULL; + } if (NULL != session->info) { for (i = 0; i < session->num_peers; i++) @@ -448,6 +457,8 @@ shuffle (struct ConsensusSession *session) if (NULL == session->shuffle) session->shuffle = GNUNET_malloc (session->num_peers * sizeof (*session->shuffle)); + if (NULL == session->shuffle_inv) + session->shuffle_inv = GNUNET_malloc (session->num_peers * sizeof (*session->shuffle_inv)); GNUNET_CRYPTO_kdf (randomness, sizeof (randomness), &session->exp_round, sizeof (uint32_t), @@ -466,6 +477,10 @@ shuffle (struct ConsensusSession *session) session->shuffle[x] = session->shuffle[i]; session->shuffle[i] = tmp; } + + /* create the inverse */ + for (i = 0; i < session->num_peers; i++) + session->shuffle_inv[session->shuffle[i]] = i; } @@ -501,7 +516,7 @@ find_partners (struct ConsensusSession *session) { /* we are outgoing */ partner_idx = (my_idx + arc) % session->num_peers; - session->partner_outgoing = &session->info[session->shuffle[partner_idx]]; + session->partner_outgoing = &session->info[session->shuffle_inv[partner_idx]]; session->partner_outgoing->exp_subround_finished = GNUNET_NO; /* are we a 'ghost' of a peer that would exist if * the number of peers was a power of two, and thus have to partner @@ -519,7 +534,7 @@ find_partners (struct ConsensusSession *session) if (0 == (ghost_partner_idx & arc)) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ghost partner is %d\n", ghost_partner_idx); - session->partner_incoming = &session->info[session->shuffle[ghost_partner_idx]]; + session->partner_incoming = &session->info[session->shuffle_inv[ghost_partner_idx]]; session->partner_incoming->exp_subround_finished = GNUNET_NO; return; } @@ -532,7 +547,7 @@ find_partners (struct ConsensusSession *session) if (partner_idx < 0) partner_idx += session->num_peers; session->partner_outgoing = NULL; - session->partner_incoming = &session->info[session->shuffle[partner_idx]]; + session->partner_incoming = &session->info[session->shuffle_inv[partner_idx]]; session->partner_incoming->exp_subround_finished = GNUNET_NO; } @@ -674,15 +689,17 @@ subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) session->exp_subround = 0; if (NULL == session->shuffle) session->shuffle = GNUNET_malloc ((sizeof (int)) * session->num_peers); + if (NULL == session->shuffle_inv) + session->shuffle_inv = GNUNET_malloc ((sizeof (int)) * session->num_peers); for (i = 0; i < session->num_peers; i++) - session->shuffle[i] = i; + session->shuffle[i] = session->shuffle_inv[i] = i; } else if (session->exp_subround + 1 >= (int) ceil (log2 (session->num_peers))) { /* subrounds done, start new log-round */ session->exp_round++; session->exp_subround = 0; - //shuffle (session); + shuffle (session); } else { |