Skip to content

Commit b1eb6a7

Browse files
authored
Merge pull request #2904 from jjhursey/topic/ibm/v2.0.x/event-external
libevent/external: Add opal_event_include to this component
2 parents ce2df28 + f39dabb commit b1eb6a7

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

opal/mca/event/external/event_external_component.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright (c) 2011 Cisco Systems, Inc. All rights reserved.
44
* Copyright (c) 2013-2015 Los Alamos National Security, LLC. All rights
55
* reserved.
6+
* Copyright (c) 2017 IBM Corporation. All rights reserved.
67
*
78
* $COPYRIGHT$
89
*
@@ -16,6 +17,10 @@
1617

1718
#include "opal/mca/event/event.h"
1819

20+
#include "event.h"
21+
22+
#include "opal/util/argv.h"
23+
1924
/*
2025
* Public string showing the sysinfo ompi_linux component version number
2126
*/
@@ -27,7 +32,9 @@ const char *opal_event_external_component_version_string =
2732
* Local function
2833
*/
2934
static int event_external_open(void);
35+
static int event_external_register (void);
3036

37+
char *event_module_include = NULL;
3138

3239
/*
3340
* Instantiate the public struct with all of our public information
@@ -49,6 +56,7 @@ const opal_event_component_t mca_event_external_component = {
4956

5057
/* Component open and close functions */
5158
.mca_open_component = event_external_open,
59+
.mca_register_component_params = event_external_register
5260
},
5361
.base_data = {
5462
/* The component is checkpoint ready */
@@ -62,3 +70,47 @@ static int event_external_open(void)
6270
eliminate the whole file */
6371
return OPAL_SUCCESS;
6472
}
73+
74+
static int event_external_register (void) {
75+
const char **all_available_eventops;
76+
char *avail = NULL;
77+
char *help_msg = NULL;
78+
int ret;
79+
80+
// Get supported methods
81+
all_available_eventops = event_get_supported_methods();
82+
83+
#ifdef __APPLE__
84+
event_module_include ="select";
85+
#else
86+
event_module_include = "poll";
87+
#endif
88+
89+
avail = opal_argv_join(all_available_eventops, ',');
90+
asprintf( &help_msg,
91+
"Comma-delimited list of libevent subsystems "
92+
"to use (%s -- available on your platform)",
93+
avail );
94+
95+
ret = mca_base_component_var_register (&mca_event_external_component.base_version,
96+
"event_include", help_msg,
97+
MCA_BASE_VAR_TYPE_STRING, NULL, 0,
98+
MCA_BASE_VAR_FLAG_SETTABLE,
99+
OPAL_INFO_LVL_3,
100+
MCA_BASE_VAR_SCOPE_LOCAL,
101+
&event_module_include);
102+
free(help_msg); /* release the help message */
103+
free(avail);
104+
avail = NULL;
105+
106+
if (0 > ret) {
107+
return ret;
108+
}
109+
110+
ret = mca_base_var_register_synonym (ret, "opal", "opal", "event", "include", 0);
111+
if (0 > ret) {
112+
return ret;
113+
}
114+
115+
return OPAL_SUCCESS;
116+
}

opal/mca/event/external/event_external_module.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
55
* Copyright (c) 2012-2013 Los Alamos National Security, LLC.
66
* All rights reserved.
7+
* Copyright (c) 2017 IBM Corporation. All rights reserved.
78
*/
89
#include "opal_config.h"
910
#include "opal/constants.h"
@@ -12,12 +13,63 @@
1213
#include "opal/mca/event/base/base.h"
1314
#include "external.h"
1415

16+
#include "opal/util/argv.h"
17+
18+
extern char *event_module_include;
19+
static struct event_config *config = NULL;
20+
21+
opal_event_base_t* opal_event_base_create(void)
22+
{
23+
opal_event_base_t *base;
24+
25+
base = event_base_new_with_config(config);
26+
if (NULL == base) {
27+
/* there is no backend method that does what we want */
28+
opal_output(0, "No event method available");
29+
}
30+
return base;
31+
}
32+
1533
int opal_event_init(void)
1634
{
35+
const char **all_available_eventops = NULL;
36+
char **includes=NULL;
37+
bool dumpit=false;
38+
int i, j;
39+
1740
if (opal_output_get_verbosity(opal_event_base_framework.framework_output) > 4) {
1841
event_enable_debug_mode();
1942
}
2043

44+
all_available_eventops = event_get_supported_methods();
45+
46+
if (NULL == event_module_include) {
47+
/* Shouldn't happen, but... */
48+
event_module_include = strdup("select");
49+
}
50+
includes = opal_argv_split(event_module_include,',');
51+
52+
/* get a configuration object */
53+
config = event_config_new();
54+
/* cycle thru the available subsystems */
55+
for (i = 0 ; NULL != all_available_eventops[i] ; ++i) {
56+
/* if this module isn't included in the given ones,
57+
* then exclude it
58+
*/
59+
dumpit = true;
60+
for (j=0; NULL != includes[j]; j++) {
61+
if (0 == strcmp("all", includes[j]) ||
62+
0 == strcmp(all_available_eventops[i], includes[j])) {
63+
dumpit = false;
64+
break;
65+
}
66+
}
67+
if (dumpit) {
68+
event_config_avoid_method(config, all_available_eventops[i]);
69+
}
70+
}
71+
opal_argv_free(includes);
72+
2173
return OPAL_SUCCESS;
2274
}
2375

opal/mca/event/external/external.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (c) 2015 Intel, Inc. All rights reserved.
55
* Copyright (c) 2015 Research Organization for Information Science
66
* and Technology (RIST). All rights reserved.
7+
* Copyright (c) 2017 IBM Corporation. All rights reserved.
78
*
89
* $COPYRIGHT$
910
*
@@ -45,7 +46,7 @@ OPAL_DECLSPEC extern opal_event_base_t *opal_sync_event_base;
4546
#define OPAL_EVLOOP_NONBLOCK EVLOOP_NONBLOCK /**< Do not block. */
4647

4748
/* Global function to create and release an event base */
48-
#define opal_event_base_create() event_base_new()
49+
OPAL_DECLSPEC opal_event_base_t* opal_event_base_create(void);
4950

5051
#define opal_event_base_free(x) event_base_free(x)
5152

0 commit comments

Comments
 (0)