1
1

All other layers to register their own print-attribute functions so we can maintain pretty-print capabilities as the attributes are extended.

Этот коммит содержится в:
Ralph Castain 2014-11-19 09:36:47 -08:00
родитель 37593b232d
Коммит bb91517349
2 изменённых файлов: 207 добавлений и 139 удалений

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

@ -19,13 +19,26 @@
#include "orte/util/attr.h" #include "orte/util/attr.h"
#define MAX_CONVERTERS 5
#define MAX_CONVERTER_PROJECT_LEN 10
typedef struct {
int init;
char project[MAX_CONVERTER_PROJECT_LEN];
orte_attribute_key_t key_base;
orte_attribute_key_t key_max;
orte_attr2str_fn_t converter;
} orte_attr_converter_t;
/* all default to NULL */
static orte_attr_converter_t converters[MAX_CONVERTERS];
static int orte_attr_unload(orte_attribute_t *kv, static int orte_attr_unload(orte_attribute_t *kv,
void **data, opal_data_type_t type); void **data, opal_data_type_t type);
static int orte_attr_load(orte_attribute_t *kv, static int orte_attr_load(orte_attribute_t *kv,
void *data, opal_data_type_t type); void *data, opal_data_type_t type);
bool orte_get_attribute(opal_list_t *attributes, bool orte_get_attribute(opal_list_t *attributes,
orte_attribute_key_t key, orte_attribute_key_t key,
void **data, opal_data_type_t type) void **data, opal_data_type_t type)
@ -94,150 +107,191 @@ void orte_remove_attribute(opal_list_t *attributes, orte_attribute_key_t key)
} }
} }
int orte_attr_register(const char *project,
orte_attribute_key_t key_base,
orte_attribute_key_t key_max,
orte_attr2str_fn_t converter)
{
int i;
for (i = 0 ; i < MAX_CONVERTERS ; ++i) {
if (0 == converters[i].init) {
converters[i].init = 1;
strncpy(converters[i].project, project, MAX_CONVERTER_PROJECT_LEN);
converters[i].project[MAX_CONVERTER_PROJECT_LEN-1] = '\0';
converters[i].key_base = key_base;
converters[i].key_max = key_max;
converters[i].converter = converter;
return ORTE_SUCCESS;
}
}
return ORTE_ERR_OUT_OF_RESOURCE;
}
const char *orte_attr_key_to_str(orte_attribute_key_t key) const char *orte_attr_key_to_str(orte_attribute_key_t key)
{ {
switch(key) { int i;
case ORTE_APP_HOSTFILE:
return "APP-HOSTFILE"; if (ORTE_ATTR_KEY_BASE < key &&
case ORTE_APP_ADD_HOSTFILE: key < ORTE_ATTR_KEY_MAX) {
return "APP-ADD-HOSTFILE"; /* belongs to ORTE, so we handle it */
case ORTE_APP_DASH_HOST: switch(key) {
return "APP-DASH-HOST"; case ORTE_APP_HOSTFILE:
case ORTE_APP_ADD_HOST: return "APP-HOSTFILE";
return "APP-ADD-HOST"; case ORTE_APP_ADD_HOSTFILE:
case ORTE_APP_USER_CWD: return "APP-ADD-HOSTFILE";
return "APP-USER-CWD"; case ORTE_APP_DASH_HOST:
case ORTE_APP_SSNDIR_CWD: return "APP-DASH-HOST";
return "APP-USE-SESSION-DIR-AS-CWD"; case ORTE_APP_ADD_HOST:
case ORTE_APP_PRELOAD_BIN: return "APP-ADD-HOST";
return "APP-PRELOAD-BIN"; case ORTE_APP_USER_CWD:
case ORTE_APP_PRELOAD_FILES: return "APP-USER-CWD";
return "APP-PRELOAD-FILES"; case ORTE_APP_SSNDIR_CWD:
case ORTE_APP_SSTORE_LOAD: return "APP-USE-SESSION-DIR-AS-CWD";
return "APP-SSTORE-LOAD"; case ORTE_APP_PRELOAD_BIN:
case ORTE_APP_RECOV_DEF: return "APP-PRELOAD-BIN";
return "APP-RECOVERY-DEFINED"; case ORTE_APP_PRELOAD_FILES:
case ORTE_APP_MAX_RESTARTS: return "APP-PRELOAD-FILES";
return "APP-MAX-RESTARTS"; case ORTE_APP_SSTORE_LOAD:
case ORTE_APP_MIN_NODES: return "APP-SSTORE-LOAD";
return "APP-MIN-NODES"; case ORTE_APP_RECOV_DEF:
case ORTE_APP_MANDATORY: return "APP-RECOVERY-DEFINED";
return "APP-NODES-MANDATORY"; case ORTE_APP_MAX_RESTARTS:
case ORTE_APP_MAX_PPN: return "APP-MAX-RESTARTS";
return "APP-MAX-PPN"; case ORTE_APP_MIN_NODES:
case ORTE_APP_PREFIX_DIR: return "APP-MIN-NODES";
return "APP-PREFIX-DIR"; case ORTE_APP_MANDATORY:
return "APP-NODES-MANDATORY";
case ORTE_APP_MAX_PPN:
return "APP-MAX-PPN";
case ORTE_APP_PREFIX_DIR:
return "APP-PREFIX-DIR";
case ORTE_NODE_USERNAME: case ORTE_NODE_USERNAME:
return "NODE-USERNAME"; return "NODE-USERNAME";
case ORTE_NODE_LAUNCH_ID: case ORTE_NODE_LAUNCH_ID:
return "NODE-LAUNCHID"; return "NODE-LAUNCHID";
case ORTE_NODE_HOSTID: case ORTE_NODE_HOSTID:
return "NODE-HOSTID"; return "NODE-HOSTID";
case ORTE_NODE_ALIAS: case ORTE_NODE_ALIAS:
return "NODE-ALIAS"; return "NODE-ALIAS";
case ORTE_NODE_SERIAL_NUMBER: case ORTE_NODE_SERIAL_NUMBER:
return "NODE-SERIAL-NUM"; return "NODE-SERIAL-NUM";
case ORTE_JOB_LAUNCH_MSG_SENT: case ORTE_JOB_LAUNCH_MSG_SENT:
return "JOB-LAUNCH-MSG-SENT"; return "JOB-LAUNCH-MSG-SENT";
case ORTE_JOB_LAUNCH_MSG_RECVD: case ORTE_JOB_LAUNCH_MSG_RECVD:
return "JOB-LAUNCH-MSG-RECVD"; return "JOB-LAUNCH-MSG-RECVD";
case ORTE_JOB_MAX_LAUNCH_MSG_RECVD: case ORTE_JOB_MAX_LAUNCH_MSG_RECVD:
return "JOB-MAX-LAUNCH-MSG-RECVD"; return "JOB-MAX-LAUNCH-MSG-RECVD";
case ORTE_JOB_FILE_MAPS: case ORTE_JOB_FILE_MAPS:
return "JOB-FILE-MAPS"; return "JOB-FILE-MAPS";
case ORTE_JOB_CKPT_STATE: case ORTE_JOB_CKPT_STATE:
return "JOB-CKPT-STATE"; return "JOB-CKPT-STATE";
case ORTE_JOB_SNAPSHOT_REF: case ORTE_JOB_SNAPSHOT_REF:
return "JOB-SNAPSHOT-REF"; return "JOB-SNAPSHOT-REF";
case ORTE_JOB_SNAPSHOT_LOC: case ORTE_JOB_SNAPSHOT_LOC:
return "JOB-SNAPSHOT-LOC"; return "JOB-SNAPSHOT-LOC";
case ORTE_JOB_SNAPC_INIT_BAR: case ORTE_JOB_SNAPC_INIT_BAR:
return "JOB-SNAPC-INIT-BARRIER-ID"; return "JOB-SNAPC-INIT-BARRIER-ID";
case ORTE_JOB_SNAPC_FINI_BAR: case ORTE_JOB_SNAPC_FINI_BAR:
return "JOB-SNAPC-FINI-BARRIER-ID"; return "JOB-SNAPC-FINI-BARRIER-ID";
case ORTE_JOB_NUM_NONZERO_EXIT: case ORTE_JOB_NUM_NONZERO_EXIT:
return "JOB-NUM-NONZERO-EXIT"; return "JOB-NUM-NONZERO-EXIT";
case ORTE_JOB_FAILURE_TIMER_EVENT: case ORTE_JOB_FAILURE_TIMER_EVENT:
return "JOB-FAILURE-TIMER-EVENT"; return "JOB-FAILURE-TIMER-EVENT";
case ORTE_JOB_ABORTED_PROC: case ORTE_JOB_ABORTED_PROC:
return "JOB-ABORTED-PROC"; return "JOB-ABORTED-PROC";
case ORTE_JOB_MAPPER: case ORTE_JOB_MAPPER:
return "JOB-MAPPER"; return "JOB-MAPPER";
case ORTE_JOB_REDUCER: case ORTE_JOB_REDUCER:
return "JOB-REDUCER"; return "JOB-REDUCER";
case ORTE_JOB_COMBINER: case ORTE_JOB_COMBINER:
return "JOB-COMBINER"; return "JOB-COMBINER";
case ORTE_JOB_INDEX_ARGV: case ORTE_JOB_INDEX_ARGV:
return "JOB-INDEX-ARGV"; return "JOB-INDEX-ARGV";
case ORTE_JOB_NO_VM: case ORTE_JOB_NO_VM:
return "JOB-NO-VM"; return "JOB-NO-VM";
case ORTE_JOB_SPIN_FOR_DEBUG: case ORTE_JOB_SPIN_FOR_DEBUG:
return "JOB-SPIN-FOR-DEBUG"; return "JOB-SPIN-FOR-DEBUG";
case ORTE_JOB_CONTINUOUS_OP: case ORTE_JOB_CONTINUOUS_OP:
return "JOB-CONTINUOUS-OP"; return "JOB-CONTINUOUS-OP";
case ORTE_JOB_RECOVER_DEFINED: case ORTE_JOB_RECOVER_DEFINED:
return "JOB-RECOVERY-DEFINED"; return "JOB-RECOVERY-DEFINED";
case ORTE_JOB_ENABLE_RECOVERY: case ORTE_JOB_ENABLE_RECOVERY:
return "JOB-ENABLE-RECOVERY"; return "JOB-ENABLE-RECOVERY";
case ORTE_JOB_NON_ORTE_JOB: case ORTE_JOB_NON_ORTE_JOB:
return "JOB-NON-ORTE-JOB"; return "JOB-NON-ORTE-JOB";
case ORTE_JOB_STDOUT_TARGET: case ORTE_JOB_STDOUT_TARGET:
return "JOB-STDOUT-TARGET"; return "JOB-STDOUT-TARGET";
case ORTE_JOB_POWER: case ORTE_JOB_POWER:
return "JOB-POWER"; return "JOB-POWER";
case ORTE_JOB_MAX_FREQ: case ORTE_JOB_MAX_FREQ:
return "JOB-MAX_FREQ"; return "JOB-MAX_FREQ";
case ORTE_JOB_MIN_FREQ: case ORTE_JOB_MIN_FREQ:
return "JOB-MIN_FREQ"; return "JOB-MIN_FREQ";
case ORTE_JOB_GOVERNOR: case ORTE_JOB_GOVERNOR:
return "JOB-FREQ-GOVERNOR"; return "JOB-FREQ-GOVERNOR";
case ORTE_JOB_FAIL_NOTIFIED: case ORTE_JOB_FAIL_NOTIFIED:
return "JOB-FAIL-NOTIFIED"; return "JOB-FAIL-NOTIFIED";
case ORTE_JOB_TERM_NOTIFIED: case ORTE_JOB_TERM_NOTIFIED:
return "JOB-TERM-NOTIFIED"; return "JOB-TERM-NOTIFIED";
case ORTE_JOB_PEER_MODX_ID: case ORTE_JOB_PEER_MODX_ID:
return "JOB-PEER-MODX-ID"; return "JOB-PEER-MODX-ID";
case ORTE_JOB_INIT_BAR_ID: case ORTE_JOB_INIT_BAR_ID:
return "JOB-INIT-BAR-ID"; return "JOB-INIT-BAR-ID";
case ORTE_JOB_FINI_BAR_ID: case ORTE_JOB_FINI_BAR_ID:
return "JOB-FINI-BAR-ID"; return "JOB-FINI-BAR-ID";
case ORTE_JOB_FWDIO_TO_TOOL: case ORTE_JOB_FWDIO_TO_TOOL:
return "JOB-FWD-IO-TO-TOOL"; return "JOB-FWD-IO-TO-TOOL";
case ORTE_PROC_NOBARRIER: case ORTE_PROC_NOBARRIER:
return "PROC-NOBARRIER"; return "PROC-NOBARRIER";
case ORTE_PROC_CPU_BITMAP: case ORTE_PROC_CPU_BITMAP:
return "PROC-CPU-BITMAP"; return "PROC-CPU-BITMAP";
case ORTE_PROC_HWLOC_LOCALE: case ORTE_PROC_HWLOC_LOCALE:
return "PROC-HWLOC-LOCALE"; return "PROC-HWLOC-LOCALE";
case ORTE_PROC_HWLOC_BOUND: case ORTE_PROC_HWLOC_BOUND:
return "PROC-HWLOC-BOUND"; return "PROC-HWLOC-BOUND";
case ORTE_PROC_PRIOR_NODE: case ORTE_PROC_PRIOR_NODE:
return "PROC-PRIOR-NODE"; return "PROC-PRIOR-NODE";
case ORTE_PROC_NRESTARTS: case ORTE_PROC_NRESTARTS:
return "PROC-NUM-RESTARTS"; return "PROC-NUM-RESTARTS";
case ORTE_PROC_RESTART_TIME: case ORTE_PROC_RESTART_TIME:
return "PROC-RESTART-TIME"; return "PROC-RESTART-TIME";
case ORTE_PROC_FAST_FAILS: case ORTE_PROC_FAST_FAILS:
return "PROC-FAST-FAILS"; return "PROC-FAST-FAILS";
case ORTE_PROC_CKPT_STATE: case ORTE_PROC_CKPT_STATE:
return "PROC-CKPT-STATE"; return "PROC-CKPT-STATE";
case ORTE_PROC_SNAPSHOT_REF: case ORTE_PROC_SNAPSHOT_REF:
return "PROC-SNAPHOT-REF"; return "PROC-SNAPHOT-REF";
case ORTE_PROC_SNAPSHOT_LOC: case ORTE_PROC_SNAPSHOT_LOC:
return "PROC-SNAPSHOT-LOC"; return "PROC-SNAPSHOT-LOC";
case ORTE_PROC_NODENAME: case ORTE_PROC_NODENAME:
return "PROC-NODENAME"; return "PROC-NODENAME";
case ORTE_PROC_CGROUP: case ORTE_PROC_CGROUP:
return "PROC-CGROUP"; return "PROC-CGROUP";
case ORTE_PROC_NBEATS: case ORTE_PROC_NBEATS:
return "PROC-NBEATS"; return "PROC-NBEATS";
default: default:
return "UNKNOWN-KEY"; return "UNKNOWN-KEY";
}
} }
/* see if one of the converters can handle it */
for (i = 0 ; i < MAX_CONVERTERS ; ++i) {
if (0 != converters[i].init) {
if (converters[i].key_base < key &&
key < converters[i].key_max) {
return converters[i].converter(key);
}
}
}
/* get here if nobody know what to do */
return "UNKNOWN-KEY";
} }

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

