Rename the orte state framework to be "db", which more accurately reflects its overall capabilities since it can store any kind of data (not just state, although that will be its primary purpose). Update tools and tests accordingly. Add a daemon module for storing data on the daemons - requires --enable-multicast, so it won't build unless that is set
This commit was SVN r23082.
Этот коммит содержится в:
родитель
d3fda5d3b9
Коммит
9dfb5c7c62
@ -84,8 +84,8 @@
|
|||||||
#include "orte/mca/errmgr/base/base.h"
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
#include "orte/mca/grpcomm/grpcomm.h"
|
#include "orte/mca/grpcomm/grpcomm.h"
|
||||||
#include "orte/mca/grpcomm/base/base.h"
|
#include "orte/mca/grpcomm/base/base.h"
|
||||||
#include "orte/mca/state/state.h"
|
#include "orte/mca/db/db.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#include "orte/mca/ess/ess.h"
|
#include "orte/mca/ess/ess.h"
|
||||||
#include "orte/mca/ess/base/base.h"
|
#include "orte/mca/ess/base/base.h"
|
||||||
#include "orte/mca/notifier/notifier.h"
|
#include "orte/mca/notifier/notifier.h"
|
||||||
@ -362,12 +362,12 @@ void ompi_info_open_components(void)
|
|||||||
map->components = &orte_grpcomm_base.components_available;
|
map->components = &orte_grpcomm_base.components_available;
|
||||||
opal_pointer_array_add(&component_map, map);
|
opal_pointer_array_add(&component_map, map);
|
||||||
|
|
||||||
if (ORTE_SUCCESS != orte_state_base_open()) {
|
if (ORTE_SUCCESS != orte_db_base_open()) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
map = OBJ_NEW(ompi_info_component_map_t);
|
map = OBJ_NEW(ompi_info_component_map_t);
|
||||||
map->type = strdup("state");
|
map->type = strdup("db");
|
||||||
map->components = &orte_state_base_components_available;
|
map->components = &orte_db_base_components_available;
|
||||||
opal_pointer_array_add(&component_map, map);
|
opal_pointer_array_add(&component_map, map);
|
||||||
|
|
||||||
if (ORTE_SUCCESS != orte_ess_base_open()) {
|
if (ORTE_SUCCESS != orte_ess_base_open()) {
|
||||||
@ -673,7 +673,7 @@ void ompi_info_close_components()
|
|||||||
(void) mca_allocator_base_close();
|
(void) mca_allocator_base_close();
|
||||||
(void) ompi_osc_base_close();
|
(void) ompi_osc_base_close();
|
||||||
(void) orte_grpcomm_base_close();
|
(void) orte_grpcomm_base_close();
|
||||||
(void) orte_state_base_close();
|
(void) orte_db_base_close();
|
||||||
(void) orte_notifier_base_close();
|
(void) orte_notifier_base_close();
|
||||||
(void) orte_ess_base_close();
|
(void) orte_ess_base_close();
|
||||||
(void) orte_show_help_finalize();
|
(void) orte_show_help_finalize();
|
||||||
|
@ -239,7 +239,7 @@ int main(int argc, char *argv[])
|
|||||||
opal_pointer_array_add(&mca_types, "errmgr");
|
opal_pointer_array_add(&mca_types, "errmgr");
|
||||||
opal_pointer_array_add(&mca_types, "ess");
|
opal_pointer_array_add(&mca_types, "ess");
|
||||||
opal_pointer_array_add(&mca_types, "grpcomm");
|
opal_pointer_array_add(&mca_types, "grpcomm");
|
||||||
opal_pointer_array_add(&mca_types, "state");
|
opal_pointer_array_add(&mca_types, "db");
|
||||||
opal_pointer_array_add(&mca_types, "notifier");
|
opal_pointer_array_add(&mca_types, "notifier");
|
||||||
|
|
||||||
/* Execute the desired action(s) */
|
/* Execute the desired action(s) */
|
||||||
|
@ -10,21 +10,21 @@
|
|||||||
AM_CPPFLAGS = $(LTDLINCL)
|
AM_CPPFLAGS = $(LTDLINCL)
|
||||||
|
|
||||||
# main library setup
|
# main library setup
|
||||||
noinst_LTLIBRARIES = libmca_state.la
|
noinst_LTLIBRARIES = libmca_db.la
|
||||||
libmca_state_la_SOURCES =
|
libmca_db_la_SOURCES =
|
||||||
|
|
||||||
# header setup
|
# header setup
|
||||||
nobase_orte_HEADERS =
|
nobase_orte_HEADERS =
|
||||||
dist_pkgdata_DATA =
|
dist_pkgdata_DATA =
|
||||||
|
|
||||||
# local files
|
# local files
|
||||||
headers = state.h
|
headers = db.h
|
||||||
libmca_state_la_SOURCES += $(headers)
|
libmca_db_la_SOURCES += $(headers)
|
||||||
|
|
||||||
# Conditionally install the header files
|
# Conditionally install the header files
|
||||||
if WANT_INSTALL_HEADERS
|
if WANT_INSTALL_HEADERS
|
||||||
nobase_orte_HEADERS += $(headers)
|
nobase_orte_HEADERS += $(headers)
|
||||||
ortedir = $(includedir)/openmpi/orte/mca/state
|
ortedir = $(includedir)/openmpi/orte/mca/db
|
||||||
else
|
else
|
||||||
ortedir = $(includedir)
|
ortedir = $(includedir)
|
||||||
endif
|
endif
|
@ -7,10 +7,12 @@
|
|||||||
# $HEADER$
|
# $HEADER$
|
||||||
#
|
#
|
||||||
|
|
||||||
|
dist_pkgdata_DATA += base/help-db-base.txt
|
||||||
|
|
||||||
headers += \
|
headers += \
|
||||||
base/base.h
|
base/base.h
|
||||||
|
|
||||||
libmca_state_la_SOURCES += \
|
libmca_db_la_SOURCES += \
|
||||||
base/state_base_open.c \
|
base/db_base_open.c \
|
||||||
base/state_base_close.c \
|
base/db_base_close.c \
|
||||||
base/state_base_select.c
|
base/db_base_select.c
|
54
orte/mca/db/base/base.h
Обычный файл
54
orte/mca/db/base/base.h
Обычный файл
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
/** @file:
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MCA_DB_BASE_H
|
||||||
|
#define MCA_DB_BASE_H
|
||||||
|
|
||||||
|
#include "orte_config.h"
|
||||||
|
#include "orte/types.h"
|
||||||
|
|
||||||
|
#include "opal/mca/mca.h"
|
||||||
|
#include "opal/class/opal_list.h"
|
||||||
|
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
|
||||||
|
BEGIN_C_DECLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Global functions for MCA overall collective open and close
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the db framework
|
||||||
|
*/
|
||||||
|
ORTE_DECLSPEC int orte_db_base_open(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a db module
|
||||||
|
*/
|
||||||
|
ORTE_DECLSPEC int orte_db_base_select(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the db framework
|
||||||
|
*/
|
||||||
|
ORTE_DECLSPEC int orte_db_base_close(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The verbose channel for debug output
|
||||||
|
*/
|
||||||
|
ORTE_DECLSPEC extern int orte_db_base_output;
|
||||||
|
|
||||||
|
ORTE_DECLSPEC extern opal_list_t orte_db_base_components_available;
|
||||||
|
|
||||||
|
|
||||||
|
END_C_DECLS
|
||||||
|
|
||||||
|
#endif
|
@ -17,34 +17,34 @@
|
|||||||
#include "opal/mca/base/base.h"
|
#include "opal/mca/base/base.h"
|
||||||
#include "opal/mca/base/mca_base_component_repository.h"
|
#include "opal/mca/base/mca_base_component_repository.h"
|
||||||
|
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
|
|
||||||
extern opal_list_t orte_state_base_components_available;
|
extern opal_list_t orte_db_base_components_available;
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_base_close(void)
|
orte_db_base_close(void)
|
||||||
{
|
{
|
||||||
opal_list_item_t *item;
|
opal_list_item_t *item;
|
||||||
mca_base_component_list_item_t *cli;
|
mca_base_component_list_item_t *cli;
|
||||||
|
|
||||||
if (NULL != orte_state.finalize) {
|
if (NULL != orte_db.finalize) {
|
||||||
orte_state.finalize();
|
orte_db.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unload all remaining components */
|
/* unload all remaining components */
|
||||||
while (NULL != (item = opal_list_remove_first(&orte_state_base_components_available))) {
|
while (NULL != (item = opal_list_remove_first(&orte_db_base_components_available))) {
|
||||||
orte_state_base_component_t* component;
|
orte_db_base_component_t* component;
|
||||||
cli = (mca_base_component_list_item_t *) item;
|
cli = (mca_base_component_list_item_t *) item;
|
||||||
component = (orte_state_base_component_t*) cli->cli_component;
|
component = (orte_db_base_component_t*) cli->cli_component;
|
||||||
opal_output_verbose(10, 0,
|
opal_output_verbose(10, 0,
|
||||||
"orte_state_base_close: module %s unloaded",
|
"orte_db_base_close: module %s unloaded",
|
||||||
component->base_version.mca_component_name);
|
component->base_version.mca_component_name);
|
||||||
mca_base_component_repository_release((mca_base_component_t *) component);
|
mca_base_component_repository_release((mca_base_component_t *) component);
|
||||||
OBJ_RELEASE(item);
|
OBJ_RELEASE(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
OBJ_DESTRUCT(&orte_state_base_components_available);
|
OBJ_DESTRUCT(&orte_db_base_components_available);
|
||||||
opal_output_close(orte_state_base_output);
|
opal_output_close(orte_db_base_output);
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
97
orte/mca/db/base/db_base_open.c
Обычный файл
97
orte/mca/db/base/db_base_open.c
Обычный файл
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "orte_config.h"
|
||||||
|
#include "orte/constants.h"
|
||||||
|
|
||||||
|
#include "opal/mca/mca.h"
|
||||||
|
#include "opal/util/output.h"
|
||||||
|
#include "opal/mca/base/base.h"
|
||||||
|
#include "opal/dss/dss_types.h"
|
||||||
|
|
||||||
|
#include "orte/mca/db/base/base.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following file was created by configure. It contains extern
|
||||||
|
* dbments and the definition of an array of pointers to each
|
||||||
|
* module's public mca_base_module_t struct.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "orte/mca/db/base/static-components.h"
|
||||||
|
|
||||||
|
opal_list_t orte_db_base_components_available;
|
||||||
|
|
||||||
|
/* provide "NULL" functions */
|
||||||
|
static int init(void);
|
||||||
|
static int finalize(void);
|
||||||
|
static int store(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int set_source(orte_process_name_t *name);
|
||||||
|
static int fetch(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int remove_data(char *key);
|
||||||
|
|
||||||
|
orte_db_base_module_t orte_db = {
|
||||||
|
init,
|
||||||
|
finalize,
|
||||||
|
store,
|
||||||
|
set_source,
|
||||||
|
fetch,
|
||||||
|
update,
|
||||||
|
remove_data
|
||||||
|
};
|
||||||
|
int orte_db_base_output;
|
||||||
|
|
||||||
|
int
|
||||||
|
orte_db_base_open(void)
|
||||||
|
{
|
||||||
|
orte_db_base_output = opal_output_open(NULL);
|
||||||
|
|
||||||
|
OBJ_CONSTRUCT(&orte_db_base_components_available, opal_list_t);
|
||||||
|
|
||||||
|
/* Open up all available components */
|
||||||
|
if (ORTE_SUCCESS !=
|
||||||
|
mca_base_components_open("db", orte_db_base_output, mca_db_base_static_components,
|
||||||
|
&orte_db_base_components_available,
|
||||||
|
true)) {
|
||||||
|
return ORTE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init(void)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int finalize(void)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int store(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int set_source(orte_process_name_t *name)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int fetch(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
static int remove_data(char *key)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
@ -15,21 +15,21 @@
|
|||||||
#include "opal/mca/base/base.h"
|
#include "opal/mca/base/base.h"
|
||||||
#include "opal/mca/base/mca_base_component_repository.h"
|
#include "opal/mca/base/mca_base_component_repository.h"
|
||||||
|
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
|
|
||||||
extern opal_list_t orte_state_base_components_available;
|
extern opal_list_t orte_db_base_components_available;
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_base_select(void)
|
orte_db_base_select(void)
|
||||||
{
|
{
|
||||||
orte_state_base_component_t *best_component = NULL;
|
orte_db_base_component_t *best_component = NULL;
|
||||||
orte_state_base_module_t *best_module = NULL;
|
orte_db_base_module_t *best_module = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select the best component
|
* Select the best component
|
||||||
*/
|
*/
|
||||||
if( OPAL_SUCCESS != mca_base_select("state", orte_state_base_output,
|
if( OPAL_SUCCESS != mca_base_select("db", orte_db_base_output,
|
||||||
&orte_state_base_components_available,
|
&orte_db_base_components_available,
|
||||||
(mca_base_module_t **) &best_module,
|
(mca_base_module_t **) &best_module,
|
||||||
(mca_base_component_t **) &best_component) ) {
|
(mca_base_component_t **) &best_component) ) {
|
||||||
/* It is okay to not select a component - default
|
/* It is okay to not select a component - default
|
||||||
@ -39,9 +39,9 @@ orte_state_base_select(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Save and init the winner */
|
/* Save and init the winner */
|
||||||
orte_state = *best_module;
|
orte_db = *best_module;
|
||||||
if (NULL != orte_state.init) {
|
if (NULL != orte_db.init) {
|
||||||
orte_state.init();
|
orte_db.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
19
orte/mca/db/base/help-db-base.txt
Обычный файл
19
orte/mca/db/base/help-db-base.txt
Обычный файл
@ -0,0 +1,19 @@
|
|||||||
|
-*- text -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
# This is the US/English general help file for ORTE Errmgr HNP module.
|
||||||
|
#
|
||||||
|
[errmgr-hnp:unknown-job-error]
|
||||||
|
An error has occurred in an unknown job. This generally should not happen
|
||||||
|
except due to an internal ORTE error.
|
||||||
|
|
||||||
|
Job state: %s
|
||||||
|
|
||||||
|
This information should probably be reported to the OMPI developers.
|
38
orte/mca/db/daemon/Makefile.am
Обычный файл
38
orte/mca/db/daemon/Makefile.am
Обычный файл
@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
|
||||||
|
sources = \
|
||||||
|
db_daemon.h \
|
||||||
|
db_daemon_component.c \
|
||||||
|
db_daemon.c
|
||||||
|
|
||||||
|
# Make the output library in this directory, and name it either
|
||||||
|
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||||
|
# (for static builds).
|
||||||
|
|
||||||
|
if OMPI_BUILD_db_daemon_DSO
|
||||||
|
component_noinst =
|
||||||
|
component_install = mca_db_daemon.la
|
||||||
|
else
|
||||||
|
component_noinst = libmca_db_daemon.la
|
||||||
|
component_install =
|
||||||
|
endif
|
||||||
|
|
||||||
|
mcacomponentdir = $(pkglibdir)
|
||||||
|
mcacomponent_LTLIBRARIES = $(component_install)
|
||||||
|
mca_db_daemon_la_CPPFLAGS = $(db_daemon_CPPFLAGS)
|
||||||
|
mca_db_daemon_la_SOURCES = $(sources)
|
||||||
|
mca_db_daemon_la_LDFLAGS = -module -avoid-version $(db_daemon_LDFLAGS)
|
||||||
|
mca_db_daemon_la_LIBADD = $(db_daemon_LIBS)
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = $(component_noinst)
|
||||||
|
libmca_db_daemon_la_CPPFLAGS = $(db_daemon_CPPFLAGS)
|
||||||
|
libmca_db_daemon_la_SOURCES =$(sources)
|
||||||
|
libmca_db_daemon_la_LDFLAGS = -module -avoid-version $(db_daemon_LDFLAGS)
|
||||||
|
libmca_db_daemon_la_LIBADD = $(db_daemon_LIBS)
|
17
orte/mca/db/daemon/configure.m4
Обычный файл
17
orte/mca/db/daemon/configure.m4
Обычный файл
@ -0,0 +1,17 @@
|
|||||||
|
# -*- shell-script -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
|
||||||
|
# MCA_db_daemon_CONFIG([action-if-found], [action-if-not-found])
|
||||||
|
# -----------------------------------------------------------
|
||||||
|
AC_DEFUN([MCA_db_daemon_CONFIG], [
|
||||||
|
# cant run this component without multicast
|
||||||
|
AS_IF([test "$orte_want_multicast" = "1"],
|
||||||
|
[$1], [$2])
|
||||||
|
])dnl
|
464
orte/mca/db/daemon/db_daemon.c
Обычный файл
464
orte/mca/db/daemon/db_daemon.c
Обычный файл
@ -0,0 +1,464 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "orte_config.h"
|
||||||
|
#include "orte/constants.h"
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "opal/class/opal_pointer_array.h"
|
||||||
|
#include "opal/dss/dss_types.h"
|
||||||
|
#include "opal/util/output.h"
|
||||||
|
|
||||||
|
#include "orte/util/show_help.h"
|
||||||
|
#include "orte/util/name_fns.h"
|
||||||
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
|
#include "orte/mca/rmcast/rmcast.h"
|
||||||
|
#include "orte/runtime/orte_globals.h"
|
||||||
|
#include "orte/runtime/orte_wait.h"
|
||||||
|
|
||||||
|
#include "orte/mca/db/base/base.h"
|
||||||
|
#include "db_daemon.h"
|
||||||
|
|
||||||
|
static int init(void);
|
||||||
|
static int finalize(void);
|
||||||
|
static int store(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int set_source(orte_process_name_t *name);
|
||||||
|
static int fetch(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int remove_data(char *key);
|
||||||
|
|
||||||
|
orte_db_base_module_t orte_db_daemon_module = {
|
||||||
|
init,
|
||||||
|
finalize,
|
||||||
|
store,
|
||||||
|
set_source,
|
||||||
|
fetch,
|
||||||
|
update,
|
||||||
|
remove_data
|
||||||
|
};
|
||||||
|
|
||||||
|
/* local types */
|
||||||
|
typedef struct {
|
||||||
|
opal_object_t super;
|
||||||
|
char *key;
|
||||||
|
char *dptr;
|
||||||
|
int size;
|
||||||
|
} orte_db_data_t;
|
||||||
|
static void constructor(orte_db_data_t *dt)
|
||||||
|
{
|
||||||
|
dt->key = NULL;
|
||||||
|
dt->dptr = NULL;
|
||||||
|
dt->size = 0;
|
||||||
|
}
|
||||||
|
static void destructor(orte_db_data_t *dt)
|
||||||
|
{
|
||||||
|
if (NULL != dt->key) {
|
||||||
|
free(dt->key);
|
||||||
|
}
|
||||||
|
if (NULL != dt->dptr) {
|
||||||
|
free(dt->dptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OBJ_CLASS_INSTANCE(orte_db_data_t,
|
||||||
|
opal_object_t,
|
||||||
|
constructor,
|
||||||
|
destructor);
|
||||||
|
|
||||||
|
/* local variables */
|
||||||
|
static orte_vpid_t num_recvd;
|
||||||
|
static bool ack_reqd;
|
||||||
|
static opal_pointer_array_t datastore;
|
||||||
|
|
||||||
|
/* local functions */
|
||||||
|
static void callback_fn(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata);
|
||||||
|
|
||||||
|
static void recv_cmd(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata);
|
||||||
|
|
||||||
|
static void recv_data(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata);
|
||||||
|
|
||||||
|
static void recv_ack(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata);
|
||||||
|
|
||||||
|
#include MCA_timer_IMPLEMENTATION_HEADER
|
||||||
|
static inline double gettime(void) __opal_attribute_always_inline__;
|
||||||
|
static inline double gettime(void)
|
||||||
|
{
|
||||||
|
double wtime;
|
||||||
|
#if OPAL_TIMER_USEC_NATIVE
|
||||||
|
wtime = ((double) opal_timer_base_get_usec()) / 1000000.0;
|
||||||
|
#else
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
wtime = tv.tv_sec;
|
||||||
|
wtime += (double)tv.tv_usec / 1000000.0;
|
||||||
|
#endif
|
||||||
|
return wtime;
|
||||||
|
}
|
||||||
|
#define TIMER_START(x) (x) = gettime();
|
||||||
|
#define TIMER_STOP(y,x) (y) = (gettime() - (x));
|
||||||
|
|
||||||
|
static int init(void)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (ORTE_PROC_IS_DAEMON || ORTE_PROC_IS_HNP) {
|
||||||
|
/* daemons recv data server cmds */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.recv_buffer_nb(ORTE_RMCAST_DATA_SERVER_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_DATA,
|
||||||
|
ORTE_RMCAST_PERSISTENT,
|
||||||
|
recv_cmd, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
OBJ_CONSTRUCT(&datastore, opal_pointer_array_t);
|
||||||
|
opal_pointer_array_init(&datastore, 16, INT_MAX, 16);
|
||||||
|
} else if (ORTE_PROC_IS_APP) {
|
||||||
|
/* recv data back */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.recv_buffer_nb(ORTE_RMCAST_GROUP_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_DATA,
|
||||||
|
ORTE_RMCAST_PERSISTENT,
|
||||||
|
recv_data, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* recv cmd acks */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.recv_buffer_nb(ORTE_RMCAST_GROUP_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_CMD_ACK,
|
||||||
|
ORTE_RMCAST_PERSISTENT,
|
||||||
|
recv_ack, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int finalize(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
orte_db_data_t *dat;
|
||||||
|
|
||||||
|
/* cancel the callbacks */
|
||||||
|
if (ORTE_PROC_IS_DAEMON || ORTE_PROC_IS_HNP) {
|
||||||
|
orte_rmcast.cancel_recv(ORTE_RMCAST_DATA_SERVER_CHANNEL, ORTE_RMCAST_TAG_DATA);
|
||||||
|
for (i=0; i < datastore.size; i++) {
|
||||||
|
if (NULL != (dat = (orte_db_data_t*)opal_pointer_array_get_item(&datastore, i))) {
|
||||||
|
OBJ_RELEASE(dat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OBJ_DESTRUCT(&datastore);
|
||||||
|
} else if (ORTE_PROC_IS_APP) {
|
||||||
|
orte_rmcast.cancel_recv(ORTE_RMCAST_GROUP_CHANNEL, ORTE_RMCAST_TAG_DATA);
|
||||||
|
orte_rmcast.cancel_recv(ORTE_RMCAST_GROUP_CHANNEL, ORTE_RMCAST_TAG_CMD_ACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int send_data(orte_db_cmd_t cmd, char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
opal_buffer_t *buf;
|
||||||
|
orte_job_t *jdata;
|
||||||
|
orte_proc_t *proc;
|
||||||
|
orte_job_state_t *job_state;
|
||||||
|
orte_proc_state_t *proc_state;
|
||||||
|
int rc;
|
||||||
|
bool got_response;
|
||||||
|
|
||||||
|
/* construct the buffer we will use for packing the data */
|
||||||
|
buf = OBJ_NEW(opal_buffer_t);
|
||||||
|
opal_dss.pack(buf, &cmd, 1, ORTE_DB_CMD_T); /* add cmd */
|
||||||
|
opal_dss.pack(buf, &key, 1, OPAL_STRING); /* pack the key */
|
||||||
|
|
||||||
|
/* pack the data */
|
||||||
|
switch (type) {
|
||||||
|
case ORTE_JOB:
|
||||||
|
jdata = (orte_job_t*)object;
|
||||||
|
opal_dss.pack(buf, &jdata, 1, ORTE_JOB);
|
||||||
|
break;
|
||||||
|
case ORTE_JOB_STATE:
|
||||||
|
job_state = (orte_job_state_t*)object;
|
||||||
|
opal_dss.pack(buf, job_state, 1, ORTE_JOB_STATE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ORTE_PROC:
|
||||||
|
proc = (orte_proc_t*)object;
|
||||||
|
opal_dss.pack(buf, &proc, 1, ORTE_PROC);
|
||||||
|
break;
|
||||||
|
case ORTE_PROC_STATE:
|
||||||
|
proc_state = (orte_proc_state_t*)object;
|
||||||
|
opal_dss.pack(buf, proc_state, 1, ORTE_PROC_STATE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
orte_show_help("help-db-base.txt", "unrecognized-type", true, type);
|
||||||
|
rc = ORTE_ERR_BAD_PARAM;
|
||||||
|
goto cleanup;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
got_response = false;
|
||||||
|
num_recvd = 0;
|
||||||
|
ack_reqd = true;
|
||||||
|
|
||||||
|
/* send the data to all the daemons */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.send_buffer_nb(ORTE_RMCAST_DATA_SERVER_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_DATA, buf,
|
||||||
|
callback_fn, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
/* wait for all daemons to ack the request */
|
||||||
|
ORTE_PROGRESSED_WAIT(got_response, num_recvd, orte_process_info.num_procs-1);
|
||||||
|
ack_reqd = false;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int store(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
double start;
|
||||||
|
double cpu_time_used;
|
||||||
|
|
||||||
|
TIMER_START(start);
|
||||||
|
|
||||||
|
if (ORTE_SUCCESS != (rc = send_data(ORTE_DB_STORE_CMD, key, object, type))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
TIMER_STOP(cpu_time_used, start);
|
||||||
|
opal_output(0, "%s TOOK %g usecs TO STORE",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
cpu_time_used * 1000000.0);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_source(orte_process_name_t *name)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int fetch(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
opal_buffer_t *buf;
|
||||||
|
int rc;
|
||||||
|
bool got_response;
|
||||||
|
double cpu_time_used, start;
|
||||||
|
orte_db_cmd_t cmd=ORTE_DB_FETCH_CMD;
|
||||||
|
|
||||||
|
TIMER_START(start);
|
||||||
|
|
||||||
|
/* construct the buffer we will use for packing the data */
|
||||||
|
buf = OBJ_NEW(opal_buffer_t);
|
||||||
|
opal_dss.pack(buf, &cmd, 1, ORTE_DB_CMD_T); /* add cmd */
|
||||||
|
opal_dss.pack(buf, &key, 1, OPAL_STRING); /* pack the key */
|
||||||
|
|
||||||
|
got_response = false;
|
||||||
|
num_recvd = 0;
|
||||||
|
ack_reqd = true;
|
||||||
|
|
||||||
|
/* send the cmd to all the daemons */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.send_buffer_nb(ORTE_RMCAST_DATA_SERVER_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_DATA, buf,
|
||||||
|
callback_fn, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wait for all daemons to respond */
|
||||||
|
ORTE_PROGRESSED_WAIT(got_response, num_recvd, orte_process_info.num_procs-1);
|
||||||
|
ack_reqd = false;
|
||||||
|
|
||||||
|
TIMER_STOP(cpu_time_used, start);
|
||||||
|
opal_output(0, "%s TOOK %g usecs TO FETCH",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
cpu_time_used * 1000000.0);
|
||||||
|
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
double start;
|
||||||
|
double cpu_time_used;
|
||||||
|
|
||||||
|
TIMER_START(start);
|
||||||
|
|
||||||
|
if (ORTE_SUCCESS != (rc = send_data(ORTE_DB_UPDATE_CMD, key, object, type))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
TIMER_STOP(cpu_time_used, start);
|
||||||
|
opal_output(0, "%s TOOK %g usecs TO UPDATE",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
cpu_time_used * 1000000.0);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int remove_data(char *key)
|
||||||
|
{
|
||||||
|
opal_buffer_t *buf;
|
||||||
|
int rc;
|
||||||
|
bool got_response;
|
||||||
|
double start;
|
||||||
|
double cpu_time_used;
|
||||||
|
orte_db_cmd_t cmd=ORTE_DB_REMOVE_CMD;
|
||||||
|
|
||||||
|
TIMER_START(start);
|
||||||
|
|
||||||
|
/* construct the buffer we will use for packing the data */
|
||||||
|
buf = OBJ_NEW(opal_buffer_t);
|
||||||
|
opal_dss.pack(buf, &cmd, 1, ORTE_DB_CMD_T); /* add cmd */
|
||||||
|
opal_dss.pack(buf, &key, 1, OPAL_STRING); /* pack the key */
|
||||||
|
|
||||||
|
got_response = false;
|
||||||
|
num_recvd = 0;
|
||||||
|
ack_reqd = true;
|
||||||
|
|
||||||
|
/* send the data to all the daemons */
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_rmcast.send_buffer_nb(ORTE_RMCAST_DATA_SERVER_CHANNEL,
|
||||||
|
ORTE_RMCAST_TAG_DATA, buf,
|
||||||
|
callback_fn, NULL))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
/* wait for all daemons to ack the request */
|
||||||
|
ORTE_PROGRESSED_WAIT(got_response, num_recvd, orte_process_info.num_procs-1);
|
||||||
|
ack_reqd = false;
|
||||||
|
|
||||||
|
TIMER_STOP(cpu_time_used, start);
|
||||||
|
opal_output(0, "%s TOOK %g usecs TO REMOVE",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
cpu_time_used * 1000000.0);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void callback_fn(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata)
|
||||||
|
{
|
||||||
|
OBJ_RELEASE(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void recv_ack(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata)
|
||||||
|
{
|
||||||
|
if (ack_reqd) {
|
||||||
|
num_recvd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void recv_cmd(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata)
|
||||||
|
{
|
||||||
|
orte_db_cmd_t cmd;
|
||||||
|
opal_buffer_t *ans, xfer;
|
||||||
|
int count, i;
|
||||||
|
int32_t rc;
|
||||||
|
char *key;
|
||||||
|
orte_db_data_t *dat;
|
||||||
|
|
||||||
|
OPAL_OUTPUT_VERBOSE((2, orte_db_base_output,
|
||||||
|
"%s db:daemon: cmd recvd from %s",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
ORTE_NAME_PRINT(sender)));
|
||||||
|
|
||||||
|
count=1;
|
||||||
|
opal_dss.unpack(buf, &cmd, &count, ORTE_DB_CMD_T);
|
||||||
|
count=1;
|
||||||
|
opal_dss.unpack(buf, &key, &count, OPAL_STRING);
|
||||||
|
|
||||||
|
ans = OBJ_NEW(opal_buffer_t);
|
||||||
|
opal_dss.pack(ans, &cmd, 1, ORTE_DB_CMD_T);
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
case ORTE_DB_STORE_CMD:
|
||||||
|
dat = OBJ_NEW(orte_db_data_t);
|
||||||
|
dat->key = key;
|
||||||
|
opal_dss.unload(buf, (void**)&dat->dptr, &dat->size);
|
||||||
|
opal_pointer_array_add(&datastore, dat);
|
||||||
|
OPAL_OUTPUT_VERBOSE((2, orte_db_base_output,
|
||||||
|
"%s db:daemon: data from %s stored: key %s",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
ORTE_NAME_PRINT(sender), key));
|
||||||
|
rc = ORTE_SUCCESS;
|
||||||
|
opal_dss.pack(ans, &rc, 1, OPAL_INT32);
|
||||||
|
break;
|
||||||
|
case ORTE_DB_FETCH_CMD:
|
||||||
|
/* find the key */
|
||||||
|
for (i=0; i < datastore.size; i++) {
|
||||||
|
if (NULL == (dat = (orte_db_data_t*)opal_pointer_array_get_item(&datastore, i))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (0 != strcmp(key, dat->key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* found the data - return it */
|
||||||
|
rc = ORTE_SUCCESS;
|
||||||
|
opal_dss.pack(ans, &rc, 1, OPAL_INT32);
|
||||||
|
OBJ_CONSTRUCT(&xfer, opal_buffer_t);
|
||||||
|
opal_dss.load(&xfer, dat->dptr, dat->size);
|
||||||
|
opal_dss.copy_payload(ans, &xfer);
|
||||||
|
OBJ_DESTRUCT(&xfer);
|
||||||
|
OPAL_OUTPUT_VERBOSE((2, orte_db_base_output,
|
||||||
|
"%s db:daemon: data fetched for %s: key %s",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
ORTE_NAME_PRINT(sender), key));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
|
opal_dss.pack(ans, &rc, 1, OPAL_INT32);
|
||||||
|
OPAL_OUTPUT_VERBOSE((2, orte_db_base_output,
|
||||||
|
"%s db:daemon: data fetch request from %s not found: key %s",
|
||||||
|
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
|
||||||
|
ORTE_NAME_PRINT(sender), key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
orte_rmcast.send_buffer(channel, ORTE_RMCAST_TAG_CMD_ACK, ans);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void recv_data(int status,
|
||||||
|
orte_rmcast_channel_t channel,
|
||||||
|
orte_rmcast_tag_t tag,
|
||||||
|
orte_process_name_t *sender,
|
||||||
|
opal_buffer_t *buf, void* cbdata)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
31
orte/mca/db/daemon/db_daemon.h
Обычный файл
31
orte/mca/db/daemon/db_daemon.h
Обычный файл
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ORTE_DB_DAEMON_H
|
||||||
|
#define ORTE_DB_DAEMON_H
|
||||||
|
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
|
||||||
|
BEGIN_C_DECLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Module open / close
|
||||||
|
*/
|
||||||
|
int orte_db_daemon_component_open(void);
|
||||||
|
int orte_db_daemon_component_close(void);
|
||||||
|
int orte_db_daemon_component_query(mca_base_module_t **module, int *priority);
|
||||||
|
|
||||||
|
|
||||||
|
ORTE_MODULE_DECLSPEC extern orte_db_base_component_t mca_db_daemon_component;
|
||||||
|
ORTE_DECLSPEC extern orte_db_base_module_t orte_db_daemon_module;
|
||||||
|
extern char *orte_db_daemon_directory;
|
||||||
|
|
||||||
|
END_C_DECLS
|
||||||
|
|
||||||
|
#endif /* ORTE_DB_DAEMON_H */
|
79
orte/mca/db/daemon/db_daemon_component.c
Обычный файл
79
orte/mca/db/daemon/db_daemon_component.c
Обычный файл
@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*
|
||||||
|
* These symbols are in a file by themselves to provide nice linker
|
||||||
|
* semantics. Since linkers generally pull in symbols by object
|
||||||
|
* files, keeping these symbols as the only symbols in this file
|
||||||
|
* prevents utility programs such as "ompi_info" from having to import
|
||||||
|
* entire components just to query their version and parameters.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "orte_config.h"
|
||||||
|
#include "orte/constants.h"
|
||||||
|
|
||||||
|
#include "opal/mca/base/base.h"
|
||||||
|
#include "opal/mca/base/mca_base_param.h"
|
||||||
|
|
||||||
|
#include "orte/util/proc_info.h"
|
||||||
|
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
#include "orte/mca/db/base/base.h"
|
||||||
|
#include "db_daemon.h"
|
||||||
|
|
||||||
|
extern orte_db_base_module_t orte_db_daemon_module;
|
||||||
|
char *orte_db_daemon_directory;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Instantiate the public struct with all of our public information
|
||||||
|
* and pointers to our public functions in it
|
||||||
|
*/
|
||||||
|
orte_db_base_component_t mca_db_daemon_component = {
|
||||||
|
{
|
||||||
|
ORTE_DB_BASE_VERSION_1_0_0,
|
||||||
|
|
||||||
|
/* Component name and version */
|
||||||
|
"daemon",
|
||||||
|
ORTE_MAJOR_VERSION,
|
||||||
|
ORTE_MINOR_VERSION,
|
||||||
|
ORTE_RELEASE_VERSION,
|
||||||
|
|
||||||
|
/* Component open and close functions */
|
||||||
|
orte_db_daemon_component_open,
|
||||||
|
orte_db_daemon_component_close,
|
||||||
|
orte_db_daemon_component_query
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* The component is checkpoint ready */
|
||||||
|
MCA_BASE_METADATA_PARAM_CHECKPOINT
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
orte_db_daemon_component_open(void)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int orte_db_daemon_component_query(mca_base_module_t **module, int *priority)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* if we built, then we are available */
|
||||||
|
*priority = 100;
|
||||||
|
*module = (mca_base_module_t*)&orte_db_daemon_module;
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
orte_db_daemon_component_close(void)
|
||||||
|
{
|
||||||
|
return ORTE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
110
orte/mca/db/db.h
Обычный файл
110
orte/mca/db/db.h
Обычный файл
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
/** @file:
|
||||||
|
*
|
||||||
|
* The OpenRTE State Save/Recovery Service
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ORTE_DB_H
|
||||||
|
#define ORTE_DB_H
|
||||||
|
|
||||||
|
#include "orte_config.h"
|
||||||
|
#include "orte/types.h"
|
||||||
|
|
||||||
|
#include "opal/mca/mca.h"
|
||||||
|
#include "opal/dss/dss_types.h"
|
||||||
|
|
||||||
|
BEGIN_C_DECLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* API functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef uint8_t orte_db_cmd_t;
|
||||||
|
#define ORTE_DB_CMD_T OPAL_UINT8
|
||||||
|
|
||||||
|
#define ORTE_DB_STORE_CMD 0x01
|
||||||
|
#define ORTE_DB_FETCH_CMD 0X02
|
||||||
|
#define ORTE_DB_UPDATE_CMD 0x03
|
||||||
|
#define ORTE_DB_REMOVE_CMD 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the module
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_init_fn_t)(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Finalize the module
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_finalize_fn_t)(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save the db of the provided object
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_store_fn_t)(char *key, void *object, opal_data_type_t type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the source for recovering db info
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_set_source_fn_t)(orte_process_name_t *name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Retrieve data
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_fetch_fn_t)(char *key, void *object, opal_data_type_t type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update data
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_update_fn_t)(char *key, void *object, opal_data_type_t type);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete data
|
||||||
|
*/
|
||||||
|
typedef int (*orte_db_base_module_remove_fn_t)(char *key);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the standard module data structure
|
||||||
|
*/
|
||||||
|
struct orte_db_base_module_1_0_0_t {
|
||||||
|
orte_db_base_module_init_fn_t init;
|
||||||
|
orte_db_base_module_finalize_fn_t finalize;
|
||||||
|
orte_db_base_module_store_fn_t store;
|
||||||
|
orte_db_base_module_set_source_fn_t set_source;
|
||||||
|
orte_db_base_module_fetch_fn_t fetch;
|
||||||
|
orte_db_base_module_update_fn_t update;
|
||||||
|
orte_db_base_module_remove_fn_t remove;
|
||||||
|
};
|
||||||
|
typedef struct orte_db_base_module_1_0_0_t orte_db_base_module_1_0_0_t;
|
||||||
|
typedef struct orte_db_base_module_1_0_0_t orte_db_base_module_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the standard component data structure
|
||||||
|
*/
|
||||||
|
struct orte_db_base_component_1_0_0_t {
|
||||||
|
mca_base_component_t base_version;
|
||||||
|
mca_base_component_data_t base_data;
|
||||||
|
};
|
||||||
|
typedef struct orte_db_base_component_1_0_0_t orte_db_base_component_1_0_0_t;
|
||||||
|
typedef struct orte_db_base_component_1_0_0_t orte_db_base_component_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro for use in components that are of type db
|
||||||
|
*/
|
||||||
|
#define ORTE_DB_BASE_VERSION_1_0_0 \
|
||||||
|
MCA_BASE_VERSION_2_0_0, \
|
||||||
|
"db", 1, 0, 0
|
||||||
|
|
||||||
|
/* Global structure for accessing DB functions */
|
||||||
|
ORTE_DECLSPEC extern orte_db_base_module_t orte_db; /* holds selected module's function pointers */
|
||||||
|
|
||||||
|
END_C_DECLS
|
||||||
|
|
||||||
|
#endif
|
38
orte/mca/db/dbase/Makefile.am
Обычный файл
38
orte/mca/db/dbase/Makefile.am
Обычный файл
@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
|
||||||
|
sources = \
|
||||||
|
db_dbase.h \
|
||||||
|
db_dbase_component.c \
|
||||||
|
db_dbase.c
|
||||||
|
|
||||||
|
# Make the output library in this directory, and name it either
|
||||||
|
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||||
|
# (for static builds).
|
||||||
|
|
||||||
|
if OMPI_BUILD_db_dbase_DSO
|
||||||
|
component_noinst =
|
||||||
|
component_install = mca_db_dbase.la
|
||||||
|
else
|
||||||
|
component_noinst = libmca_db_dbase.la
|
||||||
|
component_install =
|
||||||
|
endif
|
||||||
|
|
||||||
|
mcacomponentdir = $(pkglibdir)
|
||||||
|
mcacomponent_LTLIBRARIES = $(component_install)
|
||||||
|
mca_db_dbase_la_CPPFLAGS = $(db_dbase_CPPFLAGS)
|
||||||
|
mca_db_dbase_la_SOURCES = $(sources)
|
||||||
|
mca_db_dbase_la_LDFLAGS = -module -avoid-version $(db_dbase_LDFLAGS)
|
||||||
|
mca_db_dbase_la_LIBADD = $(db_dbase_LIBS)
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = $(component_noinst)
|
||||||
|
libmca_db_dbase_la_CPPFLAGS = $(db_dbase_CPPFLAGS)
|
||||||
|
libmca_db_dbase_la_SOURCES =$(sources)
|
||||||
|
libmca_db_dbase_la_LDFLAGS = -module -avoid-version $(db_dbase_LDFLAGS)
|
||||||
|
libmca_db_dbase_la_LIBADD = $(db_dbase_LIBS)
|
@ -8,11 +8,11 @@ dnl
|
|||||||
dnl $HEADER$
|
dnl $HEADER$
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
# MCA_state_db_CONFIG([action-if-found], [action-if-not-found])
|
# MCA_db_dbase_CONFIG([action-if-found], [action-if-not-found])
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
AC_DEFUN([MCA_state_db_CONFIG], [
|
AC_DEFUN([MCA_db_dbase_CONFIG], [
|
||||||
# only build if db.h and its corresponding library are found
|
# only build if db.h and its corresponding library are found
|
||||||
OMPI_CHECK_PACKAGE([state_db],
|
OMPI_CHECK_PACKAGE([db_db],
|
||||||
[db.h],
|
[db.h],
|
||||||
[db],
|
[db],
|
||||||
[dbopen],
|
[dbopen],
|
||||||
@ -22,7 +22,7 @@ AC_DEFUN([MCA_state_db_CONFIG], [
|
|||||||
[$1],
|
[$1],
|
||||||
[$2])])
|
[$2])])
|
||||||
|
|
||||||
AC_SUBST(state_db_CPPFLAGS)
|
AC_SUBST(db_dbase_CPPFLAGS)
|
||||||
AC_SUBST(state_db_LDFLAGS)
|
AC_SUBST(db_dbase_LDFLAGS)
|
||||||
AC_SUBST(state_db_LIBS)
|
AC_SUBST(db_dbase_LIBS)
|
||||||
])dnl
|
])dnl
|
@ -39,40 +39,44 @@
|
|||||||
#include "orte/mca/errmgr/base/base.h"
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
#include "orte/runtime/orte_globals.h"
|
#include "orte/runtime/orte_globals.h"
|
||||||
|
|
||||||
#include "state_db.h"
|
#include "db_dbase.h"
|
||||||
|
|
||||||
static int init(void);
|
static int init(void);
|
||||||
static int finalize(void);
|
static int finalize(void);
|
||||||
static int save(void *object, opal_data_type_t type);
|
static int insert(char *key, void *object, opal_data_type_t type);
|
||||||
static int set_recover_source(orte_process_name_t *name);
|
static int set_recover_source(orte_process_name_t *name);
|
||||||
static int recover(void *object, opal_data_type_t type);
|
static int select_data(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int delete_data(char *key);
|
||||||
|
|
||||||
orte_state_base_module_t orte_state_db_module = {
|
orte_db_base_module_t orte_db_dbase_module = {
|
||||||
init,
|
init,
|
||||||
finalize,
|
finalize,
|
||||||
save,
|
insert,
|
||||||
set_recover_source,
|
set_recover_source,
|
||||||
recover
|
select_data,
|
||||||
|
update,
|
||||||
|
delete_data
|
||||||
};
|
};
|
||||||
|
|
||||||
/* local variables */
|
/* local variables */
|
||||||
static DB *save_db=NULL, *recover_db=NULL;
|
static DB *save_dbase=NULL, *recover_dbase=NULL;
|
||||||
|
|
||||||
static int init(void)
|
static int init(void)
|
||||||
{
|
{
|
||||||
char *path, *name;
|
char *path, *name;
|
||||||
|
|
||||||
/* setup the database */
|
/* setup the database */
|
||||||
if (ORTE_SUCCESS != opal_os_dirpath_create(orte_state_db_directory, S_IRWXU)) {
|
if (ORTE_SUCCESS != opal_os_dirpath_create(orte_db_dbase_directory, S_IRWXU)) {
|
||||||
orte_show_help("help-state-db.txt", "cannot-create-dir", true,
|
orte_show_help("help-db-dbase.txt", "cannot-create-dir", true,
|
||||||
orte_state_db_directory);
|
orte_db_dbase_directory);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
orte_util_convert_process_name_to_string(&name, ORTE_PROC_MY_NAME);
|
orte_util_convert_process_name_to_string(&name, ORTE_PROC_MY_NAME);
|
||||||
path = opal_os_path(false, orte_state_db_directory, name, NULL);
|
path = opal_os_path(false, orte_db_dbase_directory, name, NULL);
|
||||||
free(name);
|
free(name);
|
||||||
if (NULL == (save_db = dbopen(path, O_CREAT | O_RDWR | O_TRUNC, S_IRWXU, DB_HASH, NULL))) {
|
if (NULL == (save_dbase = dbaseopen(path, O_CREAT | O_RDWR | O_TRUNC, S_IRWXU, DB_HASH, NULL))) {
|
||||||
orte_show_help("help-state-db.txt", "cannot-create-db", true, path);
|
orte_show_help("help-db-dbase.txt", "cannot-create-dbase", true, path);
|
||||||
free(path);
|
free(path);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
@ -88,37 +92,30 @@ static int finalize(void)
|
|||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int save(void *object, opal_data_type_t type)
|
static int insert(char *inkey, void *object, opal_data_type_t type)
|
||||||
{
|
{
|
||||||
DBT key, data;
|
DBT key, data;
|
||||||
opal_buffer_t buf;
|
opal_buffer_t buf;
|
||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t *proc;
|
orte_proc_t *proc;
|
||||||
char *name;
|
|
||||||
int rc=ORTE_SUCCESS, size;
|
int rc=ORTE_SUCCESS, size;
|
||||||
|
|
||||||
/* construct the buffer we will use for packing the data */
|
/* construct the buffer we will use for packing the data */
|
||||||
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
||||||
key.data = NULL;
|
key.data = inkey;
|
||||||
data.data = NULL;
|
key.size = strlen(key.data);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ORTE_JOB:
|
case ORTE_JOB:
|
||||||
jdata = (orte_job_t*)object;
|
jdata = (orte_job_t*)object;
|
||||||
opal_dss.pack(&buf, &jdata->state, 1, ORTE_JOB_STATE_T);
|
opal_dss.pack(&buf, &jdata, 1, ORTE_JOB);
|
||||||
asprintf((char**)&key.data, "JOB:%s", ORTE_JOBID_PRINT(jdata->jobid));
|
|
||||||
key.size = strlen(key.data);
|
|
||||||
break;
|
break;
|
||||||
case ORTE_PROC:
|
case ORTE_PROC:
|
||||||
proc = (orte_proc_t*)object;
|
proc = (orte_proc_t*)object;
|
||||||
opal_dss.pack(&buf, &proc->state, 1, ORTE_PROC_STATE_T);
|
opal_dss.pack(&buf, &proc, 1, ORTE_PROC);
|
||||||
orte_util_convert_process_name_to_string(&name, &proc->name);
|
|
||||||
asprintf((char**)&key.data, "PROC:%s", name);
|
|
||||||
free(name);
|
|
||||||
key.size = strlen(key.data);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
orte_show_help("help-state-db.txt", "unrecognized-type", true, type);
|
orte_show_help("help-db-dbase.txt", "unrecognized-type", true, type);
|
||||||
rc = ORTE_ERR_BAD_PARAM;
|
rc = ORTE_ERR_BAD_PARAM;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
break;
|
break;
|
||||||
@ -129,14 +126,14 @@ static int save(void *object, opal_data_type_t type)
|
|||||||
data.size = size;
|
data.size = size;
|
||||||
OBJ_DESTRUCT(&buf);
|
OBJ_DESTRUCT(&buf);
|
||||||
|
|
||||||
/* put the info into the db */
|
/* put the info into the dbase */
|
||||||
if (0 > save_db->put(save_db, &key, &data, 0)) {
|
if (0 > save_dbase->put(save_dbase, &key, &data, 0)) {
|
||||||
orte_show_help("help-state-db.txt", "error-writing-db", true, (char*)key.data, strerror(errno));
|
orte_show_help("help-db-dbase.txt", "error-writing-dbase", true, (char*)key.data, strerror(errno));
|
||||||
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
||||||
}
|
}
|
||||||
/* sync it to force it to disk */
|
/* sync it to force it to disk */
|
||||||
if (0 > save_db->sync(save_db, 0)) {
|
if (0 > save_dbase->sync(save_dbase, 0)) {
|
||||||
orte_show_help("help-state-db.txt", "error-syncing-db", true, (char*)key.data, strerror(errno));
|
orte_show_help("help-db-dbase.txt", "error-syncing-dbase", true, (char*)key.data, strerror(errno));
|
||||||
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,10 +155,10 @@ static int set_recover_source(orte_process_name_t *name)
|
|||||||
|
|
||||||
/* setup the database */
|
/* setup the database */
|
||||||
orte_util_convert_process_name_to_string(&pname, name);
|
orte_util_convert_process_name_to_string(&pname, name);
|
||||||
path = opal_os_path(false, orte_state_db_directory, pname, NULL);
|
path = opal_os_path(false, orte_db_dbase_directory, pname, NULL);
|
||||||
free(pname);
|
free(pname);
|
||||||
if (NULL == (recover_db = dbopen(path, O_RDONLY, S_IRWXU, DB_HASH, NULL))) {
|
if (NULL == (recover_dbase = dbaseopen(path, O_RDONLY, S_IRWXU, DB_HASH, NULL))) {
|
||||||
orte_show_help("help-state-db.txt", "cannot-open-db", true, path);
|
orte_show_help("help-db-dbase.txt", "cannot-open-dbase", true, path);
|
||||||
free(path);
|
free(path);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
@ -170,51 +167,28 @@ static int set_recover_source(orte_process_name_t *name)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recover(void *object, opal_data_type_t type)
|
static int select_data(char *inkey, void *object, opal_data_type_t type)
|
||||||
{
|
{
|
||||||
DBT key, data;
|
DBT key, data;
|
||||||
opal_buffer_t buf;
|
opal_buffer_t buf;
|
||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t *proc;
|
orte_proc_t *proc;
|
||||||
char *name;
|
|
||||||
int rc=ORTE_SUCCESS;
|
int rc=ORTE_SUCCESS;
|
||||||
int32_t n;
|
int32_t n;
|
||||||
orte_job_state_t *jstate;
|
|
||||||
orte_proc_state_t *pstate;
|
|
||||||
|
|
||||||
if (NULL == recover_db) {
|
if (NULL == recover_dbase) {
|
||||||
orte_show_help("help-state-db.txt", "recover-source-undef", true);
|
orte_show_help("help-db-dbase.txt", "recover-source-undef", true);
|
||||||
rc = ORTE_ERR_NOT_FOUND;
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* construct the buffer we will use for unpacking the data */
|
/* construct the buffer we will use for unpacking the data */
|
||||||
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
||||||
key.data = NULL;
|
key.data = inkey;
|
||||||
data.data = NULL;
|
key.size = strlen(key.data);
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case ORTE_JOB:
|
|
||||||
jdata = (orte_job_t*)object;
|
|
||||||
asprintf((char**)&key.data, "JOB:%s", ORTE_JOBID_PRINT(jdata->jobid));
|
|
||||||
key.size = strlen(key.data);
|
|
||||||
break;
|
|
||||||
case ORTE_PROC:
|
|
||||||
proc = (orte_proc_t*)object;
|
|
||||||
orte_util_convert_process_name_to_string(&name, &proc->name);
|
|
||||||
asprintf((char**)&key.data, "PROC:%s", name);
|
|
||||||
free(name);
|
|
||||||
key.size = strlen(key.data);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
orte_show_help("help-state-db.txt", "unrecognized-type", true, type);
|
|
||||||
rc = ORTE_ERR_BAD_PARAM;
|
|
||||||
goto cleanup;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get the specified data */
|
/* get the specified data */
|
||||||
if (0 > recover_db->get(recover_db, &key, &data, 0)) {
|
if (0 > recover_dbase->get(recover_dbase, &key, &data, 0)) {
|
||||||
orte_show_help("help-state-db.txt", "error-reading-db", true, (char*)key.data, strerror(errno));
|
orte_show_help("help-db-dbase.txt", "error-reading-dbase", true, (char*)key.data, strerror(errno));
|
||||||
rc = ORTE_ERR_FILE_READ_FAILURE;
|
rc = ORTE_ERR_FILE_READ_FAILURE;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -224,25 +198,27 @@ static int recover(void *object, opal_data_type_t type)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case ORTE_JOB:
|
case ORTE_JOB:
|
||||||
n=1;
|
n=1;
|
||||||
opal_dss.unpack(&buf, &jstate, &n, ORTE_JOB_STATE_T);
|
opal_dss.unpack(&buf, &jdata, &n, ORTE_JOB);
|
||||||
jdata->state = *jstate;
|
|
||||||
break;
|
break;
|
||||||
case ORTE_PROC:
|
case ORTE_PROC:
|
||||||
n=1;
|
n=1;
|
||||||
opal_dss.unpack(&buf, &pstate, &n, ORTE_PROC_STATE_T);
|
opal_dss.unpack(&buf, &proc, &n, ORTE_PROC);
|
||||||
proc->state = *pstate;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (NULL != key.data) {
|
|
||||||
free(key.data);
|
|
||||||
}
|
|
||||||
if (NULL != data.data) {
|
|
||||||
free(data.data);
|
|
||||||
}
|
|
||||||
OBJ_DESTRUCT(&buf);
|
OBJ_DESTRUCT(&buf);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int delete_data(char *key)
|
||||||
|
{
|
||||||
|
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||||
|
}
|
31
orte/mca/db/dbase/db_dbase.h
Обычный файл
31
orte/mca/db/dbase/db_dbase.h
Обычный файл
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ORTE_DB_DBASE_H
|
||||||
|
#define ORTE_DB_DBASE_H
|
||||||
|
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
|
||||||
|
BEGIN_C_DECLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Module open / close
|
||||||
|
*/
|
||||||
|
int orte_db_dbase_component_open(void);
|
||||||
|
int orte_db_dbase_component_close(void);
|
||||||
|
int orte_db_dbase_component_query(mca_base_module_t **module, int *priority);
|
||||||
|
|
||||||
|
|
||||||
|
ORTE_MODULE_DECLSPEC extern orte_db_base_component_t mca_db_dbase_component;
|
||||||
|
ORTE_DECLSPEC extern orte_db_base_module_t orte_db_dbase_module;
|
||||||
|
extern char *orte_db_dbase_directory;
|
||||||
|
|
||||||
|
END_C_DECLS
|
||||||
|
|
||||||
|
#endif /* ORTE_DB_DBASE_H */
|
@ -21,31 +21,31 @@
|
|||||||
|
|
||||||
#include "orte/util/proc_info.h"
|
#include "orte/util/proc_info.h"
|
||||||
|
|
||||||
#include "orte/mca/state/state.h"
|
#include "orte/mca/db/db.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#include "state_db.h"
|
#include "db_dbase.h"
|
||||||
|
|
||||||
extern orte_state_base_module_t orte_state_db_module;
|
extern orte_db_base_module_t orte_db_dbase_module;
|
||||||
char *orte_state_db_directory;
|
char *orte_db_dbase_directory;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Instantiate the public struct with all of our public information
|
* Instantiate the public struct with all of our public information
|
||||||
* and pointers to our public functions in it
|
* and pointers to our public functions in it
|
||||||
*/
|
*/
|
||||||
orte_state_base_component_t mca_state_db_component = {
|
orte_db_base_component_t mca_db_dbase_component = {
|
||||||
{
|
{
|
||||||
ORTE_STATE_BASE_VERSION_1_0_0,
|
ORTE_DB_BASE_VERSION_1_0_0,
|
||||||
|
|
||||||
/* Component name and version */
|
/* Component name and version */
|
||||||
"db",
|
"dbase",
|
||||||
ORTE_MAJOR_VERSION,
|
ORTE_MAJOR_VERSION,
|
||||||
ORTE_MINOR_VERSION,
|
ORTE_MINOR_VERSION,
|
||||||
ORTE_RELEASE_VERSION,
|
ORTE_RELEASE_VERSION,
|
||||||
|
|
||||||
/* Component open and close functions */
|
/* Component open and close functions */
|
||||||
orte_state_db_component_open,
|
orte_db_dbase_component_open,
|
||||||
orte_state_db_component_close,
|
orte_db_dbase_component_close,
|
||||||
orte_state_db_component_query
|
orte_db_dbase_component_query
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
/* The component is checkpoint ready */
|
/* The component is checkpoint ready */
|
||||||
@ -55,34 +55,34 @@ orte_state_base_component_t mca_state_db_component = {
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_db_component_open(void)
|
orte_db_dbase_component_open(void)
|
||||||
{
|
{
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int orte_state_db_component_query(mca_base_module_t **module, int *priority)
|
int orte_db_dbase_component_query(mca_base_module_t **module, int *priority)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* we are the file module - we need to be selected
|
/* we are the file module - we need to be selected
|
||||||
* IFF we are requested
|
* IFF we are requested
|
||||||
*/
|
*/
|
||||||
bool is_required = false;
|
bool is_required = false;
|
||||||
mca_base_component_t *c = &mca_state_db_component.base_version;
|
mca_base_component_t *c = &mca_db_dbase_component.base_version;
|
||||||
|
|
||||||
/* retrieve the name of the file to be used */
|
/* retrieve the name of the file to be used */
|
||||||
mca_base_param_reg_string(c, "dir",
|
mca_base_param_reg_string(c, "dir",
|
||||||
"Name of directory to be used for storing and recovering state information",
|
"Name of directory to be used for storing and recovering db information",
|
||||||
false, false, NULL, &orte_state_db_directory);
|
false, false, NULL, &orte_db_dbase_directory);
|
||||||
|
|
||||||
mca_base_is_component_required(&orte_state_base_components_available,
|
mca_base_is_component_required(&orte_db_base_components_available,
|
||||||
&mca_state_db_component.base_version,
|
&mca_db_dbase_component.base_version,
|
||||||
true,
|
true,
|
||||||
&is_required);
|
&is_required);
|
||||||
|
|
||||||
if (is_required && NULL != orte_state_db_directory) {
|
if (is_required && NULL != orte_db_dbase_directory) {
|
||||||
*priority = 1000;
|
*priority = 1000;
|
||||||
*module = (mca_base_module_t*)&orte_state_db_module;
|
*module = (mca_base_module_t*)&orte_db_dbase_module;
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ int orte_state_db_component_query(mca_base_module_t **module, int *priority)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_db_component_close(void)
|
orte_db_dbase_component_close(void)
|
||||||
{
|
{
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
38
orte/mca/db/dbm/Makefile.am
Обычный файл
38
orte/mca/db/dbm/Makefile.am
Обычный файл
@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
|
||||||
|
sources = \
|
||||||
|
db_dbm.h \
|
||||||
|
db_dbm_component.c \
|
||||||
|
db_dbm.c
|
||||||
|
|
||||||
|
# Make the output library in this directory, and name it either
|
||||||
|
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||||
|
# (for static builds).
|
||||||
|
|
||||||
|
if OMPI_BUILD_db_dbm_DSO
|
||||||
|
component_noinst =
|
||||||
|
component_install = mca_db_dbm.la
|
||||||
|
else
|
||||||
|
component_noinst = libmca_db_dbm.la
|
||||||
|
component_install =
|
||||||
|
endif
|
||||||
|
|
||||||
|
mcacomponentdir = $(pkglibdir)
|
||||||
|
mcacomponent_LTLIBRARIES = $(component_install)
|
||||||
|
mca_db_dbm_la_CPPFLAGS = $(db_dbm_CPPFLAGS)
|
||||||
|
mca_db_dbm_la_SOURCES = $(sources)
|
||||||
|
mca_db_dbm_la_LDFLAGS = -module -avoid-version $(db_dbm_LDFLAGS)
|
||||||
|
mca_db_dbm_la_LIBADD = $(db_dbm_LIBS)
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = $(component_noinst)
|
||||||
|
libmca_db_dbm_la_CPPFLAGS = $(db_dbm_CPPFLAGS)
|
||||||
|
libmca_db_dbm_la_SOURCES =$(sources)
|
||||||
|
libmca_db_dbm_la_LDFLAGS = -module -avoid-version $(db_dbm_LDFLAGS)
|
||||||
|
libmca_db_dbm_la_LIBADD = $(db_dbm_LIBS)
|
@ -8,11 +8,11 @@ dnl
|
|||||||
dnl $HEADER$
|
dnl $HEADER$
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
# MCA_state_dbm_CONFIG([action-if-found], [action-if-not-found])
|
# MCA_db_dbm_CONFIG([action-if-found], [action-if-not-found])
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
AC_DEFUN([MCA_state_dbm_CONFIG], [
|
AC_DEFUN([MCA_db_dbm_CONFIG], [
|
||||||
# only build if ndbm.h and its library are found
|
# only build if ndbm.h and its library are found
|
||||||
OMPI_CHECK_PACKAGE([state_dbm],
|
OMPI_CHECK_PACKAGE([db_dbm],
|
||||||
[ndbm.h],
|
[ndbm.h],
|
||||||
[dbm],
|
[dbm],
|
||||||
[dbm_open],
|
[dbm_open],
|
||||||
@ -22,7 +22,7 @@ AC_DEFUN([MCA_state_dbm_CONFIG], [
|
|||||||
[$1],
|
[$1],
|
||||||
[$2])])
|
[$2])])
|
||||||
|
|
||||||
AC_SUBST(state_dbm_CPPFLAGS)
|
AC_SUBST(db_dbm_CPPFLAGS)
|
||||||
AC_SUBST(state_dbm_LDFLAGS)
|
AC_SUBST(db_dbm_LDFLAGS)
|
||||||
AC_SUBST(state_dbm_LIBS)
|
AC_SUBST(db_dbm_LIBS)
|
||||||
])dnl
|
])dnl
|
11
orte/mca/db/dbm/configure.params
Обычный файл
11
orte/mca/db/dbm/configure.params
Обычный файл
@ -0,0 +1,11 @@
|
|||||||
|
# -*- shell-script -*-
|
||||||
|
#
|
||||||
|
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
# $COPYRIGHT$
|
||||||
|
#
|
||||||
|
# Additional copyrights may follow
|
||||||
|
#
|
||||||
|
# $HEADER$
|
||||||
|
#
|
||||||
|
|
||||||
|
PARAM_CONFIG_FILES="Makefile"
|
@ -39,20 +39,24 @@
|
|||||||
#include "orte/mca/errmgr/base/base.h"
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
#include "orte/runtime/orte_globals.h"
|
#include "orte/runtime/orte_globals.h"
|
||||||
|
|
||||||
#include "state_dbm.h"
|
#include "db_dbm.h"
|
||||||
|
|
||||||
static int init(void);
|
static int init(void);
|
||||||
static int finalize(void);
|
static int finalize(void);
|
||||||
static int save(void *object, opal_data_type_t type);
|
static int insert(char *key, void *object, opal_data_type_t type);
|
||||||
static int set_recover_source(orte_process_name_t *name);
|
static int set_recover_source(orte_process_name_t *name);
|
||||||
static int recover(void *object, opal_data_type_t type);
|
static int select_data(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type);
|
||||||
|
static int delete_data(char *key);
|
||||||
|
|
||||||
orte_state_base_module_t orte_state_dbm_module = {
|
orte_db_base_module_t orte_db_dbm_module = {
|
||||||
init,
|
init,
|
||||||
finalize,
|
finalize,
|
||||||
save,
|
insert,
|
||||||
set_recover_source,
|
set_recover_source,
|
||||||
recover
|
select_data,
|
||||||
|
update,
|
||||||
|
delete_data
|
||||||
};
|
};
|
||||||
|
|
||||||
/* local variables */
|
/* local variables */
|
||||||
@ -63,16 +67,16 @@ static int init(void)
|
|||||||
char *path, *name;
|
char *path, *name;
|
||||||
|
|
||||||
/* setup the database */
|
/* setup the database */
|
||||||
if (ORTE_SUCCESS != opal_os_dirpath_create(orte_state_dbm_directory, S_IRWXU)) {
|
if (ORTE_SUCCESS != opal_os_dirpath_create(orte_db_dbm_directory, S_IRWXU)) {
|
||||||
orte_show_help("help-state-dbm.txt", "cannot-create-dir", true,
|
orte_show_help("help-db-dbm.txt", "cannot-create-dir", true,
|
||||||
orte_state_dbm_directory);
|
orte_db_dbm_directory);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
orte_util_convert_process_name_to_string(&name, ORTE_PROC_MY_NAME);
|
orte_util_convert_process_name_to_string(&name, ORTE_PROC_MY_NAME);
|
||||||
path = opal_os_path(false, orte_state_dbm_directory, name, NULL);
|
path = opal_os_path(false, orte_db_dbm_directory, name, NULL);
|
||||||
free(name);
|
free(name);
|
||||||
if (NULL == (save_dbm = dbm_open(path, O_CREAT | O_RDWR | O_TRUNC, S_IRWXU))) {
|
if (NULL == (save_dbm = dbm_open(path, O_CREAT | O_RDWR | O_TRUNC, S_IRWXU))) {
|
||||||
orte_show_help("help-state-dbm.txt", "cannot-create-dbm", true, path);
|
orte_show_help("help-db-dbm.txt", "cannot-create-dbm", true, path);
|
||||||
free(path);
|
free(path);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
@ -88,37 +92,31 @@ static int finalize(void)
|
|||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int save(void *object, opal_data_type_t type)
|
static int insert(char *inkey, void *object, opal_data_type_t type)
|
||||||
{
|
{
|
||||||
datum key, data;
|
datum key, data;
|
||||||
opal_buffer_t buf;
|
opal_buffer_t buf;
|
||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t *proc;
|
orte_proc_t *proc;
|
||||||
char *name;
|
|
||||||
int rc=ORTE_SUCCESS, size;
|
int rc=ORTE_SUCCESS, size;
|
||||||
|
|
||||||
/* construct the buffer we will use for packing the data */
|
/* construct the buffer we will use for packing the data */
|
||||||
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
||||||
key.dptr = NULL;
|
key.dptr = inkey;
|
||||||
|
key.dsize = strlen(key.dptr);
|
||||||
data.dptr = NULL;
|
data.dptr = NULL;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ORTE_JOB:
|
case ORTE_JOB:
|
||||||
jdata = (orte_job_t*)object;
|
jdata = (orte_job_t*)object;
|
||||||
opal_dss.pack(&buf, &jdata->state, 1, ORTE_JOB_STATE_T);
|
opal_dss.pack(&buf, &jdata, 1, ORTE_JOB);
|
||||||
asprintf((char**)&key.dptr, "JOB:%s", ORTE_JOBID_PRINT(jdata->jobid));
|
|
||||||
key.dsize = strlen(key.dptr);
|
|
||||||
break;
|
break;
|
||||||
case ORTE_PROC:
|
case ORTE_PROC:
|
||||||
proc = (orte_proc_t*)object;
|
proc = (orte_proc_t*)object;
|
||||||
opal_dss.pack(&buf, &proc->state, 1, ORTE_PROC_STATE_T);
|
opal_dss.pack(&buf, &proc, 1, ORTE_PROC);
|
||||||
orte_util_convert_process_name_to_string(&name, &proc->name);
|
|
||||||
asprintf((char**)&key.dptr, "PROC:%s", name);
|
|
||||||
free(name);
|
|
||||||
key.dsize = strlen(key.dptr);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
orte_show_help("help-state-dbm.txt", "unrecognized-type", true, type);
|
orte_show_help("help-db-db.txt", "unrecognized-type", true, type);
|
||||||
rc = ORTE_ERR_BAD_PARAM;
|
rc = ORTE_ERR_BAD_PARAM;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
break;
|
break;
|
||||||
@ -131,7 +129,7 @@ static int save(void *object, opal_data_type_t type)
|
|||||||
|
|
||||||
/* put the info into the dbm */
|
/* put the info into the dbm */
|
||||||
if (0 > dbm_store(save_dbm, key, data, DBM_REPLACE)) {
|
if (0 > dbm_store(save_dbm, key, data, DBM_REPLACE)) {
|
||||||
orte_show_help("help-state-dbm.txt", "error-writing-dbm", true, (char*)key.dptr, strerror(errno));
|
orte_show_help("help-db-dbm.txt", "error-writing-dbm", true, (char*)key.dptr, strerror(errno));
|
||||||
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
rc = ORTE_ERR_FILE_WRITE_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,10 +151,10 @@ static int set_recover_source(orte_process_name_t *name)
|
|||||||
|
|
||||||
/* setup the database */
|
/* setup the database */
|
||||||
orte_util_convert_process_name_to_string(&pname, name);
|
orte_util_convert_process_name_to_string(&pname, name);
|
||||||
path = opal_os_path(false, orte_state_dbm_directory, pname, NULL);
|
path = opal_os_path(false, orte_db_dbm_directory, pname, NULL);
|
||||||
free(pname);
|
free(pname);
|
||||||
if (NULL == (recover_dbm = dbm_open(path, O_RDONLY, S_IRWXU))) {
|
if (NULL == (recover_dbm = dbm_open(path, O_RDONLY, S_IRWXU))) {
|
||||||
orte_show_help("help-state-dbm.txt", "cannot-open-dbm", true, path);
|
orte_show_help("help-db-dbm.txt", "cannot-open-dbm", true, path);
|
||||||
free(path);
|
free(path);
|
||||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||||
}
|
}
|
||||||
@ -165,52 +163,30 @@ static int set_recover_source(orte_process_name_t *name)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recover(void *object, opal_data_type_t type)
|
static int select_data(char *inkey, void *object, opal_data_type_t type)
|
||||||
{
|
{
|
||||||
datum key, data;
|
datum key, data;
|
||||||
opal_buffer_t buf;
|
opal_buffer_t buf;
|
||||||
orte_job_t *jdata;
|
orte_job_t *jdata;
|
||||||
orte_proc_t *proc;
|
orte_proc_t *proc;
|
||||||
char *name;
|
|
||||||
int rc=ORTE_SUCCESS;
|
int rc=ORTE_SUCCESS;
|
||||||
int32_t n;
|
int32_t n;
|
||||||
orte_job_state_t *jstate;
|
|
||||||
orte_proc_state_t *pstate;
|
|
||||||
|
|
||||||
if (NULL == recover_dbm) {
|
if (NULL == recover_dbm) {
|
||||||
orte_show_help("help-state-dbm.txt", "recover-source-undef", true);
|
orte_show_help("help-db-dbm.txt", "recover-source-undef", true);
|
||||||
rc = ORTE_ERR_NOT_FOUND;
|
rc = ORTE_ERR_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* construct the buffer we will use for unpacking the data */
|
/* construct the buffer we will use for unpacking the data */
|
||||||
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
OBJ_CONSTRUCT(&buf, opal_buffer_t);
|
||||||
key.dptr = NULL;
|
key.dptr = inkey;
|
||||||
|
key.dsize = strlen(key.dptr);
|
||||||
data.dptr = NULL;
|
data.dptr = NULL;
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case ORTE_JOB:
|
|
||||||
jdata = (orte_job_t*)object;
|
|
||||||
asprintf((char**)&key.dptr, "JOB:%s", ORTE_JOBID_PRINT(jdata->jobid));
|
|
||||||
key.dsize = strlen(key.dptr);
|
|
||||||
break;
|
|
||||||
case ORTE_PROC:
|
|
||||||
proc = (orte_proc_t*)object;
|
|
||||||
orte_util_convert_process_name_to_string(&name, &proc->name);
|
|
||||||
asprintf((char**)&key.dptr, "PROC:%s", name);
|
|
||||||
free(name);
|
|
||||||
key.dsize = strlen(key.dptr);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
orte_show_help("help-state-dbm.txt", "unrecognized-type", true, type);
|
|
||||||
rc = ORTE_ERR_BAD_PARAM;
|
|
||||||
goto cleanup;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get the specified data */
|
/* get the specified data */
|
||||||
data = dbm_fetch(recover_dbm, key);
|
data = dbm_fetch(recover_dbm, key);
|
||||||
if (NULL == data.dptr) {
|
if (NULL == data.dptr) {
|
||||||
orte_show_help("help-state-dbm.txt", "error-reading-dbm", true, (char*)key.dptr, strerror(errno));
|
orte_show_help("help-db-dbm.txt", "error-reading-dbm", true, (char*)key.dptr, strerror(errno));
|
||||||
rc = ORTE_ERR_FILE_READ_FAILURE;
|
rc = ORTE_ERR_FILE_READ_FAILURE;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -220,25 +196,27 @@ static int recover(void *object, opal_data_type_t type)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case ORTE_JOB:
|
case ORTE_JOB:
|
||||||
n=1;
|
n=1;
|
||||||
opal_dss.unpack(&buf, &jstate, &n, ORTE_JOB_STATE_T);
|
opal_dss.unpack(&buf, &jdata, &n, ORTE_JOB);
|
||||||
jdata->state = *jstate;
|
|
||||||
break;
|
break;
|
||||||
case ORTE_PROC:
|
case ORTE_PROC:
|
||||||
n=1;
|
n=1;
|
||||||
opal_dss.unpack(&buf, &pstate, &n, ORTE_PROC_STATE_T);
|
opal_dss.unpack(&buf, &proc, &n, ORTE_PROC);
|
||||||
proc->state = *pstate;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (NULL != key.dptr) {
|
|
||||||
free(key.dptr);
|
|
||||||
}
|
|
||||||
if (NULL != data.dptr) {
|
|
||||||
free(data.dptr);
|
|
||||||
}
|
|
||||||
OBJ_DESTRUCT(&buf);
|
OBJ_DESTRUCT(&buf);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int update(char *key, void *object, opal_data_type_t type)
|
||||||
|
{
|
||||||
|
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int delete_data(char *key)
|
||||||
|
{
|
||||||
|
return ORTE_ERR_NOT_IMPLEMENTED;
|
||||||
|
}
|
31
orte/mca/db/dbm/db_dbm.h
Обычный файл
31
orte/mca/db/dbm/db_dbm.h
Обычный файл
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||||
|
* $COPYRIGHT$
|
||||||
|
*
|
||||||
|
* Additional copyrights may follow
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ORTE_DB_DBM_H
|
||||||
|
#define ORTE_DB_DBM_H
|
||||||
|
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
|
||||||
|
BEGIN_C_DECLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Module open / close
|
||||||
|
*/
|
||||||
|
int orte_db_dbm_component_open(void);
|
||||||
|
int orte_db_dbm_component_close(void);
|
||||||
|
int orte_db_dbm_component_query(mca_base_module_t **module, int *priority);
|
||||||
|
|
||||||
|
|
||||||
|
ORTE_MODULE_DECLSPEC extern orte_db_base_component_t mca_db_dbm_component;
|
||||||
|
ORTE_DECLSPEC extern orte_db_base_module_t orte_db_dbm_module;
|
||||||
|
extern char *orte_db_dbm_directory;
|
||||||
|
|
||||||
|
END_C_DECLS
|
||||||
|
|
||||||
|
#endif /* ORTE_DB_DBM_H */
|
@ -21,20 +21,20 @@
|
|||||||
|
|
||||||
#include "orte/util/proc_info.h"
|
#include "orte/util/proc_info.h"
|
||||||
|
|
||||||
#include "orte/mca/state/state.h"
|
#include "orte/mca/db/db.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#include "state_dbm.h"
|
#include "db_dbm.h"
|
||||||
|
|
||||||
extern orte_state_base_module_t orte_state_dbm_module;
|
extern orte_db_base_module_t orte_db_dbm_module;
|
||||||
char *orte_state_dbm_directory;
|
char *orte_db_dbm_directory;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Instantiate the public struct with all of our public information
|
* Instantiate the public struct with all of our public information
|
||||||
* and pointers to our public functions in it
|
* and pointers to our public functions in it
|
||||||
*/
|
*/
|
||||||
orte_state_base_component_t mca_state_dbm_component = {
|
orte_db_base_component_t mca_db_dbm_component = {
|
||||||
{
|
{
|
||||||
ORTE_STATE_BASE_VERSION_1_0_0,
|
ORTE_DB_BASE_VERSION_1_0_0,
|
||||||
|
|
||||||
/* Component name and version */
|
/* Component name and version */
|
||||||
"dbm",
|
"dbm",
|
||||||
@ -43,9 +43,9 @@ orte_state_base_component_t mca_state_dbm_component = {
|
|||||||
ORTE_RELEASE_VERSION,
|
ORTE_RELEASE_VERSION,
|
||||||
|
|
||||||
/* Component open and close functions */
|
/* Component open and close functions */
|
||||||
orte_state_dbm_component_open,
|
orte_db_dbm_component_open,
|
||||||
orte_state_dbm_component_close,
|
orte_db_dbm_component_close,
|
||||||
orte_state_dbm_component_query
|
orte_db_dbm_component_query
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
/* The component is checkpoint ready */
|
/* The component is checkpoint ready */
|
||||||
@ -55,34 +55,24 @@ orte_state_base_component_t mca_state_dbm_component = {
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_dbm_component_open(void)
|
orte_db_dbm_component_open(void)
|
||||||
{
|
{
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int orte_state_dbm_component_query(mca_base_module_t **module, int *priority)
|
int orte_db_dbm_component_query(mca_base_module_t **module, int *priority)
|
||||||
{
|
{
|
||||||
|
mca_base_component_t *c = &mca_db_dbm_component.base_version;
|
||||||
/* we are the file module - we need to be selected
|
|
||||||
* IFF we are requested
|
|
||||||
*/
|
|
||||||
bool is_required = false;
|
|
||||||
mca_base_component_t *c = &mca_state_dbm_component.base_version;
|
|
||||||
|
|
||||||
/* retrieve the name of the file to be used */
|
/* retrieve the name of the file to be used */
|
||||||
mca_base_param_reg_string(c, "dir",
|
mca_base_param_reg_string(c, "dir",
|
||||||
"Name of directory to be used for storing and recovering state information",
|
"Name of directory to be used for storing and recovering db information",
|
||||||
false, false, NULL, &orte_state_dbm_directory);
|
false, false, NULL, &orte_db_dbm_directory);
|
||||||
|
|
||||||
mca_base_is_component_required(&orte_state_base_components_available,
|
if (NULL != orte_db_dbm_directory) {
|
||||||
&mca_state_dbm_component.base_version,
|
*priority = 50;
|
||||||
true,
|
*module = (mca_base_module_t*)&orte_db_dbm_module;
|
||||||
&is_required);
|
|
||||||
|
|
||||||
if (is_required && NULL != orte_state_dbm_directory) {
|
|
||||||
*priority = 1000;
|
|
||||||
*module = (mca_base_module_t*)&orte_state_dbm_module;
|
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +84,7 @@ int orte_state_dbm_component_query(mca_base_module_t **module, int *priority)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
orte_state_dbm_component_close(void)
|
orte_db_dbm_component_close(void)
|
||||||
{
|
{
|
||||||
return ORTE_SUCCESS;
|
return ORTE_SUCCESS;
|
||||||
}
|
}
|
@ -52,6 +52,7 @@
|
|||||||
#include "orte/util/name_fns.h"
|
#include "orte/util/name_fns.h"
|
||||||
#include "orte/util/show_help.h"
|
#include "orte/util/show_help.h"
|
||||||
#include "orte/mca/notifier/base/base.h"
|
#include "orte/mca/notifier/base/base.h"
|
||||||
|
#include "orte/mca/db/base/base.h"
|
||||||
|
|
||||||
#include "orte/runtime/orte_cr.h"
|
#include "orte/runtime/orte_cr.h"
|
||||||
#include "orte/runtime/orte_globals.h"
|
#include "orte/runtime/orte_globals.h"
|
||||||
@ -211,6 +212,18 @@ int orte_ess_base_app_setup(void)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* setup the db system */
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_db_base_open())) {
|
||||||
|
ORTE_ERROR_LOG(ret);
|
||||||
|
error = "orte_db_open";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
if (ORTE_SUCCESS != (ret = orte_db_base_select())) {
|
||||||
|
ORTE_ERROR_LOG(ret);
|
||||||
|
error = "orte_db_select";
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
/* if we are an ORTE app - and not an MPI app - then
|
/* if we are an ORTE app - and not an MPI app - then
|
||||||
* we need to barrier here. MPI_Init has its own barrier,
|
* we need to barrier here. MPI_Init has its own barrier,
|
||||||
* so we don't need to do two of them. However, if we
|
* so we don't need to do two of them. However, if we
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
#include "orte/mca/errmgr/base/base.h"
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
#include "orte/mca/notifier/base/base.h"
|
#include "orte/mca/notifier/base/base.h"
|
||||||
#include "orte/mca/rmcast/base/base.h"
|
#include "orte/mca/rmcast/base/base.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#if ORTE_ENABLE_SENSORS
|
#if ORTE_ENABLE_SENSORS
|
||||||
#include "orte/mca/sensor/base/base.h"
|
#include "orte/mca/sensor/base/base.h"
|
||||||
#endif
|
#endif
|
||||||
@ -407,15 +407,15 @@ int orte_ess_base_orted_setup(char **hosts)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup the state framework */
|
/* setup the db framework */
|
||||||
if (ORTE_SUCCESS != (ret = orte_state_base_open())) {
|
if (ORTE_SUCCESS != (ret = orte_db_base_open())) {
|
||||||
ORTE_ERROR_LOG(ret);
|
ORTE_ERROR_LOG(ret);
|
||||||
error = "orte_state_open";
|
error = "orte_db_open";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (ORTE_SUCCESS != (ret = orte_state_base_select())) {
|
if (ORTE_SUCCESS != (ret = orte_db_base_select())) {
|
||||||
ORTE_ERROR_LOG(ret);
|
ORTE_ERROR_LOG(ret);
|
||||||
error = "orte_state_select";
|
error = "orte_db_select";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,7 +457,7 @@ int orte_ess_base_orted_finalize(void)
|
|||||||
#if ORTE_ENABLE_SENSORS
|
#if ORTE_ENABLE_SENSORS
|
||||||
orte_sensor_base_close();
|
orte_sensor_base_close();
|
||||||
#endif
|
#endif
|
||||||
orte_state_base_close();
|
orte_db_base_close();
|
||||||
orte_notifier_base_close();
|
orte_notifier_base_close();
|
||||||
|
|
||||||
orte_cr_finalize();
|
orte_cr_finalize();
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
#include "orte/mca/odls/base/base.h"
|
#include "orte/mca/odls/base/base.h"
|
||||||
#include "orte/mca/notifier/base/base.h"
|
#include "orte/mca/notifier/base/base.h"
|
||||||
#include "orte/mca/rmcast/base/base.h"
|
#include "orte/mca/rmcast/base/base.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#if ORTE_ENABLE_SENSORS
|
#if ORTE_ENABLE_SENSORS
|
||||||
#include "orte/mca/sensor/base/base.h"
|
#include "orte/mca/sensor/base/base.h"
|
||||||
#endif
|
#endif
|
||||||
@ -528,15 +528,15 @@ static int rte_init(void)
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup the state framework */
|
/* setup the db framework */
|
||||||
if (ORTE_SUCCESS != (ret = orte_state_base_open())) {
|
if (ORTE_SUCCESS != (ret = orte_db_base_open())) {
|
||||||
ORTE_ERROR_LOG(ret);
|
ORTE_ERROR_LOG(ret);
|
||||||
error = "orte_state_open";
|
error = "orte_db_open";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (ORTE_SUCCESS != (ret = orte_state_base_select())) {
|
if (ORTE_SUCCESS != (ret = orte_db_base_select())) {
|
||||||
ORTE_ERROR_LOG(ret);
|
ORTE_ERROR_LOG(ret);
|
||||||
error = "orte_state_select";
|
error = "orte_db_select";
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -612,7 +612,7 @@ static int rte_finalize(void)
|
|||||||
#if ORTE_ENABLE_SENSORS
|
#if ORTE_ENABLE_SENSORS
|
||||||
orte_sensor_base_close();
|
orte_sensor_base_close();
|
||||||
#endif
|
#endif
|
||||||
orte_state_base_close();
|
orte_db_base_close();
|
||||||
orte_notifier_base_close();
|
orte_notifier_base_close();
|
||||||
|
|
||||||
orte_cr_finalize();
|
orte_cr_finalize();
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
/** @file:
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MCA_STATE_BASE_H
|
|
||||||
#define MCA_STATE_BASE_H
|
|
||||||
|
|
||||||
#include "orte_config.h"
|
|
||||||
#include "orte/types.h"
|
|
||||||
|
|
||||||
#include "opal/mca/mca.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "orte/mca/state/state.h"
|
|
||||||
|
|
||||||
BEGIN_C_DECLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Global functions for MCA overall collective open and close
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open the state framework
|
|
||||||
*/
|
|
||||||
ORTE_DECLSPEC int orte_state_base_open(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Select a state module
|
|
||||||
*/
|
|
||||||
ORTE_DECLSPEC int orte_state_base_select(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the state framework
|
|
||||||
*/
|
|
||||||
ORTE_DECLSPEC int orte_state_base_close(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The verbose channel for debug output
|
|
||||||
*/
|
|
||||||
ORTE_DECLSPEC extern int orte_state_base_output;
|
|
||||||
|
|
||||||
ORTE_DECLSPEC extern opal_list_t orte_state_base_components_available;
|
|
||||||
|
|
||||||
|
|
||||||
END_C_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "orte_config.h"
|
|
||||||
#include "orte/constants.h"
|
|
||||||
|
|
||||||
#include "opal/mca/mca.h"
|
|
||||||
#include "opal/util/output.h"
|
|
||||||
#include "opal/mca/base/base.h"
|
|
||||||
#include "opal/dss/dss_types.h"
|
|
||||||
|
|
||||||
#include "orte/mca/state/base/base.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following file was created by configure. It contains extern
|
|
||||||
* statements and the definition of an array of pointers to each
|
|
||||||
* module's public mca_base_module_t struct.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "orte/mca/state/base/static-components.h"
|
|
||||||
|
|
||||||
opal_list_t orte_state_base_components_available;
|
|
||||||
|
|
||||||
/* provide "NULL" functions */
|
|
||||||
static int init(void);
|
|
||||||
static int finalize(void);
|
|
||||||
static int save(void *object, opal_data_type_t type);
|
|
||||||
static int set_recover_source(orte_process_name_t *name);
|
|
||||||
static int recover(void *object, opal_data_type_t type);
|
|
||||||
|
|
||||||
orte_state_base_module_t orte_state = {
|
|
||||||
init,
|
|
||||||
finalize,
|
|
||||||
save,
|
|
||||||
set_recover_source,
|
|
||||||
recover
|
|
||||||
};
|
|
||||||
int orte_state_base_output;
|
|
||||||
|
|
||||||
int
|
|
||||||
orte_state_base_open(void)
|
|
||||||
{
|
|
||||||
orte_state_base_output = opal_output_open(NULL);
|
|
||||||
|
|
||||||
OBJ_CONSTRUCT(&orte_state_base_components_available, opal_list_t);
|
|
||||||
|
|
||||||
/* Open up all available components */
|
|
||||||
if (ORTE_SUCCESS !=
|
|
||||||
mca_base_components_open("state", orte_state_base_output, mca_state_base_static_components,
|
|
||||||
&orte_state_base_components_available,
|
|
||||||
true)) {
|
|
||||||
return ORTE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int init(void)
|
|
||||||
{
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
static int finalize(void)
|
|
||||||
{
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
static int save(void *object, opal_data_type_t type)
|
|
||||||
{
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
static int set_recover_source(orte_process_name_t *name)
|
|
||||||
{
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
||||||
static int recover(void *object, opal_data_type_t type)
|
|
||||||
{
|
|
||||||
return ORTE_SUCCESS;
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
sources = \
|
|
||||||
state_db.h \
|
|
||||||
state_db_component.c \
|
|
||||||
state_db.c
|
|
||||||
|
|
||||||
# Make the output library in this directory, and name it either
|
|
||||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
|
||||||
# (for static builds).
|
|
||||||
|
|
||||||
if OMPI_BUILD_state_db_DSO
|
|
||||||
component_noinst =
|
|
||||||
component_install = mca_state_db.la
|
|
||||||
else
|
|
||||||
component_noinst = libmca_state_db.la
|
|
||||||
component_install =
|
|
||||||
endif
|
|
||||||
|
|
||||||
mcacomponentdir = $(pkglibdir)
|
|
||||||
mcacomponent_LTLIBRARIES = $(component_install)
|
|
||||||
mca_state_db_la_CPPFLAGS = $(state_db_CPPFLAGS)
|
|
||||||
mca_state_db_la_SOURCES = $(sources)
|
|
||||||
mca_state_db_la_LDFLAGS = -module -avoid-version $(state_db_LDFLAGS)
|
|
||||||
mca_state_db_la_LIBADD = $(state_db_LIBS)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = $(component_noinst)
|
|
||||||
libmca_state_db_la_CPPFLAGS = $(state_db_CPPFLAGS)
|
|
||||||
libmca_state_db_la_SOURCES =$(sources)
|
|
||||||
libmca_state_db_la_LDFLAGS = -module -avoid-version $(state_db_LDFLAGS)
|
|
||||||
libmca_state_db_la_LIBADD = $(state_db_LIBS)
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ORTE_STATE_DB_H
|
|
||||||
#define ORTE_STATE_DB_H
|
|
||||||
|
|
||||||
#include "orte/mca/state/state.h"
|
|
||||||
|
|
||||||
BEGIN_C_DECLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Module open / close
|
|
||||||
*/
|
|
||||||
int orte_state_db_component_open(void);
|
|
||||||
int orte_state_db_component_close(void);
|
|
||||||
int orte_state_db_component_query(mca_base_module_t **module, int *priority);
|
|
||||||
|
|
||||||
|
|
||||||
ORTE_MODULE_DECLSPEC extern orte_state_base_component_t mca_state_db_component;
|
|
||||||
ORTE_DECLSPEC extern orte_state_base_module_t orte_state_db_module;
|
|
||||||
extern char *orte_state_db_directory;
|
|
||||||
|
|
||||||
END_C_DECLS
|
|
||||||
|
|
||||||
#endif /* ORTE_STATE_DB_H */
|
|
@ -1,38 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
# $COPYRIGHT$
|
|
||||||
#
|
|
||||||
# Additional copyrights may follow
|
|
||||||
#
|
|
||||||
# $HEADER$
|
|
||||||
#
|
|
||||||
|
|
||||||
sources = \
|
|
||||||
state_dbm.h \
|
|
||||||
state_dbm_component.c \
|
|
||||||
state_dbm.c
|
|
||||||
|
|
||||||
# Make the output library in this directory, and name it either
|
|
||||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
|
||||||
# (for static builds).
|
|
||||||
|
|
||||||
if OMPI_BUILD_state_dbm_DSO
|
|
||||||
component_noinst =
|
|
||||||
component_install = mca_state_dbm.la
|
|
||||||
else
|
|
||||||
component_noinst = libmca_state_dbm.la
|
|
||||||
component_install =
|
|
||||||
endif
|
|
||||||
|
|
||||||
mcacomponentdir = $(pkglibdir)
|
|
||||||
mcacomponent_LTLIBRARIES = $(component_install)
|
|
||||||
mca_state_dbm_la_CPPFLAGS = $(state_dbm_CPPFLAGS)
|
|
||||||
mca_state_dbm_la_SOURCES = $(sources)
|
|
||||||
mca_state_dbm_la_LDFLAGS = -module -avoid-version $(state_dbm_LDFLAGS)
|
|
||||||
mca_state_dbm_la_LIBADD = $(state_dbm_LIBS)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = $(component_noinst)
|
|
||||||
libmca_state_dbm_la_CPPFLAGS = $(state_dbm_CPPFLAGS)
|
|
||||||
libmca_state_dbm_la_SOURCES =$(sources)
|
|
||||||
libmca_state_dbm_la_LDFLAGS = -module -avoid-version $(state_dbm_LDFLAGS)
|
|
||||||
libmca_state_dbm_la_LIBADD = $(state_dbm_LIBS)
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ORTE_STATE_DBM_H
|
|
||||||
#define ORTE_STATE_DBM_H
|
|
||||||
|
|
||||||
#include "orte/mca/state/state.h"
|
|
||||||
|
|
||||||
BEGIN_C_DECLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Module open / close
|
|
||||||
*/
|
|
||||||
int orte_state_dbm_component_open(void);
|
|
||||||
int orte_state_dbm_component_close(void);
|
|
||||||
int orte_state_dbm_component_query(mca_base_module_t **module, int *priority);
|
|
||||||
|
|
||||||
|
|
||||||
ORTE_MODULE_DECLSPEC extern orte_state_base_component_t mca_state_dbm_component;
|
|
||||||
ORTE_DECLSPEC extern orte_state_base_module_t orte_state_dbm_module;
|
|
||||||
extern char *orte_state_dbm_directory;
|
|
||||||
|
|
||||||
END_C_DECLS
|
|
||||||
|
|
||||||
#endif /* ORTE_STATE_DBM_H */
|
|
@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
|
|
||||||
* $COPYRIGHT$
|
|
||||||
*
|
|
||||||
* Additional copyrights may follow
|
|
||||||
*
|
|
||||||
* $HEADER$
|
|
||||||
*/
|
|
||||||
/** @file:
|
|
||||||
*
|
|
||||||
* The OpenRTE State Save/Recovery Service
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ORTE_STATE_H
|
|
||||||
#define ORTE_STATE_H
|
|
||||||
|
|
||||||
#include "orte_config.h"
|
|
||||||
#include "orte/types.h"
|
|
||||||
|
|
||||||
#include "opal/mca/mca.h"
|
|
||||||
#include "opal/dss/dss_types.h"
|
|
||||||
|
|
||||||
BEGIN_C_DECLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* API functions
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize the module
|
|
||||||
*/
|
|
||||||
typedef int (*orte_state_base_module_init_fn_t)(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Finalize the module
|
|
||||||
*/
|
|
||||||
typedef int (*orte_state_base_module_finalize_fn_t)(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Save the state of the provided object
|
|
||||||
*/
|
|
||||||
typedef int (*orte_state_base_module_save_fn_t)(void *object, opal_data_type_t type);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the source for recovering state info
|
|
||||||
*/
|
|
||||||
typedef int (*orte_state_base_module_set_recover_source_fn_t)(orte_process_name_t *name);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Recover the state of an object
|
|
||||||
*/
|
|
||||||
typedef int (*orte_state_base_module_recover_fn_t)(void *object, opal_data_type_t type);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* the standard module data structure
|
|
||||||
*/
|
|
||||||
struct orte_state_base_module_1_0_0_t {
|
|
||||||
orte_state_base_module_init_fn_t init;
|
|
||||||
orte_state_base_module_finalize_fn_t finalize;
|
|
||||||
orte_state_base_module_save_fn_t save;
|
|
||||||
orte_state_base_module_set_recover_source_fn_t set_recover_source;
|
|
||||||
orte_state_base_module_recover_fn_t recover;
|
|
||||||
};
|
|
||||||
typedef struct orte_state_base_module_1_0_0_t orte_state_base_module_1_0_0_t;
|
|
||||||
typedef struct orte_state_base_module_1_0_0_t orte_state_base_module_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* the standard component data structure
|
|
||||||
*/
|
|
||||||
struct orte_state_base_component_1_0_0_t {
|
|
||||||
mca_base_component_t base_version;
|
|
||||||
mca_base_component_data_t base_data;
|
|
||||||
};
|
|
||||||
typedef struct orte_state_base_component_1_0_0_t orte_state_base_component_1_0_0_t;
|
|
||||||
typedef struct orte_state_base_component_1_0_0_t orte_state_base_component_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Macro for use in components that are of type state
|
|
||||||
*/
|
|
||||||
#define ORTE_STATE_BASE_VERSION_1_0_0 \
|
|
||||||
MCA_BASE_VERSION_2_0_0, \
|
|
||||||
"state", 1, 0, 0
|
|
||||||
|
|
||||||
/* Global structure for accessing STATE functions */
|
|
||||||
ORTE_DECLSPEC extern orte_state_base_module_t orte_state; /* holds selected module's function pointers */
|
|
||||||
|
|
||||||
END_C_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,4 +1,4 @@
|
|||||||
PROGS = no_op sigusr_trap spin orte_nodename orte_spawn orte_loop_spawn orte_loop_child orte_abort get_limits orte_ring spawn_child orte_tool orte_no_op binom oob_stress iof_stress iof_delay radix orte_barrier orte_mcast opal_interface mcast mcast_recv orte_spin segfault sysinfo orte_exit
|
PROGS = no_op sigusr_trap spin orte_nodename orte_spawn orte_loop_spawn orte_loop_child orte_abort get_limits orte_ring spawn_child orte_tool orte_no_op binom oob_stress iof_stress iof_delay radix orte_barrier orte_mcast opal_interface mcast mcast_recv orte_spin segfault sysinfo orte_exit orte_db
|
||||||
|
|
||||||
all: $(PROGS)
|
all: $(PROGS)
|
||||||
|
|
||||||
|
48
orte/test/system/orte_db.c
Обычный файл
48
orte/test/system/orte_db.c
Обычный файл
@ -0,0 +1,48 @@
|
|||||||
|
/* -*- C -*-
|
||||||
|
*
|
||||||
|
* $HEADER$
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "opal/dss/dss.h"
|
||||||
|
#include "opal/event/event.h"
|
||||||
|
#include "opal/util/output.h"
|
||||||
|
|
||||||
|
#include "orte/util/proc_info.h"
|
||||||
|
#include "orte/util/name_fns.h"
|
||||||
|
#include "orte/runtime/orte_globals.h"
|
||||||
|
#include "orte/runtime/runtime.h"
|
||||||
|
#include "orte/runtime/orte_wait.h"
|
||||||
|
#include "orte/mca/errmgr/errmgr.h"
|
||||||
|
#include "orte/mca/grpcomm/grpcomm.h"
|
||||||
|
#include "orte/mca/db/db.h"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
char hostname[512];
|
||||||
|
pid_t pid;
|
||||||
|
orte_proc_t proc;
|
||||||
|
|
||||||
|
if (0 > (rc = orte_init(&argc, &argv, ORTE_PROC_NON_MPI))) {
|
||||||
|
fprintf(stderr, "orte_db: couldn't init orte - error code %d\n", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
gethostname(hostname, 512);
|
||||||
|
pid = getpid();
|
||||||
|
|
||||||
|
OBJ_CONSTRUCT(&proc, orte_proc_t);
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_db.store("test-insert", &proc, ORTE_PROC))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
if (ORTE_SUCCESS != (rc = orte_db.fetch("test-insert", &proc, ORTE_PROC))) {
|
||||||
|
ORTE_ERROR_LOG(rc);
|
||||||
|
}
|
||||||
|
OBJ_DESTRUCT(&proc);
|
||||||
|
|
||||||
|
orte_finalize();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -58,8 +58,8 @@
|
|||||||
#include "orte/mca/errmgr/base/base.h"
|
#include "orte/mca/errmgr/base/base.h"
|
||||||
#include "orte/mca/grpcomm/grpcomm.h"
|
#include "orte/mca/grpcomm/grpcomm.h"
|
||||||
#include "orte/mca/grpcomm/base/base.h"
|
#include "orte/mca/grpcomm/base/base.h"
|
||||||
#include "orte/mca/state/state.h"
|
#include "orte/mca/db/db.h"
|
||||||
#include "orte/mca/state/base/base.h"
|
#include "orte/mca/db/base/base.h"
|
||||||
#include "orte/mca/ess/ess.h"
|
#include "orte/mca/ess/ess.h"
|
||||||
#include "orte/mca/ess/base/base.h"
|
#include "orte/mca/ess/base/base.h"
|
||||||
#include "orte/mca/notifier/notifier.h"
|
#include "orte/mca/notifier/notifier.h"
|
||||||
@ -329,12 +329,12 @@ void orte_info_open_components(void)
|
|||||||
map->components = &orte_grpcomm_base.components_available;
|
map->components = &orte_grpcomm_base.components_available;
|
||||||
opal_pointer_array_add(&component_map, map);
|
opal_pointer_array_add(&component_map, map);
|
||||||
|
|
||||||
if (ORTE_SUCCESS != orte_state_base_open()) {
|
if (ORTE_SUCCESS != orte_db_base_open()) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
map = OBJ_NEW(orte_info_component_map_t);
|
map = OBJ_NEW(orte_info_component_map_t);
|
||||||
map->type = strdup("state");
|
map->type = strdup("db");
|
||||||
map->components = &orte_state_base_components_available;
|
map->components = &orte_db_base_components_available;
|
||||||
opal_pointer_array_add(&component_map, map);
|
opal_pointer_array_add(&component_map, map);
|
||||||
|
|
||||||
if (ORTE_SUCCESS != orte_ess_base_open()) {
|
if (ORTE_SUCCESS != orte_ess_base_open()) {
|
||||||
@ -502,7 +502,7 @@ void orte_info_close_components()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
(void) orte_grpcomm_base_close();
|
(void) orte_grpcomm_base_close();
|
||||||
(void) orte_state_base_close();
|
(void) orte_db_base_close();
|
||||||
(void) orte_notifier_base_close();
|
(void) orte_notifier_base_close();
|
||||||
(void) orte_ess_base_close();
|
(void) orte_ess_base_close();
|
||||||
(void) orte_show_help_finalize();
|
(void) orte_show_help_finalize();
|
||||||
|
@ -219,7 +219,7 @@ int main(int argc, char *argv[])
|
|||||||
opal_pointer_array_add(&mca_types, "errmgr");
|
opal_pointer_array_add(&mca_types, "errmgr");
|
||||||
opal_pointer_array_add(&mca_types, "ess");
|
opal_pointer_array_add(&mca_types, "ess");
|
||||||
opal_pointer_array_add(&mca_types, "grpcomm");
|
opal_pointer_array_add(&mca_types, "grpcomm");
|
||||||
opal_pointer_array_add(&mca_types, "state");
|
opal_pointer_array_add(&mca_types, "db");
|
||||||
opal_pointer_array_add(&mca_types, "notifier");
|
opal_pointer_array_add(&mca_types, "notifier");
|
||||||
|
|
||||||
/* Execute the desired action(s) */
|
/* Execute the desired action(s) */
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user