diff --git a/src/common/Makefile.am b/src/common/Makefile.am index 2c912a3f36bda167922aaab44318b5a0516fd052..fa75335cd20bdbeff77ff129d922e640d9c16035 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -6,15 +6,14 @@ AUTOMAKE_OPTIONS = foreign INCLUDES = -I$(top_srcdir) $(SSL_CPPFLAGS) if WITH_ELAN -elan_sources = qsw.c qsw.h +elan_sources = qsw.c qsw.h elanhosts.c elanhosts.h else elan_sources = endif -noinst_LTLIBRARIES = \ - libcommon.la \ - libdaemonize.la \ - libhostlist.la \ +noinst_LTLIBRARIES = \ + libcommon.la \ + libdaemonize.la \ libeio.la @@ -56,24 +55,21 @@ libcommon_la_SOURCES = \ slurm_jobcomp.c slurm_jobcomp.h \ arg_desc.c arg_desc.h \ macros.h \ + hostlist.c hostlist.h \ $(elan_sources) -libdaemonize_la_SOURCES = \ - daemonize.c \ - daemonize.h \ +libdaemonize_la_SOURCES = \ + daemonize.c \ + daemonize.h \ fd.c fd.h - -libhostlist_la_SOURCES = \ - hostlist.c hostlist.h - -libeio_la_SOURCES = \ - eio.c eio.h \ +libeio_la_SOURCES = \ + eio.c eio.h \ io_hdr.c io_hdr.h - -EXTRA_libcommon_la_SOURCES = \ - qsw.c qsw.h +EXTRA_libcommon_la_SOURCES = \ + qsw.c qsw.h \ + elanhosts.c elanhosts.h libcommon_la_LIBADD = $(SSL_LIBS) $(ELAN_LIBS) -ldl libcommon_la_LDFLAGS = $(SSL_LDFLAGS) diff --git a/src/common/qsw.c b/src/common/qsw.c index f0e6febb3320df9d081811b46d74d207c5459817..e942834f5318e78f33e645fceaabd579446b6fd3 100644 --- a/src/common/qsw.c +++ b/src/common/qsw.c @@ -47,6 +47,7 @@ #include <limits.h> /* INT_MAX */ #include <stdio.h> + #if HAVE_LIBELANCTRL # include <elan/elanctrl.h> # include <elan/capability.h> @@ -81,6 +82,9 @@ #include <slurm/slurm_errno.h> +#include "src/common/elanhosts.h" +#include "src/common/xassert.h" +#include "src/common/strlcpy.h" #include "src/common/bitstring.h" #include "src/common/log.h" #include "src/common/pack.h" @@ -149,6 +153,7 @@ struct qsw_jobinfo { */ static qsw_libstate_t qsw_internal_state = NULL; static pthread_mutex_t qsw_lock = PTHREAD_MUTEX_INITIALIZER; +static elanhost_config_t elanconf = NULL; /* @@ -821,6 +826,7 @@ qsw_setcap(qsw_jobinfo_t jobinfo, int procnum) return 0; } + /* * Return the local elan address (for rail 0) or -1 on failure. */ @@ -854,44 +860,64 @@ qsw_getnodeid(void) } -/* - * XXX - note qsw_getnodeid_byhost and qsw_gethost_bynodeid: - * Eventually provide an autoconf option to look up mappings from a flat - * file, or use the slurm.conf. For now, assume that all QsNet systems - * conform to RMS's hostname requirements. They are: - * 1) all hostnames with an elan adapter have a numerical suffix that - * corresponds to the elanid. - * 2) numerical suffixes never have leading zeros - * 3) all hostnames without an elan adapter have a single character suffix. - */ +static int +_read_elanhost_config (void) +{ + int rc; + + if (!(elanconf = elanhost_config_create ())) + return (-1); + + if ((rc = elanhost_config_read (elanconf, NULL)) < 0) { + error ("Unable to read Elan config: %s", + elanhost_config_err (elanconf)); + elanhost_config_destroy (elanconf); + elanconf = NULL; + return (-1); + } + + return (0); +} + +int +qsw_maxnodeid(void) +{ + int maxid = -1; + + _lock_qsw(); + if (!elanconf && (_read_elanhost_config() < 0)) + goto done; + + maxid = elanhost_config_maxid (elanconf); + + done: + _unlock_qsw(); + return maxid; +} /* * Given a hostname, return the elanid or -1 on error. - * XXX - assumes RMS style hostnames (see above) + * Initializes the elanconfig from the default /etc/elanhosts + * config file. */ int qsw_getnodeid_byhost(char *host) { - char *p, *q, tmp[8]; int id = -1; - /* position p over last character to scan */ - if ((p = strchr(host, '.'))) - p--; - else - p = host + strlen(host) - 1; + if (host == NULL) + return (-1); + + _lock_qsw(); + if (!elanconf && (_read_elanhost_config() < 0)) + goto done; - /* copy numerical suffix to tmp */ - tmp[sizeof(tmp) - 1] = '\0'; - q = &tmp[sizeof(tmp) - 2]; - while (q >= tmp && p >= host && isdigit(*p)) - *q-- = *p--; + xassert (elanconf != NULL); - if (q < &tmp[sizeof(tmp) - 2]) - id = atoi(q + 1); + id = elanhost_host2elanid (elanconf, host); - if (id == -1) - slurm_seterrno(EGETNODEID_BYHOST); + done: + _unlock_qsw(); return id; } @@ -903,36 +929,25 @@ qsw_getnodeid_byhost(char *host) int qsw_gethost_bynodeid(char *buf, int len, int id) { - char name[MAXHOSTNAMELEN]; - char *domainname; - char *p; - int res; - - if (id == -1) - slurm_seterrno_ret(EGETHOST_BYNODEID); - - /* use the local hostname to determine 'base' name */ - if (gethostname(name, MAXHOSTNAMELEN) < 0) - return -1; /* sets errno */ - if ((domainname = strchr(name, '.'))) - *domainname++ = '\0'; /* save domainname for later */ - - /* extract the 'base' name */ - if (qsw_getnodeid_byhost(name) == -1) /* no numerical suffix */ - name[strlen(name) - 1] = '\0'; /* assume one char suffix */ - else { /* numerical suffix */ - p = name + strlen(name) - 1; - while (p >= name && isdigit(*p)) - *p-- = '\0'; - } + int rc = -1; + char *hostp; - /* construct the new name from the id and the 'base' name. */ - if (domainname) - res = snprintf(buf, len, "%s%d.%s", name, id, domainname); - else - res = snprintf(buf, len, "%s%d", name, id); + if (id < 0) slurm_seterrno_ret(EGETHOST_BYNODEID); + + _lock_qsw(); + if (!elanconf && (_read_elanhost_config() < 0)) + goto done; - return res; + if (!(hostp = elanhost_elanid2host (elanconf, ELANHOST_EIP, id))) { + slurm_seterrno (EGETHOST_BYNODEID); + goto done; + } + + rc = strlcpy (buf, hostp, len); + + done: + _unlock_qsw(); + return (rc); } /* diff --git a/src/common/qsw.h b/src/common/qsw.h index 8477473d2788860896af77306e9529ea750a44b6..21f722d583968fe9bbb1534cafc779cc546065d3 100644 --- a/src/common/qsw.h +++ b/src/common/qsw.h @@ -87,6 +87,9 @@ int qsw_setcap(qsw_jobinfo_t jobinfo, int procnum); int qsw_prgsignal(qsw_jobinfo_t jobinfo, int signum); /* was qsw_signal_job */ + /* return max ElanID in configuration */ +int qsw_maxnodeid(void); + int qsw_getnodeid(void); int qsw_getnodeid_byhost(char *host); int qsw_gethost_bynodeid(char *host, int len, int elanid); diff --git a/src/scontrol/Makefile.am b/src/scontrol/Makefile.am index 61374c178bcef86f04a47dab6252de0aff40ae0d..858c07f1635e6a4169f3f1a363d480e22559639f 100644 --- a/src/scontrol/Makefile.am +++ b/src/scontrol/Makefile.am @@ -9,7 +9,6 @@ bin_PROGRAMS = scontrol LDADD = \ $(top_builddir)/src/common/libcommon.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/api/libslurm.la \ $(READLINE_LIBS) diff --git a/src/sinfo/Makefile.am b/src/sinfo/Makefile.am index 9fc5557ec8476694d33e0b5877f46ae0eb1dde4c..963529ba6af11c437cb2f45399754386ac6ba0c9 100644 --- a/src/sinfo/Makefile.am +++ b/src/sinfo/Makefile.am @@ -9,7 +9,6 @@ bin_PROGRAMS = sinfo sinfo_LDADD = \ $(top_builddir)/src/common/libcommon.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/api/libslurm.la noinst_HEADERS = sinfo.h print.h diff --git a/src/slurmctld/Makefile.am b/src/slurmctld/Makefile.am index 21f3906d06aae5e0594f54962a718e35d8aa3f82..cb3ae26ea8f26e14434c2d062913dc8bbc95cdab 100644 --- a/src/slurmctld/Makefile.am +++ b/src/slurmctld/Makefile.am @@ -11,7 +11,6 @@ sbin_PROGRAMS = slurmctld slurmctld_LDADD = \ $(top_builddir)/src/common/libcommon.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/common/libdaemonize.la diff --git a/src/slurmd/Makefile.am b/src/slurmd/Makefile.am index e35b325ce0cbc5de5703f3f8b23a177363e2104c..6c0e827f352585061781a9f1e4b9b620fd580eaf 100644 --- a/src/slurmd/Makefile.am +++ b/src/slurmd/Makefile.am @@ -9,7 +9,7 @@ sbin_PROGRAMS = slurmd INCLUDES = -I$(top_srcdir) $(SSL_CPPFLAGS) if WITH_ELAN -interconnect_sources = elan_interconnect.c elanhosts.c elanhosts.h +interconnect_sources = elan_interconnect.c else interconnect_sources = no_interconnect.c endif @@ -17,7 +17,6 @@ endif slurmd_LDADD = \ $(top_builddir)/src/common/libcommon.la \ $(top_builddir)/src/common/libdaemonize.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/common/libeio.la \ $(SSL_LIBS) @@ -46,8 +45,7 @@ slurmd_LDFLAGS = -export-dynamic EXTRA_slurmd_SOURCES = \ no_interconnect.c \ - elan_interconnect.c \ - elanhosts.c elanhosts.h + elan_interconnect.c force: $(slurmd_LDADD) : force diff --git a/src/slurmd/elan_interconnect.c b/src/slurmd/elan_interconnect.c index 9408a52b292795e3bb2753328b394341fed3e2e5..ecf503ef6754fee4c15cc4067343367e791f32d2 100644 --- a/src/slurmd/elan_interconnect.c +++ b/src/slurmd/elan_interconnect.c @@ -45,18 +45,17 @@ #include "src/common/hostlist.h" #include "src/common/qsw.h" #include "src/common/slurm_protocol_api.h" +#include "src/common/elanhosts.h" #include "src/slurmd/interconnect.h" #include "src/slurmd/setenvpf.h" -#include "src/slurmd/elanhosts.h" #ifdef HAVE_LIBELAN3 -# include <elan3/elan3.h> +#include <elan3/elan3.h> /* * Static prototypes for network error resolver creation: */ -static int set_elan_ids(elanhost_config_t ec); -static int load_neterr_data(void); +static int set_elan_ids(void); static void *neterr_thr(void *arg); static int neterr_retval = 0; @@ -87,7 +86,7 @@ int interconnect_node_init(void) /* * Load neterr elanid/hostname values into kernel */ - if (load_neterr_data() < 0) + if (set_elan_ids() < 0) return SLURM_FAILURE; if ((err = pthread_attr_init(&attr))) @@ -166,30 +165,6 @@ static void *neterr_thr(void *arg) return NULL; } - -/* - * Parse an ElanId config file and load elanid,hostname pairs - * into the kernel. - */ -static int -load_neterr_data(void) -{ - elanhost_config_t ec = elanhost_config_create(); - int rc; - - if ((rc = elanhost_config_read(ec, NULL)) < 0) { - error("unable to read elan config: %s", - elanhost_config_err(ec)); - goto done; - } - - rc = set_elan_ids(ec); - elanhost_config_destroy(ec); - - done: - return rc < 0 ? SLURM_FAILURE : SLURM_SUCCESS; -} - #endif /* HAVE_LIBELAN3 */ @@ -328,13 +303,13 @@ interconnect_attach(slurmd_job_t *job, int procid) #if HAVE_LIBELAN3 static int -set_elan_ids(elanhost_config_t ec) +set_elan_ids(void) { int i; - for (i = 0; i <= elanhost_config_maxid(ec); i++) { - char *host = elanhost_elanid2host(ec, ELANHOST_EIP, i); - if (host == NULL) + for (i = 0; i <= qsw_maxnodeid(); i++) { + char host[256]; + if (qsw_gethost_bynodeid(host, 256, i) < 0) continue; if (elan3_load_neterr_svc(i, host) < 0) diff --git a/src/slurmd/elanhosts.c b/src/slurmd/elanhosts.c deleted file mode 100644 index 47fcda1c210af6fc466dd8221dd4e4c0d8544797..0000000000000000000000000000000000000000 --- a/src/slurmd/elanhosts.c +++ /dev/null @@ -1,387 +0,0 @@ -/*****************************************************************************\ - * $Id$ - ***************************************************************************** - * Copyright (C) 2001-2002 The Regents of the University of California. - * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). - * Written by Mark Grondona <mgrondona@llnl.gov>. - * UCRL-CODE-2003-005. - * - * This file is part of Pdsh, a parallel remote shell program. - * For details, see <http://www.llnl.gov/linux/pdsh/>. - * - * Pdsh 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 2 of the License, or (at your option) - * any later version. - * - * Pdsh 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 Pdsh; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -\*****************************************************************************/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <assert.h> -#include <stdarg.h> -#include <stdlib.h> - -#include "src/common/list.h" -#include "src/common/hostlist.h" -#include "elanhosts.h" - -/* Default ElanId config file */ -#define ELANID_CONFIG_FILE "/etc/elanhosts" - -/* - * Error strings for error codes returned by parse_elanid_config() - */ -static char *errstr[] = -{ "No error", - "Out of memory!", - "Parse error", - "Number of ElanIds specified != number of hosts", - "Type must be \"eip\" \"eth\" or \"other\"", - NULL -}; - -/* - * Container for converting hostnames to ElanIDs - */ -struct elan_info { - elanhost_type_t type; /* type of entry */ - int elanid; /* ElanID corresponding to this hostname */ - char *hostname; /* Resolveable hostname */ -}; - -struct elanhost_config { -#ifndef NDEBUG - int magic; -# define ELANHOST_CONFIG_MAGIC 0xe100e100 -#endif - int maxid; /* Storage for max ElanID in config */ - List elanid_list; /* List of elan_info objects describing configuration */ - char errstr[1024]; /* String describing last error from this object */ -}; - - -/* - * Static Prototypes: - */ -static elanhost_config_t _elanhost_config_alloc(void); -static void _elanhost_err(elanhost_config_t ec, const char *fmt, ...); -static int _find_host(struct elan_info *ei, char *key); -static int _parse_elanid_config(elanhost_config_t ec, const char *path); -static int _parse_elanid_line(elanhost_config_t ec, char *buf); -static struct elan_info * _elan_info_create(elanhost_type_t type, - int elanid, char *hostname); -static void _elan_info_destroy(struct elan_info *ei); - - -elanhost_config_t elanhost_config_create() -{ - return _elanhost_config_alloc(); -} - - -int elanhost_config_read(elanhost_config_t ec, const char *filename) -{ - assert(ec != NULL); - assert(ec->magic == ELANHOST_CONFIG_MAGIC); - assert(ec->elanid_list != NULL); - - if (filename == NULL) - filename = ELANID_CONFIG_FILE; - - if (_parse_elanid_config(ec, filename) < 0) - return(-1); - - return(0); -} - -void elanhost_config_destroy(elanhost_config_t ec) -{ - assert(ec != NULL); - assert(ec->magic == ELANHOST_CONFIG_MAGIC); - list_destroy(ec->elanid_list); - assert(ec->magic = ~ELANHOST_CONFIG_MAGIC); - free(ec); -} - -int elanhost_config_maxid(elanhost_config_t ec) -{ - assert(ec != NULL); - assert(ec->magic == ELANHOST_CONFIG_MAGIC); - - return ec->maxid; -} - -int elanhost_host2elanid(elanhost_config_t ec, char *host) -{ - struct elan_info *ei; - - assert(ec != NULL); - assert(host != NULL); - assert(ec->magic == ELANHOST_CONFIG_MAGIC); - - ei = list_find_first(ec->elanid_list, (ListFindF) _find_host, host); - - if (!ei) { - _elanhost_err(ec, "Unable to find host \"%s\" in configuration", host); - return -1; - } - - return ei->elanid; -} - -const char *elanhost_config_err(elanhost_config_t ec) -{ - return ec->errstr; -} - - -struct elanid_find_arg { - elanhost_type_t type; - int elanid; -}; - -static int _find_elanid(struct elan_info *ei, struct elanid_find_arg *arg) -{ - if (ei->type != arg->type) - return 0; - - if (ei->elanid != arg->elanid) - return 0; - - return 1; -} - -char *elanhost_elanid2host(elanhost_config_t ec, elanhost_type_t type, int eid) -{ - struct elan_info *ei; - struct elanid_find_arg arg; - - assert(ec != NULL); - assert(eid >= 0); - assert(ec->magic == ELANHOST_CONFIG_MAGIC); - - arg.type = type; - arg.elanid = eid; - - ei = list_find_first(ec->elanid_list, (ListFindF) _find_elanid, &arg); - - if (!ei) { - _elanhost_err(ec, "Unable to find host with type=%d elanid=%d", - type, eid); - return(NULL); - } - - return ei->hostname; -} - -static elanhost_config_t _elanhost_config_alloc(void) -{ - elanhost_config_t new = malloc(sizeof(*new)); - - new->maxid = -1; - new->elanid_list = list_create((ListDelF) _elan_info_destroy); - - assert(new->magic = ELANHOST_CONFIG_MAGIC); - - return new; -} - -static void _elanhost_err(elanhost_config_t ec, const char *fmt, ...) -{ - va_list ap; - - assert(ec != NULL); - assert(fmt != NULL); - - va_start(ap, fmt); - vsnprintf(ec->errstr, 1024, fmt, ap); - va_end(ap); - - return; -} - -/* - * Parse the "elanhosts" config file which has the form - * - * ElanIds Hostnames - * [n-m] host_n,...,host_m - * [n-m] host[n-m] - * etc. - * - * and which maps ElanIds to hostnames on the cluster. - * The results are stored in the config object's elanid_list member. - * - * Returns 0 on Success, and an error code < 0 on failure. - */ -static int _parse_elanid_config(elanhost_config_t ec, const char *path) -{ - char buf[4096]; - int line; - FILE *fp; - - if (!(fp = fopen(path, "r"))) { - _elanhost_err(ec, "failed to open %s\n", path); - return -1; - } - - line = 1; - while (fgets(buf, 4096, fp)) { - int rc; - if ((rc = _parse_elanid_line(ec, buf)) < 0) { - _elanhost_err(ec, "%s: line %d: %s", path, line, errstr[-rc]); - return -1; - } - line++; - } - - if (fclose(fp) < 0) - _elanhost_err(ec, "close(%s): %m", path); - - return 0; -} - - -/* - * Translate type strings "eip," "eth," or "other" into their - * corresponding elanhost_type_t number - */ -static elanhost_type_t _get_type_num(char *type) -{ - if (strcasecmp(type, "eip") == 0) - return ELANHOST_EIP; - else if (strcasecmp(type, "eth") == 0) - return ELANHOST_ETH; - else if (strcasecmp(type, "other") == 0) - return ELANHOST_OTHER; - else - return -1; -} - -/* - * Parse one line of elanId list appending results to list "eil" - * - * Returns -1 for parse error, -2 if the number of elanids specified - * doesn't equal the number of hosts. - * - * Returns 0 on success - */ -static int -_parse_elanid_line(elanhost_config_t ec, char *buf) -{ - hostlist_t el, hl; - const char *separators = " \t\n"; - char *type; - char *elanids; - char *hosts; - char *sp, *s; - int rc = 0; - int typenum; - - /* - * Nullify any comments - */ - if ((s = strchr(buf, '#'))) - *s = '\0'; - - if (!(type = strtok_r(buf, separators, &sp))) - return 0; - - if (!(elanids = strtok_r(NULL, separators, &sp))) - return -1; - - if (!(hosts = strtok_r(NULL, separators, &sp))) - return -2; - - el = hostlist_create(NULL); - hl = hostlist_create(NULL); - - if (!el || !hl) { - rc = -1; - goto done; - } - - if (hostlist_push(el, elanids) != hostlist_push(hl, hosts)) { - rc = -3; - goto done; - } - - if ((typenum = _get_type_num(type)) < 0) - return -4; - - while ((s = hostlist_shift(el))) { - char *eptr; - int elanid = (int) strtoul(s, &eptr, 10); - - if (*eptr != '\0') { - rc = -2; - goto done; - } - - free(s); - if (!(s = hostlist_shift(hl))) { - rc = -1; - goto done; - } - - if (elanid > ec->maxid) - ec->maxid = elanid; - - list_append(ec->elanid_list, _elan_info_create(typenum, elanid, s)); - } - - done: - hostlist_destroy(el); - hostlist_destroy(hl); - - return rc; -} - -static struct elan_info * -_elan_info_create(elanhost_type_t type, int elanid, char *hostname) -{ - struct elan_info *ei = (struct elan_info *) malloc(sizeof(*ei)); - ei->type = type; - ei->elanid = elanid; - ei->hostname = hostname; - return ei; -} - -static void -_elan_info_destroy(struct elan_info *ei) -{ - if (ei->hostname) - free(ei->hostname); - free(ei); -} - - -/* - * List Find function for mapping hostname to an ElanId - */ -static int _find_host(struct elan_info *ei, char *key) -{ - if (strcmp(ei->hostname, key) != 0) - return 0; - else - return 1; -} - - -/* - * vi:tabstop=4 shiftwidth=4 expandtab - */ - diff --git a/src/slurmd/elanhosts.h b/src/slurmd/elanhosts.h deleted file mode 100644 index d5cb0bb6526fb379e7fb6a1a16d51978d689e685..0000000000000000000000000000000000000000 --- a/src/slurmd/elanhosts.h +++ /dev/null @@ -1,121 +0,0 @@ -/*****************************************************************************\ - * $Id$ - ***************************************************************************** - * Copyright (C) 2001-2002 The Regents of the University of California. - * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). - * Written by Mark Grondona <mgrondona@llnl.gov>. - * UCRL-CODE-2003-005. - * - * This file is part of Pdsh, a parallel remote shell program. - * For details, see <http://www.llnl.gov/linux/pdsh/>. - * - * Pdsh 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 2 of the License, or (at your option) - * any later version. - * - * Pdsh 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 Pdsh; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -\*****************************************************************************/ - -#ifndef _ELANHOSTS_H -#define _ELANHOSTS_H - -/* - * Type of Elan "hostname" - * Hostname corresponds to the eip adapter, an ethernet adapter, or "other" - */ -typedef enum { - ELANHOST_EIP, - ELANHOST_ETH, - ELANHOST_OTHER -} elanhost_type_t; - -/* Opaque type which holds the elanhost configuration - */ -typedef struct elanhost_config * elanhost_config_t; - - -/* - * Functions - */ - -/* - * Create an empty Elanhost config object - */ -elanhost_config_t elanhost_config_create(void); - -/* - * Read elanhosts configuration from `file' - * (Default /etc/elanhosts) - * - * Config file format is as follows: - * - * Type ElanIDs Hostnames - * - * The "type" field may be "eip" for eip interface, "eth" for an - * ethernet interface, or "other" for anything else. ("eth" and - * "other" are equivalent at this time) - * - * The "ElanIDs" field consists of a list of one or more ElanIDs in - * the form "[i-j,n-m,..]" or just "N" for a single ElanID. - * - * The "Hostname" field consists of the hostnames which correspond - * to the ElanIDs. If the hostnames have a numeric suffix a bracketed - * hostlist is allowed (see hostlist.[ch]) - * - * For Example: - * - * Type ElanIDs Hostnames - * eip [0-10] host[0-10] - * eth [0-10] ehost[0-10] - * eth [0,1] host0-eth1,host1-eth1 - * - * Returns 0 on succes, -1 for failure. - * - */ -int elanhost_config_read(elanhost_config_t ec, const char *filename); - - -/* - * Destroy an elanhost configuration object. - */ -void elanhost_config_destroy(elanhost_config_t conf); - - -/* - * Given a hostname, return the corresponding ElanID - * - * Returns the ElanId on success, -1 if no host matching "hostname" - * was found in the configuration. - * - */ -int elanhost_host2elanid(elanhost_config_t ec, char *host); - - -/* - * Given an ElanId and adapter type, return the first matching hostname - * from the configuration. - */ -char *elanhost_elanid2host(elanhost_config_t ec, - elanhost_type_t type, int elanid); - - -/* - * Returns the max ElanID from the configuration - */ -int elanhost_config_maxid(elanhost_config_t ec); - - -/* - * Returns the last error string generated for the elan config obj `ec' - */ -const char *elanhost_config_err(elanhost_config_t ec); - -#endif diff --git a/src/squeue/Makefile.am b/src/squeue/Makefile.am index 04c3aa1ce098b6072fbc0e1bb7ffa35d49b7e050..e65d0d20cc06e47976ff7ccddd2fe8fb77492abc 100644 --- a/src/squeue/Makefile.am +++ b/src/squeue/Makefile.am @@ -9,7 +9,6 @@ INCLUDES = -I$(top_srcdir) bin_PROGRAMS = squeue LDADD = $(top_builddir)/src/common/libcommon.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/api/libslurm.la noinst_HEADERS = squeue.h print.h diff --git a/src/srun/Makefile.am b/src/srun/Makefile.am index 61dbb868043aa4b1b5436b5925b36f3fbfa5224e..0ee22cd47682f426c9a2658848585cdfe85e7fa6 100644 --- a/src/srun/Makefile.am +++ b/src/srun/Makefile.am @@ -37,7 +37,6 @@ srun_SOURCES = \ convenience_libs = \ $(top_builddir)/src/common/libcommon.la \ - $(top_builddir)/src/common/libhostlist.la \ $(top_builddir)/src/common/libeio.la \ $(top_builddir)/src/api/libslurm.la diff --git a/src/srun/launch.c b/src/srun/launch.c index 02292a20cedbbbd335051bc7e268951d2159a28d..449f8ebcb748facabfc543d50a1bb8c1504da31a 100644 --- a/src/srun/launch.c +++ b/src/srun/launch.c @@ -283,7 +283,7 @@ static int _check_pending_threads(thd_t *thd, int count) for (i = 0; i < count; i++) { thd_t *tp = &thd[i]; - if ((tp->state == DSH_ACTIVE) && ((now - tp->tstart) >= 2) ) { + if ((tp->state == DSH_ACTIVE) && ((now - tp->tstart) >= 10) ) { debug2("sending SIGALRM to thread %lu", (unsigned long) tp->thread); /*