@ -19,6 +19,9 @@
#define ORTE_ATTR_LOCAL true // for local use only #define ORTE_ATTR_LOCAL true // for local use only
#define ORTE_ATTR_GLOBAL false // include when sending this object #define ORTE_ATTR_GLOBAL false // include when sending this object
/* define the mininum value of the ORTE keys just in
* case someone someday puts a layer underneath us */
#define ORTE_ATTR_KEY_BASE 0
/*** ATTRIBUTE FLAGS - never sent anywwhere ***/ /*** ATTRIBUTE FLAGS - never sent anywwhere ***/
typedef uint8_t orte_app_context_flags_t; typedef uint8_t orte_app_context_flags_t;
@ -160,7 +163,7 @@ typedef uint16_t orte_proc_flags_t;
#define ORTE_PROC_MAX_KEY 400 #define ORTE_PROC_MAX_KEY 400
#define ORTE_MAX_ATTR_KEY 1000 #define ORTE_ATTR_KEY_MAX 1000
/*** FLAG OPS ***/ /*** FLAG OPS ***/
@ -181,5 +184,16 @@ ORTE_DECLSPEC int orte_set_attribute(opal_list_t *attributes, orte_attribute_key
/* Remove the named attribute from a list */ /* Remove the named attribute from a list */
ORTE_DECLSPEC void orte_remove_attribute(opal_list_t *attributes, orte_attribute_key_t key); ORTE_DECLSPEC void orte_remove_attribute(opal_list_t *attributes, orte_attribute_key_t key);
/*
* Register a handler for converting attr keys to strings
*
* Handlers will be invoked by orte_attr_key_to_str to return the appropriate value.
*/
typedef char* (*orte_attr2str_fn_t)(int key);
ORTE_DECLSPEC int orte_attr_register(const char *project,
orte_attribute_key_t key_base,
orte_attribute_key_t key_max,
orte_attr2str_fn_t converter);
#endif #endif