/** * Function for finding and opening either all MCA components, or the * one that was specifically requested via a MCA parameter. */ int mca_base_framework_components_register (mca_base_framework_t *framework, mca_base_register_flag_t flags) { bool open_dso_components = !(flags & MCA_BASE_REGISTER_STATIC_ONLY); bool ignore_requested = !!(flags & MCA_BASE_REGISTER_ALL); opal_list_t components_found; int ret; /* Find and load requested components */ ret = mca_base_component_find(NULL, framework->framework_name, framework->framework_static_components, ignore_requested ? NULL : framework->framework_selection, &components_found, open_dso_components); if (OPAL_SUCCESS != ret) { return ret; } /* Register all remaining components */ ret = register_components(framework->framework_project, framework->framework_name, framework->framework_output, &components_found, &framework->framework_components); OBJ_DESTRUCT(&components_found); /* All done */ return ret; }
/** * Function for finding and opening either all MCA components, or the * one that was specifically requested via a MCA parameter. */ int mca_base_framework_components_open (mca_base_framework_t *framework, mca_base_open_flag_t flags) { /* Open flags are not used at this time. Suppress compiler warning. */ if (flags & MCA_BASE_OPEN_FIND_COMPONENTS) { /* Find and load requested components */ int ret = mca_base_component_find(NULL, framework->framework_name, framework->framework_static_components, framework->framework_selection, &framework->framework_components, true); if (OPAL_SUCCESS != ret) { return ret; } } /* Open all registered components */ return open_components (framework); }
/** * Function for finding and opening either all MCA components, or the * one that was specifically requested via a MCA parameter. */ int mca_base_components_open(const char *type_name, int output_id, const mca_base_component_t **static_components, opal_list_t *components_available, bool open_dso_components) { int ret, param; opal_list_item_t *item; opal_list_t components_found; char **requested_component_names; int param_verbose = -1; int param_type = -1; int verbose_level; char *str; bool include_mode; #if (OPAL_ENABLE_FT == 1) && (OPAL_ENABLE_FT_CR == 1) opal_list_item_t *next; uint32_t open_only_flags = MCA_BASE_METADATA_PARAM_NONE; const mca_base_component_t *component; #endif /* Register MCA parameters */ /* Check to see if it exists first */ if( 0 > (param_type = mca_base_param_find(type_name, NULL, NULL) ) ) { asprintf(&str, "Default selection set of components for the %s framework (<none>" " means use all components that can be found)", type_name); param_type = mca_base_param_reg_string_name(type_name, NULL, str, false, false, NULL, NULL); free(str); } param = mca_base_param_find("mca", NULL, "component_show_load_errors"); mca_base_param_lookup_int(param, &ret); show_errors = OPAL_INT_TO_BOOL(ret); /* Setup verbosity for this MCA type */ asprintf(&str, "Verbosity level for the %s framework (0 = no verbosity)", type_name); param_verbose = mca_base_param_reg_int_name(type_name, "base_verbose", str, false, false, 0, NULL); free(str); mca_base_param_lookup_int(param_verbose, &verbose_level); if (output_id != 0) { opal_output_set_verbosity(output_id, verbose_level); } opal_output_verbose(10, output_id, "mca: base: components_open: Looking for %s components", type_name); ret = parse_requested(param_type, &include_mode, &requested_component_names); if( OPAL_SUCCESS != ret ) { return ret; } /* Find and load requested components */ if (OPAL_SUCCESS != (ret = mca_base_component_find(NULL, type_name, static_components, requested_component_names, include_mode, &components_found, open_dso_components)) ) { return ret; } #if (OPAL_ENABLE_FT == 1) && (OPAL_ENABLE_FT_CR == 1) { int param_id = -1; int param_val = 0; /* * Extract supported mca parameters for selection contraints * Supported Options: * - mca_base_component_distill_checkpoint_ready = Checkpoint Ready */ param_id = mca_base_param_reg_int_name("mca", "base_component_distill_checkpoint_ready", "Distill only those components that are Checkpoint Ready", false, false, 0, ¶m_val); if( 0 != param_val ) { /* Select Checkpoint Ready */ open_only_flags |= MCA_BASE_METADATA_PARAM_CHECKPOINT; } } #endif /* (OPAL_ENABLE_FT == 1) && (OPAL_ENABLE_FT_CR == 1) */ /* * Pre-process the list with parameter constraints * e.g., If requested to select only CR enabled components * then only make available those components. * * JJH Note: Currently checkpoint/restart is the only user of this * functionality. If other component constraint options are * added, then this logic can be used for all contraint * options. */ #if (OPAL_ENABLE_FT == 1) && (OPAL_ENABLE_FT_CR == 1) if( !(MCA_BASE_METADATA_PARAM_NONE & open_only_flags) ) { if( MCA_BASE_METADATA_PARAM_CHECKPOINT & open_only_flags) { opal_output_verbose(10, output_id, "mca: base: components_open: " "including only %s components that are checkpoint enabled", type_name); } /* * Check all the components to make sure they adhere to the user * expressed requirements. */ for(item = opal_list_get_first(&components_found); item != opal_list_get_end(&components_found); item = next ) { mca_base_open_only_dummy_component_t *dummy; mca_base_component_list_item_t *cli = (mca_base_component_list_item_t *) item; dummy = (mca_base_open_only_dummy_component_t*) cli->cli_component; component = cli->cli_component; next = opal_list_get_next(item); /* * If the user asked for a checkpoint enabled run * then only load checkpoint enabled components. */ if( MCA_BASE_METADATA_PARAM_CHECKPOINT & open_only_flags) { if( MCA_BASE_METADATA_PARAM_CHECKPOINT & dummy->data.param_field) { opal_output_verbose(10, output_id, "mca: base: components_open: " "(%s) Component %s is Checkpointable", type_name, dummy->version.mca_component_name); } else { opal_output_verbose(10, output_id, "mca: base: components_open: " "(%s) Component %s is *NOT* Checkpointable - Disabled", type_name, dummy->version.mca_component_name); opal_list_remove_item(&components_found, item); /* Make sure to release the component since we are not * opening it */ mca_base_component_repository_release(component); } } } } #endif /* (OPAL_ENABLE_FT == 1) && (OPAL_ENABLE_FT_CR == 1) */ /* Open all remaining components */ ret = open_components(type_name, output_id, &components_found, components_available); /* Free resources */ for (item = opal_list_remove_first(&components_found); NULL != item; item = opal_list_remove_first(&components_found)) { OBJ_RELEASE(item); } OBJ_DESTRUCT(&components_found); if (NULL != requested_component_names) { opal_argv_free(requested_component_names); } /* All done */ return ret; }