1
1
openmpi/orte/mca/db/base/db_base_frame.c
Ralph Castain c4c9bc1573 As per the RFC:
http://www.open-mpi.org/community/lists/devel/2014/04/14496.php

Revamp the opal database framework, including renaming it to "dstore" to reflect that it isn't a "database". Move the "db" framework to ORTE for now, soon to move to ORCM

This commit was SVN r31557.
2014-04-29 21:49:23 +00:00

127 строки
3.7 KiB
C

/*
* Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
* Copyright (c) 2014 Intel, 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/runtime/orte_globals.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"
orte_db_API_module_t orte_db = {
orte_db_base_open,
orte_db_base_close,
orte_db_base_store,
orte_db_base_commit,
orte_db_base_fetch,
orte_db_base_remove_data
};
orte_db_base_t orte_db_base;
static bool orte_db_base_create_evbase;
static int orte_db_base_register(mca_base_register_flag_t flags)
{
orte_db_base_create_evbase = false;
mca_base_var_register("orte", "db", "base", "create_evbase",
"Create a separate event base for processing db operations",
MCA_BASE_VAR_TYPE_BOOL, NULL, 0, 0,
OPAL_INFO_LVL_9,
MCA_BASE_VAR_SCOPE_READONLY,
&orte_db_base_create_evbase);
return OPAL_SUCCESS;
}
static int orte_db_base_frame_close(void)
{
orte_db_base_component_t *component;
int i;
orte_db_handle_t *hdl;
/* cleanup the globals */
for (i=0; i < orte_db_base.handles.size; i++) {
if (NULL != (hdl = (orte_db_handle_t*)opal_pointer_array_get_item(&orte_db_base.handles, i))) {
OBJ_RELEASE(hdl);
}
}
OBJ_DESTRUCT(&orte_db_base.handles);
/* cycle across all the active db components and let them cleanup - order
* doesn't matter in this case
*/
while (NULL != (component = (orte_db_base_component_t*)opal_list_remove_first(&orte_db_base.actives))) {
if (NULL != component->finalize) {
component->finalize();
}
}
OBJ_DESTRUCT(&orte_db_base.actives);
return mca_base_framework_components_close(&orte_db_base_framework, NULL);
}
static int orte_db_base_frame_open(mca_base_open_flag_t flags)
{
OBJ_CONSTRUCT(&orte_db_base.actives, opal_list_t);
OBJ_CONSTRUCT(&orte_db_base.handles, opal_pointer_array_t);
opal_pointer_array_init(&orte_db_base.handles, 3, INT_MAX, 1);
if (orte_db_base_create_evbase) {
/* create our own event base */
/* spin off a progress thread for it */
} else {
/* tie us to the orte_event_base */
orte_db_base.ev_base = orte_event_base;
}
/* Open up all available components */
return mca_base_framework_components_open(&orte_db_base_framework, flags);
}
MCA_BASE_FRAMEWORK_DECLARE(orte, db, "ORTE Database Framework",
orte_db_base_register,
orte_db_base_frame_open,
orte_db_base_frame_close,
mca_db_base_static_components, 0);
static void req_con(orte_db_request_t *p)
{
p->properties = NULL;
p->primary_key = NULL;
p->key = NULL;
p->kvs = NULL;
}
OBJ_CLASS_INSTANCE(orte_db_request_t,
opal_object_t,
req_con, NULL);
OBJ_CLASS_INSTANCE(orte_db_handle_t,
opal_object_t,
NULL, NULL);
OBJ_CLASS_INSTANCE(orte_db_base_active_component_t,
opal_list_item_t,
NULL, NULL);