1
1

It is okay for a key not to be found

This commit was SVN r27187.
Этот коммит содержится в:
Ralph Castain 2012-08-30 15:12:23 +00:00
родитель 6dbb7a8493
Коммит efc4a40c8a

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

@ -474,6 +474,9 @@ static int modex(orte_grpcomm_collective_t *coll)
name.vpid = v;
/* everyone must post the following basic keys, so any missing keys
* is an irrecoverable error
*/
rc = pmi_get_proc_attr (name, ORTE_DB_RMLURI, (void **) &rml_uri, &len);
if (ORTE_SUCCESS != rc) {
ORTE_ERROR_LOG(rc);
@ -630,7 +633,13 @@ static int modex(orte_grpcomm_collective_t *coll)
}
free(tmp_val);
/* harvest all other info for keys we know about and store it */
/* harvest all other info for keys we know about and store their
* data - these keys, however, are OPTIONAL as not every process
* will necessarily post the same info. However, we only care
* about the data that matches our own as we can't communicate
* over interfaces we don't have, even if the other guy does.
* So it isn't an error to not find a matching PMI post here
*/
OBJ_CONSTRUCT(&modex_data, opal_list_t);
if (ORTE_SUCCESS != (rc = orte_db.fetch_multiple(ORTE_PROC_MY_NAME, NULL, &modex_data))) {
ORTE_ERROR_LOG(rc);
@ -650,9 +659,21 @@ static int modex(orte_grpcomm_collective_t *coll)
continue;
}
if (ORTE_SUCCESS != (rc = pmi_get_proc_attr(name, kv->key, &tmp_val, &len))) {
if (ORTE_ERR_NOT_FOUND == rc) {
/* okay to be missing - if some layer above truly needs
* this info, then they can deal with the lack of it
* when they query the database and get a "not found"
* response. In some cases, they may decide they can't
* live without it - or they may decide that's just
* fine and continue running. Up to them.
*/
continue;
} else {
/* any other error response IS an error */
ORTE_ERROR_LOG(rc);
return rc;
}
}
OPAL_OUTPUT_VERBOSE((1, orte_grpcomm_base.output,
"%s grpcomm:pmi: got modex value for proc %s key %s[%s] len %d",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),