diff --git a/src/mca/lam/registry/base/.cvsignore b/src/mca/lam/registry/base/.cvsignore index 3dda72986f..b312ec8684 100644 --- a/src/mca/lam/registry/base/.cvsignore +++ b/src/mca/lam/registry/base/.cvsignore @@ -1,2 +1,3 @@ Makefile.in Makefile +static-modules.h diff --git a/src/mca/lam/registry/cofs/.cvsignore b/src/mca/lam/registry/cofs/.cvsignore new file mode 100644 index 0000000000..4f7712fb02 --- /dev/null +++ b/src/mca/lam/registry/cofs/.cvsignore @@ -0,0 +1,14 @@ +Makefile +Makefile.in +acinclude.m4 +aclocal.m4 +configure +configure.ac +config.log +config.status +libtool +autom4te.cache +.libs +.deps +*.la +.lam* diff --git a/src/mca/lam/registry/cofs/Makefile.am b/src/mca/lam/registry/cofs/Makefile.am new file mode 100644 index 0000000000..2e0f28c04d --- /dev/null +++ b/src/mca/lam/registry/cofs/Makefile.am @@ -0,0 +1,38 @@ +# -*- makefile -*- +# +# $HEADER$ +# + +# Use the top-level LAM Makefile.options + +include $(top_lam_srcdir)/config/Makefile.options + +SUBDIRS = src +DIST_SUBDIRS = config $(SUBDIRS) + +EXTRA_DIST = VERSION + +# According to the MCA spec, we have to make the output library here +# in the top-level directory, and it has to be named +# liblam_ssi_coll_lam_basic.la + +if LAM_BUILD_LOADABLE_MODULE +module_noinst = +module_install = mca_registry_cofs.la +else +module_noinst = libmca_lam_registry_cofs.la +module_install = +endif + +lamssiexecdir = $(libdir)/lam +lamssiexec_LTLIBRARIES = $(module_install) +mca_registry_cofs_la_SOURCES = +mca_registry_cofs_la_LIBADD = \ + src/libmca_registry_cofs.la \ + $(top_lam_builddir)/src/lam/liblam.la +mca_registry_cofs_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(module_noinst) +libmca_lam_registry_cofs_la_SOURCES = +libmca_lam_registry_cofs_la_LIBADD = src/libmca_registry_cofs.la +libmca_lam_registry_cofs_la_LDFLAGS = -module -avoid-version diff --git a/src/mca/lam/registry/cofs/VERSION b/src/mca/lam/registry/cofs/VERSION new file mode 100644 index 0000000000..54f912ce99 --- /dev/null +++ b/src/mca/lam/registry/cofs/VERSION @@ -0,0 +1,6 @@ +major=1 +minor=0 +release=0 +alpha=0 +beta=0 +cvs=1 diff --git a/src/mca/lam/registry/cofs/config/.cvsignore b/src/mca/lam/registry/cofs/config/.cvsignore new file mode 100644 index 0000000000..9503f6b47c --- /dev/null +++ b/src/mca/lam/registry/cofs/config/.cvsignore @@ -0,0 +1,9 @@ +config.guess +config.sub +depcomp +install-sh +ltmain.sh +Makefile +Makefile.in +missing +mkinstalldirs diff --git a/src/mca/lam/registry/cofs/config/Makefile.am b/src/mca/lam/registry/cofs/config/Makefile.am new file mode 100644 index 0000000000..270f85be02 --- /dev/null +++ b/src/mca/lam/registry/cofs/config/Makefile.am @@ -0,0 +1,15 @@ +# -*- makefile -*- +# +# $HEADER$ +# + +include $(top_lam_srcdir)/config/Makefile.options + +# This file is only here so that "make dist" grabs all the extra +# config-level files that are necessary to build a LAM distribution +# tarball. Nothing gets built in this directory. + +# Seems to be an automake bug -- depcomp is not automatically included +# in distribution tarballs. + +EXTRA_DIST = depcomp diff --git a/src/mca/lam/registry/cofs/configure.params b/src/mca/lam/registry/cofs/configure.params new file mode 100644 index 0000000000..38519bc9ae --- /dev/null +++ b/src/mca/lam/registry/cofs/configure.params @@ -0,0 +1,9 @@ +# -*- shell-script -*- +# +# $HEADER$ +# + +# Specific to this module + +PARAM_INIT_FILE=src/registry_cofs.c +PARAM_CONFIG_FILES="Makefile config/Makefile src/Makefile" diff --git a/src/mca/lam/registry/cofs/src/.cvsignore b/src/mca/lam/registry/cofs/src/.cvsignore new file mode 100644 index 0000000000..06f74e4979 --- /dev/null +++ b/src/mca/lam/registry/cofs/src/.cvsignore @@ -0,0 +1,9 @@ +.deps +.libs +Makefile +Makefile.in +*.lo +libmca_registry_cofs.la +registry_cofs_config.h +registry_cofs_config.h.in +stamp-h1 diff --git a/src/mca/lam/registry/cofs/src/Makefile.am b/src/mca/lam/registry/cofs/src/Makefile.am new file mode 100644 index 0000000000..88364b228e --- /dev/null +++ b/src/mca/lam/registry/cofs/src/Makefile.am @@ -0,0 +1,17 @@ +# +# $HEADER$ +# + +include $(top_lam_srcdir)/config/Makefile.options + +AM_CPPFLAGS = \ + -I$(top_lam_builddir)/src/include \ + -I$(top_lam_srcdir)/src \ + -I$(top_lam_srcdir)/src/include + +noinst_LTLIBRARIES = libmca_registry_cofs.la +libmca_registry_cofs_la_SOURCES = \ + registry_cofs.h \ + registry_cofs_module.c \ + registry_cofs.c + diff --git a/src/mca/lam/registry/cofs/src/registry_cofs.c b/src/mca/lam/registry/cofs/src/registry_cofs.c new file mode 100644 index 0000000000..df7e01ed3f --- /dev/null +++ b/src/mca/lam/registry/cofs/src/registry_cofs.c @@ -0,0 +1,38 @@ +/* -*- C -*- + * + * $HEADER$ + * + */ + +#include "lam_config.h" + +#include "mca/lam/registry/registry.h" +#include "mca/lam/registry/cofs/src/registry_cofs.h" +#include "lam/util/malloc.h" +#include "lam/types.h" + +#include +#include +#include +#include +#include + +int +mca_registry_cofs_publish(char* key, void* data, size_t data_len) +{ + return LAM_ERR_NOT_IMPLEMENTED; +} + + +int +mca_registry_cofs_lookup(char* key, void** data, size_t* data_len) +{ + return LAM_ERR_NOT_IMPLEMENTED; +} + + +int +mca_registry_cofs_unpublish(char* key) +{ + return LAM_ERR_NOT_IMPLEMENTED; +} diff --git a/src/mca/lam/registry/cofs/src/registry_cofs.h b/src/mca/lam/registry/cofs/src/registry_cofs.h new file mode 100644 index 0000000000..eb34b47fc7 --- /dev/null +++ b/src/mca/lam/registry/cofs/src/registry_cofs.h @@ -0,0 +1,34 @@ +/* -*- C -*- + * + * $HEADER$ + * + */ +#include "lam_config.h" + +#include "mca/lam/registry/registry.h" +#include "lam/types.h" + +/* + * Module open / close + */ +int mca_registry_cofs_open(lam_cmd_line_t *cmd); +int mca_registry_cofs_close(void); + + +/* + * Startup / Shutdown + */ +int mca_registry_cofs_query(int *priority); +struct mca_registry_1_0_0_t* mca_registry_cofs_init(void); +int mca_registry_cofs_finalize(void); + + +/* + * "Action" functions + */ +int mca_registry_cofs_publish(char* key, void* data, size_t data_len); +int mca_registry_cofs_lookup(char* key, void** data, size_t* data_len); +int mca_registry_cofs_unpublish(char* key); + +extern char mca_registry_cofs_comm_loc[LAM_PATH_MAX]; /* location for file drop-off */ +extern int mca_registry_cofs_my_vpid; diff --git a/src/mca/lam/registry/cofs/src/registry_cofs_module.c b/src/mca/lam/registry/cofs/src/registry_cofs_module.c new file mode 100644 index 0000000000..87525ff7fc --- /dev/null +++ b/src/mca/lam/registry/cofs/src/registry_cofs_module.c @@ -0,0 +1,130 @@ +/* -*- C -*- + * + * $HEADER$ + * + */ + +#include "lam_config.h" + +#include "lam/constants.h" +#include "mca/mca.h" +#include "mca/lam/registry/registry.h" +#include "mca/lam/registry/cofs/src/registry_cofs.h" +#include "lam/types.h" + +#include +#include +#include +#include + +/* + * Struct of function pointers and all that to let us be initialized + */ +mca_registry_base_module_1_0_0_t mca_registry_cofs_module = { + { + MCA_REGISTRY_BASE_VERSION_1_0_0, + + "cofs", /* MCA module name */ + 1, /* MCA module major version */ + 0, /* MCA module minor version */ + 0, /* MCA module release version */ + mca_registry_cofs_open, /* module open */ + mca_registry_cofs_close /* module close */ + }, + { + false /* checkpoint / restart */ + }, + mca_registry_cofs_query, /* module query */ + mca_registry_cofs_init, /* module init */ + mca_registry_cofs_finalize +}; + +struct mca_registry_1_0_0_t mca_registry_cofs_1_0_0 = { + mca_registry_cofs_publish, + mca_registry_cofs_lookup, + mca_registry_cofs_unpublish +}; + +char mca_registry_cofs_comm_loc[LAM_PATH_MAX]; +int mca_registry_cofs_my_vpid; + +int +mca_registry_cofs_open(lam_cmd_line_t *cmd) +{ + return LAM_SUCCESS; +} + + +int +mca_registry_cofs_close(void) +{ + return LAM_SUCCESS; +} + + +int +mca_registry_cofs_query(int *priority) +{ + *priority = 0; + return LAM_SUCCESS; +} + + +struct mca_registry_1_0_0_t* +mca_registry_cofs_init(void) +{ + char *tmp; + FILE *fp; + + /* + * BWB - fix me, make register the "right" way... + */ + tmp = getenv("MCA_common_lam_cofs_comm_dir"); + if (tmp == NULL) { + /* make it $HOME */ + tmp = getenv("HOME"); + if (tmp == NULL) { + printf("registry_cofs can not find communication dir\n"); + return NULL; + } + snprintf(mca_registry_cofs_comm_loc, LAM_PATH_MAX, "%s/cofs", tmp); + } else { + snprintf(mca_registry_cofs_comm_loc, LAM_PATH_MAX, "%s", tmp); + } + + /* + * See if we can write in our directory... + */ + tmp = malloc(strlen(mca_registry_cofs_comm_loc) + 5); + if (tmp == NULL) return NULL; + sprintf(tmp, "%s/me", mca_registry_cofs_comm_loc); + fp = fopen(tmp, "w"); + if (fp == NULL) { + printf("registry_cofs can not write in communication dir\n"); + free(tmp); + return NULL; + } + fclose(fp); + unlink(tmp); + free(tmp); + + /* + * BWB - fix me, make register the "right" way... + */ + /* find our vpid */ + tmp = getenv("MCA_REGISTRY_BASE_VPID"); + if (tmp == NULL) { + printf("registry_cofs can not find vpid\n"); + return NULL; + } + mca_registry_cofs_my_vpid = atoi(tmp); + + return &mca_registry_cofs_1_0_0; +} + + +int +mca_registry_cofs_finalize(void) +{ + return LAM_SUCCESS; +} diff --git a/src/mca/lam/registry/registry.h b/src/mca/lam/registry/registry.h index b198b06de5..f4fadf97d9 100644 --- a/src/mca/lam/registry/registry.h +++ b/src/mca/lam/registry/registry.h @@ -35,8 +35,8 @@ /* * Functions every module instance will have to provide */ -typedef int (*mca_registry_query_fn_t)(int *priority); -typedef struct mca_registry_1_0_0* (*mca_registry_init_fn_t)(void); +typedef int (*mca_registry_base_query_fn_t)(int *priority); +typedef struct mca_registry_1_0_0_t* (*mca_registry_base_init_fn_t)(void); /** * Publish a key=value piece of information @@ -56,7 +56,7 @@ typedef struct mca_registry_1_0_0* (*mca_registry_init_fn_t)(void); * \warning May block if the registry entry for key is currently * locked by another process. */ -typedef int (*mca_registry_publish_fn_t)(char* key, void* data, size_t data_len); +typedef int (*mca_registry_base_publish_fn_t)(char* key, void* data, size_t data_len); /** * Get the value for given key @@ -81,31 +81,43 @@ typedef int (*mca_registry_publish_fn_t)(char* key, void* data, size_t data_len) * \warning May block if the registry entry for key is currently * locked by another process. */ -typedef int (*mca_registry_lookup_fn_t)(char* key, void** data, size_t* data_len); +typedef int (*mca_registry_base_lookup_fn_t)(char* key, void** data, size_t* data_len); -typedef int (*mca_registry_finalize_fn_t)(void); +typedef int (*mca_registry_base_unpublish_fn_t)(char* key); + +typedef int (*mca_registry_base_finalize_fn_t)(void); /* * Ver 1.0.0 */ -typedef struct mca_registry_module_1_0_0 { - mca_module_1_0_0_t super; +struct mca_registry_base_module_1_0_0_t { + mca_base_module_t registrym_version; + mca_base_module_data_1_0_0_t registrym_data; - mca_registry_query_fn_t registry_m_query; - mca_registry_init_fn_t registry_m_init; + mca_registry_base_query_fn_t registrym_query; + mca_registry_base_init_fn_t registrym_init; + mca_registry_base_finalize_fn_t registrym_finalize; +}; +typedef struct mca_registry_base_module_1_0_0_t mca_registry_base_module_1_0_0_t; - mca_registry_finalize_fn_t registry_m_finalize; -} mca_registry_module_1_0_0_t; +struct mca_registry_1_0_0_t { + mca_registry_base_publish_fn_t registry_publish; + mca_registry_base_lookup_fn_t registry_lookup; + mca_registry_base_unpublish_fn_t registry_unpublish; +}; +typedef struct mca_registry_1_0_0_t mca_registry_1_0_0_t; -typedef struct mca_registry_1_0_0 { - mca_1_0_0_t super; +/* + * Macro for use in modules that are of type registry v1.0.0 + */ +#define MCA_REGISTRY_BASE_VERSION_1_0_0 \ + /* registry v1.0 is chained to MCA v1.0 */ \ + MCA_BASE_VERSION_1_0_0, \ + /* registry v1.0 */ \ + "registry", 1, 0, 0 - mca_registry_publish_fn_t registry_publish; - mca_registry_lookup_fn_t registry_lookup; -} mca_registry_module_1_0_0_t; - -typedef mca_registry_module_1_0_0_t mca_registry_module_t; +typedef mca_registry_base_module_1_0_0_t mca_registry_base_module_t; typedef mca_registry_1_0_0_t mca_registry_t; @@ -118,7 +130,7 @@ extern "C" { int mca_registry_base_open(lam_cmd_line_t *cmd); int mca_registry_base_close(void); - bool mca_registry_base_is_checkpointable(void) + bool mca_registry_base_is_checkpointable(void); int mca_registry_base_checkpoint(void); int mca_registry_base_continue(void);