if (NULL != churn_task)
GNUNET_SCHEDULER_cancel (churn_task);
- for (i = 0 ; i < num_peers ; i++)
- GNUNET_TESTBED_operation_done (rps_peers[i].op);
+ for (i = 0; i < num_peers; i++)
+ if (NULL != rps_peers[i].op)
+ GNUNET_TESTBED_operation_done (rps_peers[i].op);
GNUNET_SCHEDULER_shutdown ();
}
GNUNET_RPS_seed_ids (peer->rps_handle, amount, rps_peer_ids);
}
+/**
+ * Seed peers.
+ */
+ void
+seed_peers_big (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct RPSPeer *peer = (struct RPSPeer *) cls;
+ unsigned int seed_msg_size;
+ uint32_t num_peers_max;
+ unsigned int amount;
+ unsigned int i;
+
+ seed_msg_size = 8; /* sizeof (struct GNUNET_RPS_CS_SeedMessage) */
+ num_peers_max = (GNUNET_SERVER_MAX_MESSAGE_SIZE - seed_msg_size) /
+ sizeof (struct GNUNET_PeerIdentity);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Peers that fit in one seed msg; %u\n",
+ num_peers_max);
+ amount = num_peers_max + (0.5 * num_peers_max);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Seeding many (%u) peers:\n",
+ amount);
+ struct GNUNET_PeerIdentity ids_to_seed[amount];
+ for (i = 0; i < amount; i++)
+ {
+ ids_to_seed[i] = *peer->peer_id;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Seeding %u. peer: %s\n",
+ i,
+ GNUNET_i2s (&ids_to_seed[i]));
+ }
+
+ GNUNET_RPS_seed_ids (peer->rps_handle, amount, ids_to_seed);
+}
/**
* Get the id of peer i.
if (NULL == pinfo || NULL != emsg)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Got Error: %s\n", emsg);
+ GNUNET_TESTBED_operation_done (entry->op);
return;
}
rps_peer_ids[entry->index] = *(pinfo->result.id);
rps_peers[entry->index].peer_id = &rps_peer_ids[entry->index];
- rps_peers[entry->index].rec_ids = NULL;
- rps_peers[entry->index].num_rec_ids = 0;
GNUNET_CONTAINER_multipeermap_put (peer_map,
&rps_peer_ids[entry->index],
entry->index,
GNUNET_i2s_full (&rps_peer_ids[entry->index]));
- if (NULL != cur_test_run.init_peer)
- cur_test_run.init_peer (&rps_peers[entry->index]);
-
- GNUNET_TESTBED_operation_done (entry->op);
GNUNET_CONTAINER_DLL_remove (oplist_head, oplist_tail, entry);
+ GNUNET_TESTBED_operation_done (entry->op);
GNUNET_free (entry);
}
static void
seed_cb (struct RPSPeer *rps_peer)
{
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10),
- seed_peers, rps_peer);
+ GNUNET_SCHEDULER_add_delayed (
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10),
+ seed_peers, rps_peer);
}
/***********************************
seed_big_cb (struct RPSPeer *rps_peer)
{
// TODO test seeding > GNUNET_SERVER_MAX_MESSAGE_SIZE peers
+ GNUNET_SCHEDULER_add_delayed (
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2),
+ seed_peers_big, rps_peer);
}
/***********************************
static void
seed_req_cb (struct RPSPeer *rps_peer)
{
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2),
- seed_peers, rps_peer);
+ GNUNET_SCHEDULER_add_delayed (
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2),
+ seed_peers, rps_peer);
schedule_missing_requests (rps_peer);
}
{
unsigned int i;
struct OpListEntry *entry;
+ uint32_t num_mal_peers;
testbed_peers = peers;
num_peers_online = 0;
- for (i = 0 ; i < num_peers ; i++)
+ for (i = 0; i < num_peers; i++)
{
entry = make_oplist_entry ();
entry->index = i;
+ rps_peers[i].index = i;
+ if (NULL != cur_test_run.init_peer)
+ cur_test_run.init_peer (&rps_peers[i]);
entry->op = GNUNET_TESTBED_peer_get_information (peers[i],
GNUNET_TESTBED_PIT_IDENTITY,
&info_cb,
entry);
}
+ num_mal_peers = round (portion * num_peers);
GNUNET_assert (num_peers == n_peers);
- for (i = 0 ; i < n_peers ; i++)
+ for (i = 0; i < n_peers; i++)
{
rps_peers[i].index = i;
- rps_peers[i].op =
- GNUNET_TESTBED_service_connect (&rps_peers[i],
- peers[i],
- "rps",
- &rps_connect_complete_cb,
- &rps_peers[i],
- &rps_connect_adapter,
- &rps_disconnect_adapter,
- &rps_peers[i]);
+ if ( (rps_peers[i].num_recv_ids < rps_peers[i].num_ids_to_request) ||
+ (i < num_mal_peers) )
+ {
+ rps_peers[i].op =
+ GNUNET_TESTBED_service_connect (&rps_peers[i],
+ peers[i],
+ "rps",
+ &rps_connect_complete_cb,
+ &rps_peers[i],
+ &rps_connect_adapter,
+ &rps_disconnect_adapter,
+ &rps_peers[i]);
+ }
}
if (NULL != churn_task)
else if (strstr (argv[0], "_seed_big") != NULL)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test seeding (num_peers > GNUNET_SERVER_MAX_MESSAGE_SIZE)\n");
+ num_peers = 1;
cur_test_run.name = "test-rps-seed-big";
cur_test_run.main_test = seed_big_cb;
+ cur_test_run.eval_cb = no_eval;
+ timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10);
}
else if (strstr (argv[0], "_single_peer_seed") != NULL)