1
1

Fix comm_spawn. The problem stems from our use of the existence of an attribute as equivalent to a boolean "true" - in other words, we only confirm the existence of an attribute on a list to indicate something as opposed to looking at its specific value. Hence, we create the attribute with a type of ORTE_UNDEF - which is fine...until we then attempt to store/retrieve that attribute from the registry. In that case, the DSS barks because it treats ORTE_UNDEF as an error.

The only place where we attempt to store/retrieve attributes is in the RMAPS framework in support of comm_spawn. So this is where things broke down. The fix was simply to say "if the attribute data type is ORTE_UNDEF, then treat it like a boolean with value true". Trivial fix - solves problem.

This commit was SVN r14910.
Этот коммит содержится в:
Ralph Castain 2007-06-06 15:16:22 +00:00
родитель b9f8b83442
Коммит 0757467d77

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

@ -596,6 +596,7 @@ int orte_rmaps_base_store_mapping_plan(orte_jobid_t job, opal_list_t *attr_list)
ORTE_RMAPS_BOOKMARK
};
orte_std_cntr_t num_attrs_defd;
bool tval = true;
OPAL_TRACE(2);
@ -637,7 +638,7 @@ int orte_rmaps_base_store_mapping_plan(orte_jobid_t job, opal_list_t *attr_list)
}
} else {
if (ORTE_SUCCESS != (rc = orte_gpr.create_keyval(&(value->keyvals[j]), attr->key,
ORTE_UNDEF, NULL))) {
ORTE_BOOL, &tval))) {
ORTE_ERROR_LOG(rc);
OBJ_RELEASE(value);
return rc;
@ -716,24 +717,13 @@ int orte_rmaps_base_get_mapping_plan(orte_jobid_t job, opal_list_t *attr_list)
for (i=0; i < value->cnt; i++) {
kval = value->keyvals[i];
if (NULL != kval->value) {
if (ORTE_SUCCESS != (rc = orte_rmgr.add_attribute(attr_list, kval->key,
kval->value->type,
kval->value->data,
ORTE_RMGR_ATTR_OVERRIDE))) {
ORTE_ERROR_LOG(rc);
OBJ_RELEASE(value);
return rc;
}
} else {
if (ORTE_SUCCESS != (rc = orte_rmgr.add_attribute(attr_list, kval->key,
ORTE_UNDEF,
NULL,
ORTE_RMGR_ATTR_OVERRIDE))) {
ORTE_ERROR_LOG(rc);
OBJ_RELEASE(value);
return rc;
}
if (ORTE_SUCCESS != (rc = orte_rmgr.add_attribute(attr_list, kval->key,
kval->value->type,
kval->value->data,
ORTE_RMGR_ATTR_OVERRIDE))) {
ORTE_ERROR_LOG(rc);
OBJ_RELEASE(value);
return rc;
}
}