
We recognize that this means other users of OPAL will need to "wrap" the opal_process_name_t if they desire to abstract it in some fashion. This is regrettable, and we are looking at possible alternatives that might mitigate that requirement. Meantime, however, we have to put the needs of the OMPI community first, and are taking this step to restore hetero and SPARC support.
132 строки
4.2 KiB
C
132 строки
4.2 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) 2013-2014 Intel, Inc. All rights reserved.
|
|
* Copyright (c) 2014 Research Organization for Information Science
|
|
* and Technology (RIST). All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
/** @file:
|
|
*/
|
|
|
|
#ifndef MCA_DSTORE_BASE_H
|
|
#define MCA_DSTORE_BASE_H
|
|
|
|
#include "opal_config.h"
|
|
#include "opal/types.h"
|
|
|
|
#include "opal/mca/mca.h"
|
|
#include "opal/mca/base/mca_base_framework.h"
|
|
#include "opal/mca/event/event.h"
|
|
#include "opal/class/opal_hash_table.h"
|
|
#include "opal/class/opal_list.h"
|
|
#include "opal/class/opal_pointer_array.h"
|
|
#include "opal/dss/dss.h"
|
|
#include "opal/util/proc.h"
|
|
|
|
#include "opal/mca/dstore/dstore.h"
|
|
|
|
BEGIN_C_DECLS
|
|
|
|
OPAL_DECLSPEC extern mca_base_framework_t opal_dstore_base_framework;
|
|
|
|
/**
|
|
* Select a dstore module
|
|
*/
|
|
OPAL_DECLSPEC int opal_dstore_base_select(void);
|
|
|
|
/* DSTORE is an oddball framework in that it:
|
|
*
|
|
* has an active storage component that issues handle-specific
|
|
* modules. This is done to provide separate storage areas that
|
|
* are isolated from each other, and thus don't have to worry
|
|
* about overlapping keys
|
|
*
|
|
* a backfill module used to attempt to retrieve data that has
|
|
* been requested, but that the handle-specific storage module
|
|
* does not contain. This is used in situations where data has
|
|
* not been provided at startup, and we need to retrieve it
|
|
* solely on-demand
|
|
*/
|
|
typedef struct {
|
|
opal_dstore_base_component_t *storage_component;
|
|
opal_dstore_base_module_t *backfill_module;
|
|
opal_pointer_array_t handles; // array of open datastore handles
|
|
opal_list_t available_components;
|
|
} opal_dstore_base_t;
|
|
|
|
OPAL_DECLSPEC extern opal_dstore_base_t opal_dstore_base;
|
|
|
|
typedef struct {
|
|
opal_object_t super;
|
|
char *name;
|
|
opal_dstore_base_module_t *module;
|
|
opal_dstore_base_component_t *storage_component;
|
|
} opal_dstore_handle_t;
|
|
OBJ_CLASS_DECLARATION(opal_dstore_handle_t);
|
|
|
|
/**
|
|
* Data for a particular opal process
|
|
* The name association is maintained in the
|
|
* proc_data hash table.
|
|
*/
|
|
typedef struct {
|
|
/** Structure can be put on lists (including in hash tables) */
|
|
opal_list_item_t super;
|
|
bool loaded;
|
|
/* List of opal_value_t structures containing all data
|
|
received from this process, sorted by key. */
|
|
opal_list_t data;
|
|
} opal_dstore_proc_data_t;
|
|
OBJ_CLASS_DECLARATION(opal_dstore_proc_data_t);
|
|
|
|
/**
|
|
* Attribute structure to update tracker object
|
|
* (used in dstore sm component)
|
|
*/
|
|
typedef struct {
|
|
opal_list_item_t super;
|
|
uint32_t jobid;
|
|
char *connection_info;
|
|
} opal_dstore_attr_t;
|
|
OBJ_CLASS_DECLARATION(opal_dstore_attr_t);
|
|
|
|
typedef struct {
|
|
int32_t seg_index;
|
|
uint32_t offset;
|
|
int32_t data_size;
|
|
} meta_info;
|
|
|
|
#define META_OFFSET 65536
|
|
|
|
OPAL_DECLSPEC int opal_dstore_base_open(const char *name, char* desired_components, opal_list_t *attrs);
|
|
OPAL_DECLSPEC int opal_dstore_base_update(int dstorehandle, opal_list_t *attrs);
|
|
OPAL_DECLSPEC int opal_dstore_base_close(int dstorehandle);
|
|
OPAL_DECLSPEC int opal_dstore_base_store(int dstorehandle,
|
|
const opal_process_name_t *id,
|
|
opal_value_t *kv);
|
|
OPAL_DECLSPEC int opal_dstore_base_fetch(int dstorehandle,
|
|
const opal_process_name_t *id,
|
|
const char *key,
|
|
opal_list_t *kvs);
|
|
OPAL_DECLSPEC int opal_dstore_base_remove_data(int dstorehandle,
|
|
const opal_process_name_t *id,
|
|
const char *key);
|
|
OPAL_DECLSPEC int opal_dstore_base_get_handle(int dstorehandle, void **dhdl);
|
|
|
|
/* support */
|
|
OPAL_DECLSPEC opal_dstore_proc_data_t* opal_dstore_base_lookup_proc(opal_proc_table_t *jtable,
|
|
opal_process_name_t id);
|
|
|
|
OPAL_DECLSPEC opal_value_t* opal_dstore_base_lookup_keyval(opal_dstore_proc_data_t *proc_data,
|
|
const char *key);
|
|
|
|
|
|
END_C_DECLS
|
|
|
|
#endif
|