1
1

Merge pull request #2301 from rhc54/topic/update

Update PMIx to latest master tarball. Ensure we set the HNP name for …
Этот коммит содержится в:
rhc54 2016-10-26 16:42:15 -07:00 коммит произвёл GitHub
родитель 60099c9d0e f298f294e1
Коммит 2b18044051
10 изменённых файлов: 129 добавлений и 59 удалений

Просмотреть файл

@ -30,7 +30,7 @@ greek=
# command, or with the date (if "git describe" fails) in the form of
# "date<date>".
repo_rev=git967f3e3
repo_rev=git38811ec
# If tarball_version is not empty, it is used as the version string in
# the tarball filename, regardless of all other versions listed in
@ -44,7 +44,7 @@ tarball_version=
# The date when this release was created
date="Oct 20, 2016"
date="Oct 26, 2016"
# The shared library version of each of PMIx's public libraries.
# These versions are maintained in accordance with the "Library

Просмотреть файл

@ -247,9 +247,10 @@ PMIX_EXPORT int PMI_Get_size(int *size)
{
pmix_status_t rc = PMIX_SUCCESS;
pmix_value_t *val;
pmix_proc_t proc;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI_CHECK();
@ -257,9 +258,6 @@ PMIX_EXPORT int PMI_Get_size(int *size)
return PMI_ERR_INVALID_ARG;
}
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
proc.rank = PMIX_RANK_UNDEF;
/* set controlling parameters
* PMIX_OPTIONAL - expect that these keys should be available on startup
*/
@ -293,9 +291,10 @@ PMIX_EXPORT int PMI_Get_universe_size(int *size)
{
pmix_status_t rc = PMIX_SUCCESS;
pmix_value_t *val;
pmix_proc_t proc;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI_CHECK();
@ -303,9 +302,6 @@ PMIX_EXPORT int PMI_Get_universe_size(int *size)
return PMI_ERR_INVALID_ARG;
}
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
proc.rank = PMIX_RANK_UNDEF;
/* set controlling parameters
* PMIX_OPTIONAL - expect that these keys should be available on startup
*/
@ -327,9 +323,10 @@ PMIX_EXPORT int PMI_Get_appnum(int *appnum)
{
pmix_status_t rc = PMIX_SUCCESS;
pmix_value_t *val;
pmix_proc_t proc;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI_CHECK();
@ -337,9 +334,6 @@ PMIX_EXPORT int PMI_Get_appnum(int *appnum)
return PMI_ERR_INVALID_ARG;
}
(void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
proc.rank = PMIX_RANK_UNDEF;
/* set controlling parameters
* PMIX_OPTIONAL - expect that these keys should be available on startup
*/
@ -481,6 +475,8 @@ PMIX_EXPORT int PMI_Get_clique_size(int *size)
pmix_value_t *val;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI_CHECK();
@ -494,7 +490,7 @@ PMIX_EXPORT int PMI_Get_clique_size(int *size)
PMIX_INFO_CONSTRUCT(&info[0]);
PMIX_INFO_LOAD(&info[0], PMIX_OPTIONAL, &val_optinal, PMIX_BOOL);
rc = PMIx_Get(&myproc, PMIX_LOCAL_SIZE, info, 1, &val);
rc = PMIx_Get(&proc, PMIX_LOCAL_SIZE, info, 1, &val);
if (PMIX_SUCCESS == rc) {
rc = convert_int(size, val);
PMIX_VALUE_RELEASE(val);
@ -511,6 +507,8 @@ PMIX_EXPORT int PMI_Get_clique_ranks(int ranks[], int length)
pmix_value_t *val;
char **rks;
int i;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI_CHECK();
@ -518,7 +516,7 @@ PMIX_EXPORT int PMI_Get_clique_ranks(int ranks[], int length)
return PMI_ERR_INVALID_ARGS;
}
rc = PMIx_Get(&myproc, PMIX_LOCAL_PEERS, NULL, 0, &val);
rc = PMIx_Get(&proc, PMIX_LOCAL_PEERS, NULL, 0, &val);
if (PMIX_SUCCESS == rc) {
/* kv will contain a string of comma-separated
* ranks on my node */

Просмотреть файл

@ -55,9 +55,10 @@ PMIX_EXPORT int PMI2_Init(int *spawned, int *size, int *rank, int *appnum)
{
pmix_status_t rc = PMIX_SUCCESS;
pmix_value_t *val;
pmix_proc_t proc;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
if (PMIX_SUCCESS != PMIx_Init(&myproc, NULL, 0)) {
return PMI2_ERR_INIT;
@ -66,10 +67,6 @@ PMIX_EXPORT int PMI2_Init(int *spawned, int *size, int *rank, int *appnum)
/* get the rank */
*rank = myproc.rank;
/* getting internal key requires special rank value */
memcpy(&proc, &myproc, sizeof(myproc));
proc.rank = PMIX_RANK_UNDEF;
/* set controlling parameters
* PMIX_OPTIONAL - expect that these keys should be available on startup
*/
@ -257,6 +254,9 @@ PMIX_EXPORT int PMI2_Info_GetSize(int *size)
pmix_value_t *val;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_WILDCARD;
PMI2_CHECK();
@ -270,7 +270,7 @@ PMIX_EXPORT int PMI2_Info_GetSize(int *size)
PMIX_INFO_CONSTRUCT(&info[0]);
PMIX_INFO_LOAD(&info[0], PMIX_OPTIONAL, &val_optinal, PMIX_BOOL);
if (PMIX_SUCCESS == PMIx_Get(&myproc, PMIX_LOCAL_SIZE, info, 1, &val)) {
if (PMIX_SUCCESS == PMIx_Get(&proc, PMIX_LOCAL_SIZE, info, 1, &val)) {
rc = convert_int(size, val);
PMIX_VALUE_RELEASE(val);
}
@ -426,6 +426,8 @@ PMIX_EXPORT int PMI2_Info_GetNodeAttr(const char name[],
pmix_value_t *val;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_UNDEF;
PMI2_CHECK();
@ -440,7 +442,8 @@ PMIX_EXPORT int PMI2_Info_GetNodeAttr(const char name[],
PMIX_INFO_LOAD(&info[0], PMIX_OPTIONAL, &val_optinal, PMIX_BOOL);
*found = 0;
rc = PMIx_Get(&myproc, name, info, 1, &val);
/* TODO: does PMI2's "name" makes sense to PMIx? */
rc = PMIx_Get(&proc, name, info, 1, &val);
if (PMIX_SUCCESS == rc && NULL != val) {
if (PMIX_STRING != val->type) {
rc = PMIX_ERROR;
@ -486,9 +489,10 @@ PMIX_EXPORT int PMI2_Info_GetJobAttr(const char name[], char value[], int valuel
{
pmix_status_t rc = PMIX_SUCCESS;
pmix_value_t *val;
pmix_proc_t proc;
pmix_info_t info[1];
bool val_optinal = 1;
pmix_proc_t proc = myproc;
proc.rank = PMIX_RANK_UNDEF;
PMI2_CHECK();
@ -496,10 +500,6 @@ PMIX_EXPORT int PMI2_Info_GetJobAttr(const char name[], char value[], int valuel
return PMI2_ERR_INVALID_ARG;
}
/* getting internal key requires special rank value */
memcpy(&proc, &myproc, sizeof(myproc));
proc.rank = PMIX_RANK_UNDEF;
/* set controlling parameters
* PMIX_OPTIONAL - expect that these keys should be available on startup
*/

Просмотреть файл

@ -445,17 +445,19 @@ PMIX_EXPORT pmix_status_t PMIx_Finalize(const pmix_info_t info[], size_t ninfo)
"pmix:client finalize sync received");
}
PMIX_DESTRUCT(&pmix_client_globals.myserver);
pmix_rte_finalize();
PMIX_DESTRUCT(&pmix_client_globals.myserver);
PMIX_LIST_DESTRUCT(&pmix_client_globals.pending_requests);
PMIX_LIST_DESTRUCT(&pmix_client_globals.pending_requests);
if (0 <= pmix_client_globals.myserver.sd) {
if (0 <= pmix_client_globals.myserver.sd) {
CLOSE_THE_SOCKET(pmix_client_globals.myserver.sd);
}
pmix_bfrop_close();
pmix_class_finalize();
return PMIX_SUCCESS;
}
@ -529,8 +531,8 @@ PMIX_EXPORT pmix_status_t PMIx_Abort(int flag, const char msg[],
return PMIX_SUCCESS;
}
static void _putfn(int sd, short args, void *cbdata)
{
static void _putfn(int sd, short args, void *cbdata)
{
pmix_cb_t *cb = (pmix_cb_t*)cbdata;
pmix_status_t rc;
pmix_kval_t *kv;
@ -552,21 +554,10 @@ PMIX_EXPORT pmix_status_t PMIx_Abort(int flag, const char msg[],
/* shouldn't be possible */
goto done;
}
#if defined(PMIX_ENABLE_DSTORE) && (PMIX_ENABLE_DSTORE == 1)
/* TODO: It is not safe to store data on a client side
* There is a possibility to get server/client conflict.
* Do nothing here misses PMIx_Get/PMIx_Put flow (w/o PMIx_Commit)
*/
/*
if (PMIX_SUCCESS != (rc = pmix_dstore_store(ns->nspace, pmix_globals.myid.rank, kv))) {
PMIX_ERROR_LOG(rc);
}
*/
#else
if (PMIX_SUCCESS != (rc = pmix_hash_store(&ns->modex, pmix_globals.myid.rank, kv))) {
PMIX_ERROR_LOG(rc);
}
#endif /* PMIX_ENABLE_DSTORE */
/* pack the cache that matches the scope - global scope needs
* to go into both local and remote caches */

Просмотреть файл

@ -571,7 +571,32 @@ static void _getnbfn(int fd, short flags, void *cbdata)
/* otherwise, the data must be something they "put" */
#if defined(PMIX_ENABLE_DSTORE) && (PMIX_ENABLE_DSTORE == 1)
rc = pmix_dstore_fetch(nptr->nspace, cb->rank, cb->key, &val);
rc = PMIX_ERR_PROC_ENTRY_NOT_FOUND;
if ((0 == strncmp(pmix_globals.myid.nspace, nptr->nspace, PMIX_MAX_NSLEN + 1)) &&
((pmix_globals.myid.rank == cb->rank) || (PMIX_RANK_UNDEF == cb->rank))){
/* if we asking the data about this or undefined process -
check local hash table first. All the data passed through
PMIx_Put settle down there */
rc = pmix_hash_fetch(&nptr->modex, pmix_globals.myid.rank, cb->key, &val);
assert( (PMIX_SUCCESS == rc) || (PMIX_ERR_PROC_ENTRY_NOT_FOUND == rc) ||
(PMIX_ERR_NOT_FOUND == rc) );
if( PMIX_SUCCESS != rc ){
if(pmix_globals.myid.rank == cb->rank){
rc = PMIX_ERR_NOT_FOUND;
}
}
/* in else case we supposed to get PMIX_ERR_PROC_ENTRY_NOT_FOUND because
we don't push data from the remote processes into the dstore */
}
/* try to take it from dstore */
if( PMIX_ERR_PROC_ENTRY_NOT_FOUND == rc ){
/* Two option possible here:
- we asking the key from UNDEF process and local proc
haven't pushed this data
- we askin the key from the particular process which is not us.
*/
rc = pmix_dstore_fetch(nptr->nspace, cb->rank, cb->key, &val);
}
#else
rc = pmix_hash_fetch(&nptr->modex, cb->rank, cb->key, &val);
#endif /* PMIX_ENABLE_DSTORE */

Просмотреть файл

@ -12,7 +12,7 @@
* All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, Inc. All rights reserved.
* Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science
* Copyright (c) 2015-2016 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* $COPYRIGHT$
*
@ -32,6 +32,7 @@
#endif
#include "src/class/pmix_list.h"
#include "src/mca/base/base.h"
#include "src/mca/psec/base/base.h"
/*
@ -43,33 +44,37 @@
#include "src/mca/psec/base/static-components.h"
/* Instantiate the global vars */
pmix_psec_globals_t pmix_psec_globals = {0};
pmix_psec_globals_t pmix_psec_globals = {{{0}}};
static pmix_status_t pmix_psec_close(void)
{
pmix_psec_base_active_module_t *active;
pmix_psec_base_active_module_t *active, *prev;
if (!pmix_psec_globals.initialized) {
return PMIX_SUCCESS;
}
pmix_psec_globals.initialized = false;
PMIX_LIST_FOREACH(active, &pmix_psec_globals.actives, pmix_psec_base_active_module_t) {
PMIX_LIST_FOREACH_SAFE(active, prev, &pmix_psec_globals.actives, pmix_psec_base_active_module_t) {
pmix_list_remove_item(&pmix_psec_globals.actives, &active->super);
if (NULL != active->component->finalize) {
active->component->finalize();
}
PMIX_RELEASE(active);
}
PMIX_DESTRUCT(&pmix_psec_globals.actives);
return PMIX_SUCCESS;
return pmix_mca_base_framework_components_close(&pmix_psec_base_framework, NULL);
}
static pmix_status_t pmix_psec_open(pmix_mca_base_open_flag_t flags)
{
/* initialize globals */
pmix_psec_globals.initialized = true;
PMIX_CONSTRUCT(&pmix_psec_globals.actives, pmix_list_t);
return PMIX_SUCCESS;
/* initialize globals */
pmix_psec_globals.initialized = true;
PMIX_CONSTRUCT(&pmix_psec_globals.actives, pmix_list_t);
/* Open up all available components */
return pmix_mca_base_framework_components_open(&pmix_psec_base_framework, flags);
}
PMIX_MCA_BASE_FRAMEWORK_DECLARE(pmix, psec, "PMIx Security Operations",

Просмотреть файл

@ -66,11 +66,17 @@ void pmix_rte_finalize(void)
if (!pmix_globals.external_evbase) {
/* stop the progress thread */
(void)pmix_progress_thread_finalize(NULL);
(void)pmix_progress_thread_stop(NULL);
}
/* cleanup communications */
pmix_usock_finalize();
if (!pmix_globals.external_evbase) {
/* finalize the progress thread */
(void)pmix_progress_thread_finalize(NULL);
}
if (PMIX_PROC_SERVER != pmix_globals.proc_type &&
0 <= pmix_client_globals.myserver.sd) {
CLOSE_THE_SOCKET(pmix_client_globals.myserver.sd);
@ -82,6 +88,8 @@ void pmix_rte_finalize(void)
/* close the security framework */
(void)pmix_mca_base_framework_close(&pmix_psec_base_framework);
/* finalize the mca */
(void)pmix_mca_base_close();
/* Clear out all the registered MCA params */
pmix_deregister_params();
pmix_mca_base_var_finalize();

Просмотреть файл

@ -243,7 +243,7 @@ pmix_event_base_t *pmix_progress_thread_init(const char *name)
return trk->ev_base;
}
int pmix_progress_thread_finalize(const char *name)
int pmix_progress_thread_stop(const char *name)
{
pmix_progress_tracker_t *trk;
@ -271,6 +271,32 @@ int pmix_progress_thread_finalize(const char *name)
if (trk->ev_active) {
stop_progress_engine(trk);
}
}
}
return PMIX_ERR_NOT_FOUND;
}
int pmix_progress_thread_finalize(const char *name)
{
pmix_progress_tracker_t *trk;
if (!inited) {
/* nothing we can do */
return PMIX_ERR_NOT_FOUND;
}
if (NULL == name) {
name = shared_thread_name;
}
/* find the specified engine */
PMIX_LIST_FOREACH(trk, &tracking, pmix_progress_tracker_t) {
if (0 == strcmp(name, trk->name)) {
/* If the refcount is still above 0, we're done here */
if (trk->refcount > 0) {
return PMIX_SUCCESS;
}
pmix_list_remove_item(&tracking, &trk->super);
PMIX_RELEASE(trk);

Просмотреть файл

@ -30,16 +30,28 @@
pmix_event_base_t *pmix_progress_thread_init(const char *name);
/**
* Finalize a progress thread name (reference counted).
* Stop a progress thread name (reference counted).
*
* Once this function is invoked as many times as
* pmix_progress_thread_init() was invoked on this name (or NULL), the
* progress function is shut down and the event base associated with
* progress function is shut down.
* it is destroyed.
*
* Will return PMIX_ERR_NOT_FOUND if the progress thread name does not
* exist; PMIX_SUCCESS otherwise.
*/
int pmix_progress_thread_stop(const char *name);
/**
* Finalize a progress thread name (reference counted).
*
* Once this function is invoked after pmix_progress_thread_stop() has been called
* as many times as pmix_progress_thread_init() was invoked on this name (or NULL),
* the event base associated with it is destroyed.
*
* Will return PMIX_ERR_NOT_FOUND if the progress thread name does not
* exist; PMIX_SUCCESS otherwise.
*/
int pmix_progress_thread_finalize(const char *name);
/**

Просмотреть файл

@ -188,6 +188,11 @@ int orte_ess_base_orted_setup(char **hosts)
error = "opal_pstat_base_select";
goto error;
}
/* define the HNP name */
ORTE_PROC_MY_HNP->jobid = ORTE_PROC_MY_NAME->jobid;
ORTE_PROC_MY_HNP->vpid = 0;
/* open and setup the state machine */
if (ORTE_SUCCESS != (ret = mca_base_framework_open(&orte_state_base_framework, 0))) {
ORTE_ERROR_LOG(ret);