1
1

Fixes trac:1338: Have the MCA base specifically check for all requested

components.  If they are not found / able to be opened, a warning will
be printed and the mca_base_component_find() will return
OPAL_ERR_NOT_FOUND.  It is the upper-layer's responsibility to handle
this error appropriately.

This commit was SVN r18707.

The following Trac tickets were found above:
  Ticket 1338 --> https://svn.open-mpi.org/trac/ompi/ticket/1338
Этот коммит содержится в:
Jeff Squyres 2008-06-23 16:14:05 +00:00
родитель 937380df2f
Коммит bdaaf01d8a
2 изменённых файлов: 38 добавлений и 4 удалений

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

@ -10,6 +10,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -29,12 +30,18 @@ output of the "ompi_info" command and ensure that components of this
type are available on your system. You may also wish to check the
value of the "component_path" MCA parameter and ensure that it has at
least one directory that contains valid MCA components.
#
[find-available:not-valid]
The %s component was not found!
A requested component was not found, or was unable to be opened. This
means that this component is either not installed or is unable to be
used on your system (e.g., sometimes this means that shared libraries
that the component requires are unable to be found/loaded). Note that
Open MPI stopped checking at the first component that it did not find.
This means that this component is either not installed, or unable to be
used on your system.
Host: %s
Framework: %s
Component: %s
#
[framework-param:too-many-negates]
MCA framework parameters can only take a single negation operator
("^"), and it must be at the beginning of the value. The following

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

@ -23,12 +23,14 @@
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <unistd.h>
#if OMPI_WANT_LIBLTDL
#include "opal/libltdl/ltdl.h"
#endif
#include "opal/util/output.h"
#include "opal/util/show_help.h"
#include "opal/class/opal_list.h"
#include "opal/mca/mca.h"
#include "opal/mca/base/base.h"
@ -132,6 +134,7 @@ int mca_base_component_find(const char *directory, const char *type,
bool open_dso_components)
{
int i;
opal_list_item_t *item;
mca_base_component_list_item_t *cli;
/* Find all the components that were statically linked in */
@ -168,6 +171,30 @@ int mca_base_component_find(const char *directory, const char *type,
}
#endif
/* Ensure that *all* requested components exist. Print a warning
and abort if they do not. */
for (i = 0; NULL != requested_component_names &&
NULL != requested_component_names[i]; ++i) {
for (item = opal_list_get_first(found_components);
opal_list_get_end(found_components) != item;
item = opal_list_get_next(item)) {
cli = (mca_base_component_list_item_t*) item;
if (0 == strcmp(requested_component_names[i],
cli->cli_component->mca_component_name)) {
break;
}
}
if (opal_list_get_end(found_components) == item) {
char h[HOST_NAME_MAX];
gethostname(h, sizeof(h));
opal_show_help("help-mca-base.txt",
"find-available:not-valid", true,
h, type, requested_component_names[i]);
return OPAL_ERR_NOT_FOUND;
}
}
/* All done */
return OPAL_SUCCESS;