*
*/
#include "platform.h"
+#include "gnunet_constants.h"
#include "gnunet_arm_service.h"
#include "gnunet_testing_lib.h"
#include "gnunet_core_service.h"
connect_attempts = 0;
conn_meter = create_meter ((((pg->total * pg->total) + pg->total) / 2)
- - pg->total, "Create Clique ", GNUNET_YES);
+ - pg->total, "Create Clique ", GNUNET_NO);
for (outer_count = 0; outer_count < pg->total - 1; outer_count++)
{
for (inner_count = outer_count + 1; inner_count < pg->total; inner_count++)
update_meter (conn_meter);
}
}
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Meter has %d left\n",
- conn_meter->total - conn_meter->completed);
reset_meter (conn_meter);
free_meter (conn_meter);
return connect_attempts;
GNUNET_asprintf (&arg, "%s/friends", temp_service_path);
procarr[pg_iter] = GNUNET_OS_start_process (NULL, NULL, "mv", "mv",
mytemp, arg, NULL);
+ GNUNET_assert(procarr[pg_iter] != NULL);
#if VERBOSE_TESTING
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
_("Copying file with command cp %s %s\n"), mytemp, arg);
temp_service_path);
procarr[pg_iter] = GNUNET_OS_start_process (NULL, NULL, "scp", "scp",
mytemp, arg, NULL);
-
+ GNUNET_assert(procarr[pg_iter] != NULL);
ret = GNUNET_OS_process_wait (procarr[pg_iter]); /* FIXME: schedule this, throttle! */
GNUNET_OS_process_close (procarr[pg_iter]);
if (ret != GNUNET_OK)
temp_service_path);
procarr[pg_iter] = GNUNET_OS_start_process (NULL, NULL, "scp", "scp",
mytemp, arg, NULL);
-
+ GNUNET_assert(procarr[pg_iter] != NULL);
GNUNET_OS_process_wait (procarr[pg_iter]); /* FIXME: add scheduled blacklist file copy that parallelizes file copying! */
#if VERBOSE_TESTING
{
struct SendHelloContext *send_hello_context = cls;
//unsigned int pg_iter;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
{
GNUNET_free(send_hello_context);
return;
struct SendHelloContext *send_hello_context = cls;
struct GNUNET_TESTING_PeerGroup *pg = send_hello_context->pg;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
{
GNUNET_free(send_hello_context);
return;
struct ConnectContext *connect_context = cls;
struct GNUNET_TESTING_PeerGroup *pg = connect_context->ct_ctx->pg;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
return;
if ((pg->outstanding_connects > pg->max_outstanding_connections)
"Creating connection between %d and %d\n", pg_iter,
iter->index);
total += add_connections (pg, pg_iter, iter->index, CONNECT,
- GNUNET_NO);
+ GNUNET_YES);
//total += add_actual_connections(pg, pg_iter, iter->index);
iter = iter->next;
}
if ((restrict_topology != GNUNET_TESTING_TOPOLOGY_NONE) && (restrict_topology
!= GNUNET_TESTING_TOPOLOGY_FROM_FILE))
create_clique (pg, &add_connections, BLACKLIST, GNUNET_NO);
+ else
+ return num_connections;
unblacklisted_connections = 0;
/* Un-blacklist connections as per the topology specified */
struct CoreContext *core_context = cls;
struct TopologyIterateContext *topology_context =
(struct TopologyIterateContext *) core_context->iter_context;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
return;
if (topology_context->connected
struct StatsIterateContext *stats_context =
(struct StatsIterateContext *) core_context->iter_context;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
return;
if (stats_context->connected > stats_context->pg->max_outstanding_connections)
{
struct InternalStartContext *internal_context = cls;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
{
return;
}
{
struct InternalStartContext *internal_context = cls;
- if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN)
+ if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
{
return;
}
struct GNUNET_TESTING_PeerGroup *pg;
struct HostData *host;
+
+ struct GNUNET_OS_Process *proc;
};
static void
-start_peer_helper (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+check_peers_started (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct PeerStartHelperContext *helper = cls;
- char *baseservicehome;
- char *tempdir;
- struct GNUNET_OS_Process *proc;
- unsigned int i;
- char *arg;
enum GNUNET_OS_ProcessStatusType type;
unsigned long code;
+ unsigned int i;
GNUNET_TESTING_NotifyDaemonRunning cb;
- /* ssh user@host peerStartHelper /path/to/basedirectory */
- GNUNET_assert(GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (helper->pg->cfg, "PATHS", "SERVICEHOME",
- &baseservicehome));
- GNUNET_asprintf(&tempdir, "%s/%s/", baseservicehome, helper->host->hostname);
- if (NULL != helper->host->username)
- GNUNET_asprintf (&arg, "%s@%s", helper->host->username, helper->host->hostname);
- else
- GNUNET_asprintf (&arg, "%s", helper->host->hostname);
-
- /* FIXME: Doesn't support ssh_port option! */
- proc = GNUNET_OS_start_process (NULL, NULL, "ssh", "ssh", arg,
- "peerStartHelper.pl", tempdir, NULL);
-
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "starting peers with cmd ssh %s %s %s\n", arg, "peerStartHelper.pl", tempdir);
-
- GNUNET_OS_process_wait (proc);
- if (GNUNET_OK != GNUNET_OS_process_status (proc, &type, &code))
- code = 1;
- GNUNET_OS_process_close(proc);
- GNUNET_free (tempdir);
- GNUNET_free (baseservicehome);
- GNUNET_free (arg);
+ if (GNUNET_NO == GNUNET_OS_process_status (helper->proc, &type, &code)) /* Still running, wait some more! */
+ {
+ GNUNET_SCHEDULER_add_delayed(GNUNET_CONSTANTS_EXEC_WAIT, &check_peers_started, helper);
+ return;
+ }
helper->pg->starting--;
if (helper->pg->starting == 0) /* All peers have finished starting! */
{
cb = helper->pg->peers[i].daemon->cb;
helper->pg->peers[i].daemon->cb = NULL;
-
+ helper->pg->peers[i].daemon->running = GNUNET_YES;
+ helper->pg->peers[i].daemon->phase = SP_START_DONE;
if (NULL != cb)
{
if ((type != GNUNET_OS_PROCESS_EXITED) || (code != 0))
- {
- cb (helper->pg->peers[i].daemon->cb_cls,
- &helper->pg->peers[i].daemon->id,
- helper->pg->peers[i].daemon->cfg, helper->pg->peers[i].daemon,
- "Failed to execute peerStartHelper.pl, or return code bad!");
- }
+ cb (helper->pg->peers[i].daemon->cb_cls,
+ &helper->pg->peers[i].daemon->id,
+ helper->pg->peers[i].daemon->cfg, helper->pg->peers[i].daemon,
+ "Failed to execute peerStartHelper.pl, or return code bad!");
else
cb (helper->pg->peers[i].daemon->cb_cls,
&helper->pg->peers[i].daemon->id,
}
}
+ GNUNET_OS_process_close(helper->proc);
+}
+static void
+start_peer_helper (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct PeerStartHelperContext *helper = cls;
+ char *baseservicehome;
+ char *tempdir;
+ char *arg;
+ /* ssh user@host peerStartHelper /path/to/basedirectory */
+ GNUNET_assert(GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (helper->pg->cfg, "PATHS", "SERVICEHOME",
+ &baseservicehome));
+ GNUNET_asprintf(&tempdir, "%s/%s/", baseservicehome, helper->host->hostname);
+ if (NULL != helper->host->username)
+ GNUNET_asprintf (&arg, "%s@%s", helper->host->username, helper->host->hostname);
+ else
+ GNUNET_asprintf (&arg, "%s", helper->host->hostname);
+
+ /* FIXME: Doesn't support ssh_port option! */
+ helper->proc = GNUNET_OS_start_process (NULL, NULL, "ssh", "ssh", arg,
+ "peerStartHelper.pl", tempdir, NULL);
+ GNUNET_assert(helper->proc != NULL);
+ GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "starting peers with cmd ssh %s %s %s\n", arg, "peerStartHelper.pl", tempdir);
+ GNUNET_SCHEDULER_add_now (&check_peers_started, helper);
+ GNUNET_free (tempdir);
+ GNUNET_free (baseservicehome);
+ GNUNET_free (arg);
}
#endif
uint64_t total_hostkeys;
struct GNUNET_OS_Process *proc;
+ username = NULL;
if (0 == total)
{
GNUNET_break (0);
else
proc = GNUNET_OS_start_process (NULL, NULL, "ssh", "ssh", arg,
"mkdir -p", tmpdir, NULL);
+ GNUNET_assert(proc != NULL);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Creating remote dir with command ssh %s %s %s\n", arg,
" mkdir -p ", tmpdir);
fs = 0;
GNUNET_log (
- GNUNET_ERROR_TYPE_WARNING,
+ GNUNET_ERROR_TYPE_DEBUG,
"Found file size %llu for hostkeys, expect hostkeys to be size %d\n",
fs, HOSTKEYFILESIZE);
else
{
total_hostkeys = fs / HOSTKEYFILESIZE;
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Will read %llu hostkeys from file\n", total_hostkeys);
pg->hostkey_data = GNUNET_malloc_large (fs);
GNUNET_assert (fs == GNUNET_DISK_file_read (fd, pg->hostkey_data, fs));
#else
if ((pg->hostkey_data != NULL) && (hostcnt > 0))
{
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Have hostkey data and running on remote hosts!\n");
pg->peers[off].daemon = GNUNET_TESTING_daemon_start (pcfg,
timeout,
GNUNET_YES,
GNUNET_asprintf(&newservicehome, "%s/%s/", baseservicehome, pg->hosts[off].hostname);
if (NULL != username)
- GNUNET_asprintf (&arg, "%s@%s:%s", username, pg->hosts[off].hostname, newservicehome);
+ GNUNET_asprintf (&arg, "%s@%s:%s/%s", username, pg->hosts[off].hostname, baseservicehome, pg->hosts[off].hostname);
else
- GNUNET_asprintf (&arg, "%s:%s", pg->hosts[off].hostname, newservicehome);
+ GNUNET_asprintf (&arg, "%s:%s/%s", pg->hosts[off].hostname, baseservicehome, pg->hosts[off].hostname);
/* FIXME: Doesn't support ssh_port option! */
- proc = GNUNET_OS_start_process (NULL, NULL, "scp", "scp", "-r",
-#if !DEBUG_TESTING
- "-q",
-#endif
- newservicehome, arg, NULL);
-
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "copying directory with command scp -r %s %s\n", newservicehome, arg);
+ proc = GNUNET_OS_start_process (NULL, NULL, "rsync", "rsync", "-r", newservicehome, arg, NULL);
+ GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "copying directory with command rsync -r %s %s\n", newservicehome, arg);
GNUNET_free (arg);
if (NULL == proc)
unsigned int *running_permute;
unsigned int *stopped_permute;
+ shutdown_ctx = NULL;
+ peer_shutdown_ctx = NULL;
+ peer_restart_ctx = NULL;
+ churn_startup_ctx = NULL;
+
running = 0;
stopped = 0;
GNUNET_SCHEDULER_add_now (&schedule_shutdown_task, peer_shutdown_ctx);
if (NULL != pg->peers[off].cfg)
+ {
GNUNET_CONFIGURATION_destroy (pg->peers[off].cfg);
+ pg->peers[off].cfg = NULL;
+ }
#if OLD
conn_iter = pg->peers[off].allowed_peers_head;
while (conn_iter != NULL)