From 6aa0b9eb1b7bed77d8c4a7727a7f66c52439167f Mon Sep 17 00:00:00 2001 From: Sree Harsha Totakura Date: Wed, 5 Dec 2012 13:56:23 +0000 Subject: [PATCH] - Loadleveler code --- src/testbed/Makefile.am | 15 +++++-- src/testbed/ll_master.c | 92 +++++++++++++++++++++++++++++++++++++++- src/testbed/ll_monitor.c | 76 +++++++++++++++++++++++++++++++++ src/testbed/sample.job | 16 +++++++ 4 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 src/testbed/ll_monitor.c create mode 100755 src/testbed/sample.job diff --git a/src/testbed/Makefile.am b/src/testbed/Makefile.am index a4adb026d..d8cc9a207 100644 --- a/src/testbed/Makefile.am +++ b/src/testbed/Makefile.am @@ -10,7 +10,9 @@ if USE_COVERAGE endif if WITH_LL - ll_binaries = ll-master + ll_binaries = \ + ll-master \ + ll-monitor endif libexecdir= $(pkglibdir)/libexec/ @@ -61,7 +63,13 @@ gnunet_helper_testbed_DEPENDENCIES = \ ll_master_SOURCES = \ ll_master.c ll_master_LDADD = $(XLIB) \ - $(LTLIBINTL) -lz + $(top_builddir)/src/util/libgnunetutil.la \ + $(LTLIBINTL) -lz -lllapi + +ll_monitor_SOURCES = \ + ll_monitor.c +ll_monitor_LDADD = $(XLIB) \ + $(LTLIBINTL) -lz -lllapi lib_LTLIBRARIES = \ libgnunettestbed.la @@ -272,4 +280,5 @@ EXTRA_DIST = \ test_testbed_api_testbed_run_topologyfromfile.conf \ test_testbed_api_testbed_run_topologyscalefree.conf \ overlay_topology.txt \ - sample_hosts.txt + sample_hosts.txt \ + sample.job diff --git a/src/testbed/ll_master.c b/src/testbed/ll_master.c index 4eca0e865..23d121582 100644 --- a/src/testbed/ll_master.c +++ b/src/testbed/ll_master.c @@ -1,6 +1,94 @@ +/* + This file is part of GNUnet + (C) 2012 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + */ + +/** + * @file testbed/ll_master.c + * @brief The load level master. Creates child processes through LoadLeveler + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "gnunet_util_lib.h" #include -int main() +/** + * LL job information + */ +static struct LL_job job_info; + +/** + * Exit status + */ +static int status; + +/** + * Main function that will be run. + * + * @param cls closure + * @param args remaining command-line arguments + * @param cfgfile name of the configuration file used (for saving, can be NULL!) + * @param cfg configuration + */ +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) { - return 0; + int ret; + + if (NULL == args[0]) + { + fprintf (stderr, _("Job command file not given. Exiting\n")); + return; + } + ret = llsubmit (args[0], + NULL, //char *monitor_program, + NULL, //char *monitor_arg, + &job_info, + LL_JOB_VERSION); + if (0 != ret) + return; + status = GNUNET_OK; +} + + +/** + * Main function + * + * @param argc the number of command line arguments + * @param argv command line arg array + * @return return code + */ +int +main (int argc, char **argv) +{ + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + int ret; + + status = GNUNET_SYSERR; + ret = + GNUNET_PROGRAM_run (argc, argv, "ll-master", + "LoadLeveler master process for starting child processes", options, + &run, NULL); + if (GNUNET_OK != ret) + return 1; + return (GNUNET_OK == status) ? 0 : 1; } diff --git a/src/testbed/ll_monitor.c b/src/testbed/ll_monitor.c new file mode 100644 index 000000000..695655056 --- /dev/null +++ b/src/testbed/ll_monitor.c @@ -0,0 +1,76 @@ +/* + This file is part of GNUnet + (C) 2012 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + */ + +/** + * @file testbed/ll_monitor.c + * @brief The load level monitor process. This is called whenever a job event + * happens. This file is called with the following syntax: + * "monitor_program job_id user_arg state exit_status" + * @author Sree Harsha Totakura + */ + +#include "platform.h" +#include "gnunet_common.h" +#include + + +/** + * Main function + * + * @param argc the number of command line arguments + * @param argv command line arg array + * @return return code + */ +int +main (int argc, char **argv) +{ + char *job_id; + char *user_arg; + char *state; + char *exit_status; + char *outfile; + FILE *out; + + if (5 != argc) + { + fprintf (stderr, "Invalid number of arguments\n"); + return 1; + } + job_id = argv[1]; + user_arg = argv[2]; + state = argv[3]; + exit_status = argv[4]; + PRINTF ("Job id: %s\n", job_id); + PRINTF ("\t User arg: %s \n", user_arg); + PRINTF ("\t Job state: %s \n", state); + PRINTF ("\t Exit status: %s \n", exit_status); + + if (-1 == asprintf (&outfile, "job-%s.status", job_id)) + return 1; + out = fopen (outfile, "a"); + if (NULL == out) + return 1; + fprintf (out, "Job id: %s\n", job_id); + fprintf (out, "\t User arg: %s \n", user_arg); + fprintf (out, "\t Job state: %s \n", state); + fprintf (out, "\t Exit status: %s \n", exit_status); + fclose (out); + return 0; +} diff --git a/src/testbed/sample.job b/src/testbed/sample.job new file mode 100755 index 000000000..da3ee47f4 --- /dev/null +++ b/src/testbed/sample.job @@ -0,0 +1,16 @@ +#!/bin/bash +# This job command file is called job.cmd +#@ job_type = parallel +#@ class = general +#@ node = 1 +#@ output = job$(jobid).out +#@ error = job$(jobid).err +#@ total_tasks=16 +#@ wall_clock_limit = 0:0:1 +#@ network.MPI = sn_all,not_shared,us +##@ ... other LoadLeveler keywords (see below) +#@ notification = always +#@ notify_user = totakura@in.tum.de +#@ queue + +#@ executable = /bin/bash -- 2.25.1