Extend the dstore framework to include a new "update_handle" API so the attributes of an existing handle can be changed. We can't just open a new handle as the upper layers won't know where to find the info. :-(
Этот коммит содержится в:
родитель
1ae34da5e5
Коммит
4d27eb70f2
@ -80,6 +80,7 @@ typedef struct {
|
||||
OBJ_CLASS_DECLARATION(opal_dstore_proc_data_t);
|
||||
|
||||
OPAL_DECLSPEC int opal_dstore_base_open(const char *name, 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_identifier_t *id,
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
opal_dstore_base_API_t opal_dstore = {
|
||||
opal_dstore_base_open,
|
||||
opal_dstore_base_update,
|
||||
opal_dstore_base_close,
|
||||
opal_dstore_base_store,
|
||||
opal_dstore_base_fetch,
|
||||
|
@ -49,6 +49,25 @@ int opal_dstore_base_open(const char *name, opal_list_t *attrs)
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
|
||||
int opal_dstore_base_update(int dstorehandle, opal_list_t *attrs)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (dstorehandle < 0) {
|
||||
return OPAL_ERR_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
if (NULL == opal_dstore_base.storage_component->update_handle) {
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
if (OPAL_SUCCESS != (rc = opal_dstore_base.storage_component->update_handle(dstorehandle, attrs))) {
|
||||
OPAL_ERROR_LOG(rc);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int opal_dstore_base_close(int dstorehandle)
|
||||
{
|
||||
opal_dstore_handle_t *hdl;
|
||||
|
@ -66,6 +66,15 @@ OPAL_DECLSPEC extern int opal_dstore_nonpeer;
|
||||
typedef int (*opal_dstore_base_API_open_fn_t)(const char *name,
|
||||
opal_list_t *attributes);
|
||||
|
||||
/*
|
||||
* Update an existing handle
|
||||
*
|
||||
* Sometimes an existing handle requires an update to its attributes, so
|
||||
* provide an API for doing so
|
||||
*/
|
||||
typedef int (*opal_dstore_base_API_update_fn_t)(int dstorehandle,
|
||||
opal_list_t *attributes);
|
||||
|
||||
/*
|
||||
* Close a database handle
|
||||
*
|
||||
@ -110,6 +119,7 @@ typedef int (*opal_dstore_base_API_remove_fn_t)(int dstorehandle,
|
||||
*/
|
||||
typedef struct {
|
||||
opal_dstore_base_API_open_fn_t open;
|
||||
opal_dstore_base_API_update_fn_t update;
|
||||
opal_dstore_base_API_close_fn_t close;
|
||||
opal_dstore_base_API_store_fn_t store;
|
||||
opal_dstore_base_API_fetch_fn_t fetch;
|
||||
@ -174,6 +184,9 @@ typedef struct {
|
||||
/* create and return a datastore module */
|
||||
typedef opal_dstore_base_module_t* (*mca_dstore_base_component_create_hdl_fn_t)(opal_list_t *attributes);
|
||||
|
||||
/* update an existing handle */
|
||||
typedef int (*mca_dstore_base_component_update_hdl_fn_t)(int hdl, opal_list_t *attributes);
|
||||
|
||||
/* provide a chance for the component to finalize */
|
||||
typedef void (*mca_dstore_base_component_finalize_fn_t)(void);
|
||||
|
||||
@ -181,6 +194,7 @@ typedef struct {
|
||||
mca_base_component_t base_version;
|
||||
mca_base_component_data_t base_data;
|
||||
mca_dstore_base_component_create_hdl_fn_t create_handle;
|
||||
mca_dstore_base_component_update_hdl_fn_t update_handle;
|
||||
mca_dstore_base_component_finalize_fn_t finalize;
|
||||
} opal_dstore_base_component_t;
|
||||
|
||||
|
@ -53,6 +53,7 @@ opal_dstore_base_component_t mca_dstore_hash_component = {
|
||||
MCA_BASE_METADATA_PARAM_CHECKPOINT
|
||||
},
|
||||
component_create,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user