1
1

Per patch from Nathan, with a few fixes, cleanup the orte-info tool

This commit was SVN r27581.
Этот коммит содержится в:
Ralph Castain 2012-11-10 04:11:40 +00:00
родитель e0f5137e46
Коммит fd632147df
5 изменённых файлов: 43 добавлений и 458 удалений

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

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
* University Research and Technology
@ -10,7 +11,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2010-2011 Los Alamos National Security, LLC.
* Copyright (c) 2010-2012 Los Alamos National Security, LLC.
* All rights reserved.
* $COPYRIGHT$
*
@ -30,67 +31,8 @@
#include "opal/runtime/opal_info_support.h"
#include "opal/mca/event/base/base.h"
#include "opal/util/output.h"
#include "opal/mca/base/base.h"
#include "opal/mca/backtrace/backtrace.h"
#include "opal/mca/backtrace/base/base.h"
#include "opal/mca/hwloc/base/base.h"
#include "opal/mca/shmem/shmem.h"
#include "opal/mca/shmem/base/base.h"
#include "opal/mca/memory/memory.h"
#include "opal/mca/memory/base/base.h"
#include "opal/mca/memchecker/memchecker.h"
#include "opal/mca/memchecker/base/base.h"
#include "opal/mca/timer/timer.h"
#include "opal/mca/timer/base/base.h"
#include "opal/mca/installdirs/installdirs.h"
#include "opal/mca/installdirs/base/base.h"
#if OPAL_ENABLE_FT_CR == 1
#include "opal/mca/crs/crs.h"
#include "opal/mca/crs/base/base.h"
#endif
#include "opal/runtime/opal.h"
#include "opal/dss/dss.h"
#include "opal/mca/if/base/base.h"
#include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/errmgr/base/base.h"
#include "orte/mca/grpcomm/grpcomm.h"
#include "orte/mca/grpcomm/base/base.h"
#include "orte/mca/db/db.h"
#include "orte/mca/db/base/base.h"
#include "orte/mca/ess/ess.h"
#include "orte/mca/ess/base/base.h"
#include "orte/util/show_help.h"
#include "orte/util/proc_info.h"
#include "orte/mca/state/state.h"
#include "orte/mca/state/base/base.h"
#if !ORTE_DISABLE_FULL_SUPPORT
#include "orte/mca/iof/iof.h"
#include "orte/mca/iof/base/base.h"
#include "orte/mca/oob/oob.h"
#include "orte/mca/oob/base/base.h"
#include "orte/mca/odls/odls.h"
#include "orte/mca/odls/base/base.h"
#include "orte/mca/ras/ras.h"
#include "orte/mca/ras/base/ras_private.h"
#include "orte/mca/rmaps/rmaps.h"
#include "orte/mca/rmaps/base/base.h"
#include "orte/mca/rml/rml.h"
#include "orte/mca/rml/base/base.h"
#include "orte/mca/routed/routed.h"
#include "orte/mca/routed/base/base.h"
#include "orte/mca/plm/plm.h"
#include "orte/mca/plm/base/base.h"
#if OPAL_ENABLE_FT_CR == 1
#include "orte/mca/snapc/snapc.h"
#include "orte/mca/snapc/base/base.h"
#endif
#include "orte/mca/sensor/sensor.h"
#include "orte/mca/sensor/base/base.h"
#include "orte/mca/filem/filem.h"
#include "orte/mca/filem/base/base.h"
#endif
#include "orte/runtime/orte_info_support.h"
#include "orte/tools/orte-info/orte-info.h"
/*
* Public variables
@ -130,408 +72,44 @@ static bool opened_components = false;
* out the environment of all OMPI_MCA_<type> variables to ensure
* that the open algorithms don't try to only open one component.
*/
void orte_info_open_components(void)
void orte_info_components_open(void)
{
int i;
char *env, *str;
char *target, *save, *type;
char **env_save=NULL;
bool need_close_components = false;
orte_info_component_map_t *map;
if (opened_components) {
return;
}
opened_components = true;
/* init the map */
OBJ_CONSTRUCT(&component_map, opal_pointer_array_t);
opal_pointer_array_init(&component_map, 256, INT_MAX, 128);
/* Clear out the environment. Use strdup() to orphan the resulting
* strings because items are placed in the environment by reference,
* not by value.
*/
for (i = 0; i < mca_types.size; ++i) {
if (NULL == (type = (char*)opal_pointer_array_get_item(&mca_types, i))) {
continue;
}
asprintf(&env, "OMPI_MCA_%s", type);
if (NULL != (save = getenv(env))) {
/* save this param so it can later be restored */
asprintf(&str, "%s=%s", env, save);
opal_argv_append_nosize(&env_save, str);
free(str);
/* can't manipulate it directly, so make a copy first */
asprintf(&target, "%s=", env);
putenv(target);
free(target);
}
}
/* some components require the event library be active, so activate it */
if (OPAL_SUCCESS != opal_event_base_open()) {
str = "opal_event_base_open";
goto error;
}
/* Open the DSS */
if (ORTE_SUCCESS != opal_dss_open()) {
str = "Unable to initialize the DSS";
goto error;
}
/* Open up the MCA */
if (OPAL_SUCCESS != mca_base_open()) {
str = "mca_base_open failed";
goto error;
}
/* Register the OPAL layer's MCA parameters */
if (OPAL_SUCCESS != opal_register_params()) {
str = "opal_register_params failed";
goto error;
}
/* Register the ORTE layer's MCA parameters */
if (ORTE_SUCCESS != orte_register_params()) {
str = "orte_register_params failed";
goto error;
}
/* Initialize the opal_output system */
if (!opal_output_init()) {
str = "opal_output_init failed";
goto error;
}
/* Find / open all components */
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("base");
opal_pointer_array_add(&component_map, map);
/* set default error message from here forward */
str = "A component framework failed to open properly.";
/* OPAL frameworks */
if (OPAL_SUCCESS != opal_backtrace_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("backtrace");
map->components = &opal_backtrace_base_components_opened;
opal_pointer_array_add(&component_map, map);
if (OPAL_SUCCESS != opal_memory_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("memory");
map->components = &opal_memory_base_components_opened;
opal_pointer_array_add(&component_map, map);
/* the event framework is already open - just get its components */
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("event");
map->components = &opal_event_components;
opal_pointer_array_add(&component_map, map);
if (OPAL_SUCCESS != opal_memchecker_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("memchecker");
map->components = &opal_memchecker_base_components_opened;
opal_pointer_array_add(&component_map, map);
if (OPAL_SUCCESS != opal_shmem_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("shmem");
map->components = &opal_shmem_base_components_opened;
opal_pointer_array_add(&component_map, map);
#if OPAL_HAVE_HWLOC
if (OPAL_SUCCESS != opal_hwloc_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("hwloc");
map->components = &opal_hwloc_base_components;
opal_pointer_array_add(&component_map, map);
#endif
if (OPAL_SUCCESS != opal_timer_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("timer");
map->components = &opal_timer_base_components_opened;
opal_pointer_array_add(&component_map, map);
#if OPAL_ENABLE_FT_CR == 1
if (OPAL_SUCCESS != opal_crs_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("crs");
map->components = &opal_crs_base_components_available;
opal_pointer_array_add(&component_map, map);
#endif
if (OPAL_SUCCESS != opal_if_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("if");
map->components = &opal_if_components;
opal_pointer_array_add(&component_map, map);
/* OPAL's installdirs base open has already been called as part of
* opal_init_util() back in main().
*/
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("installdirs");
map->components = &opal_installdirs_components;
opal_pointer_array_add(&component_map, map);
/* ORTE frameworks
* Set orte_process_info.proc_type to HNP to force all frameworks to
* open components
*/
orte_process_info.proc_type = ORTE_PROC_HNP;
if (ORTE_SUCCESS != orte_state_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("state");
map->components = &orte_state_base_components_available;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_errmgr_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("errmgr");
map->components = &orte_errmgr_base_components_available;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_grpcomm_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("grpcomm");
map->components = &orte_grpcomm_base.components_available;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_db_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("db");
map->components = &orte_db_base.available_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_ess_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("ess");
map->components = &orte_ess_base_components_available;
opal_pointer_array_add(&component_map, map);
#if !ORTE_DISABLE_FULL_SUPPORT
if (ORTE_SUCCESS != mca_oob_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("oob");
map->components = &mca_oob_base_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_odls_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("odls");
map->components = &orte_odls_base.available_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_iof_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("iof");
map->components = &orte_iof_base.iof_components_opened;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_ras_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("ras");
map->components = &orte_ras_base.ras_opened;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_rmaps_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("rmaps");
map->components = &orte_rmaps_base.available_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_rml_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("rml");
map->components = &orte_rml_base_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_routed_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("routed");
map->components = &orte_routed_base_components;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_plm_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("plm");
map->components = &orte_plm_base.available_components;
opal_pointer_array_add(&component_map, map);
#if OPAL_ENABLE_FT_CR == 1
if (ORTE_SUCCESS != orte_snapc_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("snapc");
map->components = &orte_snapc_base_components_available;
opal_pointer_array_add(&component_map, map);
#endif
if (ORTE_SUCCESS != orte_sensor_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("sensor");
map->components = &mca_sensor_base_components_available;
opal_pointer_array_add(&component_map, map);
if (ORTE_SUCCESS != orte_filem_base_open()) {
goto error;
}
map = OBJ_NEW(orte_info_component_map_t);
map->type = strdup("filem");
map->components = &orte_filem_base_components_available;
opal_pointer_array_add(&component_map, map);
#endif
/* flag that we need to close components */
need_close_components = true;
/* Restore the environment to what it was before we started so that
* if users setenv OMPI_MCA_<framework name> to some value, they'll
* see that value when it is shown via --param output.
*/
if (NULL != env_save) {
for (i = 0; i < opal_argv_count(env_save); ++i) {
putenv(env_save[i]);
}
}
/* All done */
opened_components = true;
return;
error:
fprintf(stderr, "%s\n", str);
fprintf(stderr, "orte-info will likely not display all configuration information\n");
if (need_close_components) {
opened_components = true;
orte_info_close_components();
}
opal_info_register_components (&mca_types, &component_map);
orte_info_register_components (&mca_types, &component_map);
}
void orte_info_close_components()
/*
* Not to be confused with orte_info_close_components.
*/
void orte_info_components_close(void)
{
int i;
orte_info_component_map_t *map;
if (opened_components) {
/* Note that the order of shutdown here doesn't matter because
* we aren't *using* any components -- none were selected, so
* there are no dependencies between the frameworks. We list
* them generally "in order", but it doesn't really matter.
* We also explicitly ignore the return values from the
* close() functions -- what would we do if there was an
* error?
*/
(void) orte_grpcomm_base_close();
(void) orte_db_base_close();
(void) orte_ess_base_close();
(void) orte_show_help_finalize();
#if !ORTE_DISABLE_FULL_SUPPORT
#if OPAL_ENABLE_FT_CR == 1
(void) orte_snapc_base_close();
#endif
(void) orte_filem_base_close();
(void) orte_iof_base_close();
(void) orte_plm_base_close();
(void) orte_odls_base_close();
(void) orte_rmaps_base_close();
(void) orte_ras_base_close();
(void) orte_rml_base_close();
(void) orte_routed_base_close();
(void) mca_oob_base_close();
#endif
(void) orte_errmgr_base_close();
(void) orte_state_base_close();
(void) opal_backtrace_base_close();
(void) opal_memory_base_close();
(void) opal_memchecker_base_close();
(void) opal_timer_base_close();
#if OPAL_HAVE_HWLOC
(void) opal_hwloc_base_close();
#endif
#if OPAL_ENABLE_FT_CR == 1
(void) opal_crs_base_close();
#endif
(void) opal_event_base_close();
/* Do not call OPAL's installdirs close; it will be handled in
* opal_finalize_util().
*/
for (i=0; i < component_map.size; i++) {
if (NULL != (map = (orte_info_component_map_t*)opal_pointer_array_get_item(&component_map, i))) {
OBJ_RELEASE(map);
}
}
OBJ_DESTRUCT(&component_map);
/* close the OPAL components */
(void) opal_info_close_components();
if (!opened_components) {
return;
}
orte_info_close_components ();
opal_info_close_components ();
for (i=0; i < component_map.size; i++) {
if (NULL != (map = (orte_info_component_map_t*)opal_pointer_array_get_item(&component_map, i))) {
OBJ_RELEASE(map);
}
}
OBJ_DESTRUCT(&component_map);
opened_components = false;
}

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

@ -47,6 +47,7 @@
#include "orte/constants.h"
#include "orte/util/show_help.h"
#include "orte/runtime/orte_info_support.h"
#include "orte/runtime/orte_locks.h"
#include "orte/tools/orte-info/orte-info.h"
@ -283,7 +284,7 @@ int main(int argc, char *argv[])
orte_info_do_arch();
orte_info_do_hostname();
orte_info_do_config(false);
orte_info_open_components();
orte_info_components_open();
for (i = 0; i < mca_types.size; ++i) {
if (NULL == (str = (char*)opal_pointer_array_get_item(&mca_types, i))) {
continue;
@ -301,7 +302,7 @@ int main(int argc, char *argv[])
if (NULL != global_env) {
opal_argv_free(global_env);
}
orte_info_close_components();
orte_info_components_close ();
OBJ_RELEASE(orte_info_cmd_line);
OBJ_DESTRUCT(&mca_types);
mca_base_close();

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

@ -120,8 +120,8 @@ ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_info_component_map_t);
extern opal_pointer_array_t component_map;
void orte_info_open_components(void);
void orte_info_close_components(void);
void orte_info_components_open(void);
void orte_info_components_close(void);
END_C_DECLS

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

@ -91,7 +91,7 @@ void orte_info_do_params(bool want_all_in, bool want_internal)
bool want_all = false;
opal_list_t *info;
orte_info_open_components();
orte_info_components_open();
if (want_all_in) {
want_all = true;
@ -565,7 +565,6 @@ void orte_info_do_config(bool want_all)
if (want_all) {
orte_info_out("Thread support", "option:threads", threads);
free(threads);
orte_info_out("Build CFLAGS", "option:build:cflags", OMPI_BUILD_CFLAGS);
orte_info_out("Build CXXFLAGS", "option:build:cxxflags", OMPI_BUILD_CXXFLAGS);
@ -581,6 +580,7 @@ void orte_info_do_config(bool want_all)
orte_info_out("Wrapper extra LIBS", "option:wrapper:extra_libs",
WRAPPER_EXTRA_LIBS);
}
free(threads);
orte_info_out("Internal debug support", "option:debug", debug);
orte_info_out("Memory profiling support", "option:mem-profile", memprofile);

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

@ -80,7 +80,7 @@ void orte_info_do_version(bool want_all, opal_cmd_line_t *cmd_line)
char *pos;
int j;
orte_info_open_components();
orte_info_components_open();
if (want_all) {
orte_info_show_orte_version(orte_info_ver_full);
@ -129,18 +129,19 @@ void orte_info_do_version(bool want_all, opal_cmd_line_t *cmd_line)
*/
void orte_info_show_orte_version(const char *scope)
{
char *tmp;
char *tmp, *tmp2;
orte_info_out("Package", "package", OPAL_PACKAGE_STRING);
asprintf(&tmp, "%s:version:full", orte_info_type_orte);
orte_info_out("Open RTE", tmp,
make_version_str(scope,
tmp2 = make_version_str(scope,
ORTE_MAJOR_VERSION, ORTE_MINOR_VERSION,
ORTE_RELEASE_VERSION,
ORTE_GREEK_VERSION,
ORTE_WANT_REPO_REV, ORTE_REPO_REV));
free(tmp);
free(tmp2);
asprintf(&tmp, "%s:version:repo", orte_info_type_orte);
orte_info_out("Open RTE repo revision", tmp, ORTE_REPO_REV);
free(tmp);
@ -150,12 +151,13 @@ void orte_info_show_orte_version(const char *scope)
asprintf(&tmp, "%s:version:full", orte_info_type_opal);
orte_info_out("OPAL", tmp,
make_version_str(scope,
tmp2 = make_version_str(scope,
OPAL_MAJOR_VERSION, OPAL_MINOR_VERSION,
OPAL_RELEASE_VERSION,
OPAL_GREEK_VERSION,
OPAL_WANT_REPO_REV, OPAL_REPO_REV));
free(tmp);
free(tmp2);
asprintf(&tmp, "%s:version:repo", orte_info_type_opal);
orte_info_out("OPAL repo revision", tmp, OPAL_REPO_REV);
free(tmp);
@ -347,6 +349,10 @@ static void show_mca_version(const mca_base_component_t* component,
}
free(message);
}
free (mca_version);
free (api_version);
free (component_version);
}