2 #include "gnunet_util_lib.h"
3 #include "gnunet_resolver_service.h"
4 #include "gnunet_testbed_service.h"
8 * Generic logging shorthand
10 #define LOG(kind,...) \
11 GNUNET_log_from (kind, "gnunet-mpi-test", __VA_ARGS__)
14 * Debug logging shorthand
16 #define LOG_DEBUG(...) \
17 LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
20 * Timeout for resolving IPs
22 #define RESOLVE_TIMEOUT \
23 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
33 static struct GNUNET_TESTBED_Host **hosts;
36 * Number of hosts in the host list
38 static unsigned int nhosts;
41 * Main function that will be run by the scheduler.
44 * @param args remaining command-line arguments
45 * @param cfgfile name of the configuration file used (for saving, can be NULL!)
46 * @param config configuration
49 run (void *cls, char *const *args, const char *cfgfile,
50 const struct GNUNET_CONFIGURATION_Handle *config)
52 struct GNUNET_OS_Process *proc;
54 enum GNUNET_OS_ProcessStatusType proc_status;
58 if (MPI_SUCCESS != MPI_Comm_rank (MPI_COMM_WORLD, &rank))
68 PRINTF ("Spawning process\n");
70 GNUNET_OS_start_process_vap (GNUNET_NO, GNUNET_OS_INHERIT_STD_ALL, NULL,
74 printf ("Cannot exec\n");
80 ret = GNUNET_OS_process_status (proc, &proc_status, &code);
82 while (GNUNET_NO == ret);
83 GNUNET_assert (GNUNET_NO != ret);
88 LOG (GNUNET_ERROR_TYPE_WARNING, "Child terminated abnormally\n");
100 if (0 == (nhosts = GNUNET_TESTBED_hosts_load_from_loadleveler (config, &hosts)))
106 for (host = 0; host < nhosts; host++)
107 GNUNET_TESTBED_host_destroy (hosts[host]);
115 * Execution start point
118 main (int argc, char *argv[])
120 static const struct GNUNET_GETOPT_CommandLineOption options[] = {
121 GNUNET_GETOPT_OPTION_END
129 printf ("Need arguments: gnunet-testbed-mpi-spawn <cmd> <cmd_args>");
132 if (MPI_SUCCESS != MPI_Init (&argc, &argv))
138 GNUNET_PROGRAM_run (argc, argv,
139 "gnunet-testbed-mpi-spawn <cmd> <cmd_args>",
140 _("Spawns cmd after starting my the MPI run-time"),
141 options, &run, NULL);
142 (void) MPI_Finalize ();
143 if ((GNUNET_OK == rres) && (GNUNET_OK == ret))
145 printf ("Something went wrong\n");