ORTE/OOB: re-introduce ft_event() as ORTE_OOB_FT_EVENT()
authorAdrian Reber <adrian.reber@hs-esslingen.de>
Thu, 13 Feb 2014 19:11:00 +0000 (20:11 +0100)
committerAdrian Reber <adrian.reber@hs-esslingen.de>
Thu, 13 Feb 2014 19:17:53 +0000 (20:17 +0100)
Before starting to get the C/R code to compile again, the C/R
code tried to call orte_oob.ft_event(). The current code base
does not support this any longer. Therefore this commit tries
to re-introduce the orte_oob.ft_event() functionality like
ORTE/OOB works now. With the introduction of ORTE_OOB_FT_EVENT(),
which is modelled after the other ORTE_OOB_* functions.

orte/mca/oob/base/base.h
orte/mca/oob/base/oob_base_stubs.c
orte/mca/oob/oob.h
orte/mca/oob/tcp/oob_tcp_component.c
orte/mca/rml/oob/rml_oob_component.c

index 75d90f8..510e77a 100644 (file)
@@ -170,6 +170,10 @@ OBJ_CLASS_DECLARATION(mca_oob_uri_req_t);
     }while(0);
 ORTE_DECLSPEC void orte_oob_base_set_addr(int fd, short args, void *cbdata);
 
+#define ORTE_OOB_FT_EVENT(state) mca_oob_base_ft_event(state)
+
+ORTE_DECLSPEC int mca_oob_base_ft_event(int state);
+
 END_C_DECLS
 #endif
 
index 31f04ce..8b69527 100644 (file)
@@ -376,25 +376,27 @@ static void process_uri(char *uri)
     opal_argv_free(uris);
 }
 
-#if 0
-
 int mca_oob_base_ft_event(int state)
 {
-    int rc;
-    mca_oob_module_t *mod;
+    int rc=ORTE_SUCCESS;
+    mca_base_component_list_item_t *cli;
+    mca_oob_base_component_t *component;
 
     /* loop across all available modules in priority order
      * and call each one's ft_event handler
      */
-    OPAL_LIST_FOREACH(mod, &mca_oob_base_modules, mca_oob_module_t) {
-        if (NULL != mod->ft_event) {
-            if (ORTE_SUCCESS != (rc = mod->ft_event(state))) {
-                ORTE_ERROR_LOG(rc);
-            }
+    OPAL_LIST_FOREACH(cli, &orte_oob_base.actives, mca_base_component_list_item_t) {
+        component = (mca_oob_base_component_t*)cli->cli_component;
+        if (NULL == component->ft_event) {
+            /* doesn't support this ability */
+            continue;
         }
+
+        if (ORTE_SUCCESS != (rc = component->ft_event(state))) {
+            ORTE_ERROR_LOG(rc);
+        }
+
     }
 
-    return ORTE_SUCCESS;
+    return rc;
 }
-
-#endif
index 46a1127..83beefc 100644 (file)
@@ -55,6 +55,7 @@ typedef int (*mca_oob_base_component_set_addr_fn_t)(orte_process_name_t *peer,
                                                     char **uris);
 typedef bool (*mca_oob_base_component_is_reachable_fn_t)(orte_process_name_t *peer);
 typedef void (*mca_oob_ping_callback_fn_t)(int status, void *cbdata);
+typedef int (*mca_oob_base_component_ft_event_fn_t)(int state);
 
 typedef struct {
     mca_base_component_t                      oob_base;
@@ -68,6 +69,7 @@ typedef struct {
     mca_oob_base_component_get_addr_fn_t      get_addr;
     mca_oob_base_component_set_addr_fn_t      set_addr;
     mca_oob_base_component_is_reachable_fn_t  is_reachable;
+    mca_oob_base_component_ft_event_fn_t      ft_event;
 } mca_oob_base_component_t;
 
 /**
index 2502958..05f84d7 100644 (file)
@@ -90,6 +90,7 @@ static char* component_get_addr(void);
 static int component_set_addr(orte_process_name_t *peer,
                               char **uris);
 static bool component_is_reachable(orte_process_name_t *peer);
+static int component_ft_event(int state);
 /*
  * Struct of function pointers and all that to let us be initialized
  */
@@ -118,7 +119,8 @@ mca_oob_tcp_component_t mca_oob_tcp_component = {
         component_send,
         component_get_addr,
         component_set_addr,
-        component_is_reachable
+        component_is_reachable,
+        component_ft_event
     },
 };
 
@@ -990,6 +992,25 @@ static bool component_is_reachable(orte_process_name_t *peer)
     return true;
 }
 
+static int component_ft_event(int state)
+{
+    mca_oob_tcp_module_t *mod;
+    int i, rc;
+
+    opal_output_verbose(2, orte_oob_base_framework.framework_output,
+                        "%s TCP FT EVENT", ORTE_NAME_PRINT(ORTE_PROC_MY_NAME));
+
+    for (i=0; i < mca_oob_tcp_component.modules.size; i++) {
+        if (NULL == (mod = (mca_oob_tcp_module_t*)opal_pointer_array_get_item(&mca_oob_tcp_component.modules, i))) {
+            continue;
+        }
+        if (NULL != mod->api.ft_event) {
+            mod->api.ft_event((struct mca_oob_tcp_module_t*)mod, state);
+        }
+    }
+
+    return rc;
+}
 
 /*
  *  Create a module instance and add to modules array.
index 90ed086..b23d874 100644 (file)
@@ -185,12 +185,7 @@ orte_rml_oob_ft_event(int state) {
         ;
     }
 
-    if( ORTE_SUCCESS != (ret = orte_rml_oob_ft_event(state)) ) {
-        ORTE_ERROR_LOG(ret);
-        exit_status = ret;
-        goto cleanup;
-    }
-
+    ORTE_OOB_FT_EVENT(state);
 
     if(OPAL_CRS_CHECKPOINT == state) {
         ;