diff options
Diffstat (limited to 'src/set/gnunet-set-profiler.c')
-rw-r--r-- | src/set/gnunet-set-profiler.c | 128 |
1 files changed, 82 insertions, 46 deletions
diff --git a/src/set/gnunet-set-profiler.c b/src/set/gnunet-set-profiler.c index d83e034a6..349bce6ea 100644 --- a/src/set/gnunet-set-profiler.c +++ b/src/set/gnunet-set-profiler.c | |||
@@ -59,8 +59,9 @@ static struct GNUNET_PeerIdentity local_peer; | |||
59 | static struct GNUNET_SET_ListenHandle *set_listener; | 59 | static struct GNUNET_SET_ListenHandle *set_listener; |
60 | 60 | ||
61 | static int byzantine; | 61 | static int byzantine; |
62 | static int force_delta; | 62 | static unsigned int force_delta; |
63 | static int force_full; | 63 | static unsigned int force_full; |
64 | static unsigned int element_size = 32; | ||
64 | 65 | ||
65 | /** | 66 | /** |
66 | * Handle to the statistics service. | 67 | * Handle to the statistics service. |
@@ -90,7 +91,7 @@ map_remove_iterator (void *cls, | |||
90 | 91 | ||
91 | GNUNET_assert (NULL != key); | 92 | GNUNET_assert (NULL != key); |
92 | 93 | ||
93 | ret = GNUNET_CONTAINER_multihashmap_remove (m, key, NULL); | 94 | ret = GNUNET_CONTAINER_multihashmap_remove_all (m, key); |
94 | if (GNUNET_OK != ret) | 95 | if (GNUNET_OK != ret) |
95 | printf ("spurious element\n"); | 96 | printf ("spurious element\n"); |
96 | return GNUNET_YES; | 97 | return GNUNET_YES; |
@@ -196,7 +197,7 @@ set_result_cb (void *cls, | |||
196 | GNUNET_assert (0); | 197 | GNUNET_assert (0); |
197 | } | 198 | } |
198 | 199 | ||
199 | if (element->size != sizeof (struct GNUNET_HashCode)) | 200 | if (element->size != element_size) |
200 | { | 201 | { |
201 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 202 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
202 | "wrong element size: %u, expected %u\n", | 203 | "wrong element size: %u, expected %u\n", |
@@ -208,8 +209,10 @@ set_result_cb (void *cls, | |||
208 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n", | 209 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n", |
209 | info->id, GNUNET_h2s (element->data)); | 210 | info->id, GNUNET_h2s (element->data)); |
210 | GNUNET_assert (NULL != element->data); | 211 | GNUNET_assert (NULL != element->data); |
212 | struct GNUNET_HashCode data_hash; | ||
213 | GNUNET_CRYPTO_hash (element->data, element_size, &data_hash); | ||
211 | GNUNET_CONTAINER_multihashmap_put (info->received, | 214 | GNUNET_CONTAINER_multihashmap_put (info->received, |
212 | element->data, NULL, | 215 | &data_hash, NULL, |
213 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); | 216 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); |
214 | } | 217 | } |
215 | 218 | ||
@@ -261,16 +264,12 @@ set_insert_iterator (void *cls, | |||
261 | void *value) | 264 | void *value) |
262 | { | 265 | { |
263 | struct GNUNET_SET_Handle *set = cls; | 266 | struct GNUNET_SET_Handle *set = cls; |
264 | struct GNUNET_SET_Element *el; | 267 | struct GNUNET_SET_Element el; |
265 | 268 | ||
266 | el = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) + | 269 | el.element_type = 0; |
267 | sizeof (struct GNUNET_HashCode)); | 270 | el.data = value; |
268 | el->element_type = 0; | 271 | el.size = element_size; |
269 | GNUNET_memcpy (&el[1], key, sizeof *key); | 272 | GNUNET_SET_add_element (set, &el, NULL, NULL); |
270 | el->data = &el[1]; | ||
271 | el->size = sizeof *key; | ||
272 | GNUNET_SET_add_element (set, el, NULL, NULL); | ||
273 | GNUNET_free (el); | ||
274 | return GNUNET_YES; | 273 | return GNUNET_YES; |
275 | } | 274 | } |
276 | 275 | ||
@@ -322,6 +321,8 @@ run (void *cls, | |||
322 | 321 | ||
323 | config = cfg; | 322 | config = cfg; |
324 | 323 | ||
324 | GNUNET_assert (element_size > 0); | ||
325 | |||
325 | if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer)) | 326 | if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer)) |
326 | { | 327 | { |
327 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); | 328 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); |
@@ -345,22 +346,28 @@ run (void *cls, | |||
345 | 346 | ||
346 | for (i = 0; i < num_a; i++) | 347 | for (i = 0; i < num_a; i++) |
347 | { | 348 | { |
348 | GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); | 349 | char *data = GNUNET_malloc (element_size); |
349 | GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, NULL, | 350 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); |
351 | GNUNET_CRYPTO_hash (data, element_size, &hash); | ||
352 | GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, data, | ||
350 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); | 353 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); |
351 | } | 354 | } |
352 | 355 | ||
353 | for (i = 0; i < num_b; i++) | 356 | for (i = 0; i < num_b; i++) |
354 | { | 357 | { |
355 | GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); | 358 | char *data = GNUNET_malloc (element_size); |
356 | GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, NULL, | 359 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); |
360 | GNUNET_CRYPTO_hash (data, element_size, &hash); | ||
361 | GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, data, | ||
357 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); | 362 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); |
358 | } | 363 | } |
359 | 364 | ||
360 | for (i = 0; i < num_c; i++) | 365 | for (i = 0; i < num_c; i++) |
361 | { | 366 | { |
362 | GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); | 367 | char *data = GNUNET_malloc (element_size); |
363 | GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, NULL, | 368 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size); |
369 | GNUNET_CRYPTO_hash (data, element_size, &hash); | ||
370 | GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, data, | ||
364 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); | 371 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); |
365 | } | 372 | } |
366 | 373 | ||
@@ -419,31 +426,60 @@ pre_run (void *cls, char *const *args, const char *cfgfile, | |||
419 | int | 426 | int |
420 | main (int argc, char **argv) | 427 | main (int argc, char **argv) |
421 | { | 428 | { |
422 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { | 429 | struct GNUNET_GETOPT_CommandLineOption options[] = { |
423 | { 'A', "num-first", NULL, | 430 | GNUNET_GETOPT_OPTION_SET_UINT ('A', |
424 | gettext_noop ("number of values"), | 431 | "num-first", |
425 | GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_a }, | 432 | NULL, |
426 | { 'B', "num-second", NULL, | 433 | gettext_noop ("number of values"), |
427 | gettext_noop ("number of values"), | 434 | &num_a), |
428 | GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_b }, | 435 | |
429 | { 'b', "byzantine", NULL, | 436 | GNUNET_GETOPT_OPTION_SET_UINT ('B', |
430 | gettext_noop ("use byzantine mode"), | 437 | "num-second", |
431 | GNUNET_NO, &GNUNET_GETOPT_set_one, &byzantine }, | 438 | NULL, |
432 | { 'f', "force-full", NULL, | 439 | gettext_noop ("number of values"), |
433 | gettext_noop ("force sending full set"), | 440 | &num_b), |
434 | GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full }, | 441 | |
435 | { 'd', "force-delta", NULL, | 442 | GNUNET_GETOPT_OPTION_SET_ONE ('b', |
436 | gettext_noop ("number delta operation"), | 443 | "byzantine", |
437 | GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta }, | 444 | gettext_noop ("use byzantine mode"), |
438 | { 'C', "num-common", NULL, | 445 | &byzantine), |
439 | gettext_noop ("number of values"), | 446 | |
440 | GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_c }, | 447 | GNUNET_GETOPT_OPTION_SET_UINT ('f', |
441 | { 'x', "operation", NULL, | 448 | "force-full", |
442 | gettext_noop ("operation to execute"), | 449 | NULL, |
443 | GNUNET_YES, &GNUNET_GETOPT_set_string, &op_str }, | 450 | gettext_noop ("force sending full set"), |
444 | { 's', "statistics", NULL, | 451 | &force_full), |
445 | gettext_noop ("write statistics to file"), | 452 | |
446 | GNUNET_YES, &GNUNET_GETOPT_set_filename, &statistics_filename }, | 453 | GNUNET_GETOPT_OPTION_SET_UINT ('d', |
454 | "force-delta", | ||
455 | NULL, | ||
456 | gettext_noop ("number delta operation"), | ||
457 | &force_delta), | ||
458 | |||
459 | GNUNET_GETOPT_OPTION_SET_UINT ('C', | ||
460 | "num-common", | ||
461 | NULL, | ||
462 | gettext_noop ("number of values"), | ||
463 | &num_c), | ||
464 | |||
465 | GNUNET_GETOPT_OPTION_STRING ('x', | ||
466 | "operation", | ||
467 | NULL, | ||
468 | gettext_noop ("operation to execute"), | ||
469 | &op_str), | ||
470 | |||
471 | GNUNET_GETOPT_OPTION_SET_UINT ('w', | ||
472 | "element-size", | ||
473 | NULL, | ||
474 | gettext_noop ("element size"), | ||
475 | &element_size), | ||
476 | |||
477 | GNUNET_GETOPT_OPTION_FILENAME ('s', | ||
478 | "statistics", | ||
479 | "FILENAME", | ||
480 | gettext_noop ("write statistics to file"), | ||
481 | &statistics_filename), | ||
482 | |||
447 | GNUNET_GETOPT_OPTION_END | 483 | GNUNET_GETOPT_OPTION_END |
448 | }; | 484 | }; |
449 | GNUNET_PROGRAM_run2 (argc, argv, "gnunet-set-profiler", | 485 | GNUNET_PROGRAM_run2 (argc, argv, "gnunet-set-profiler", |