You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2018/12/05 14:00:03 UTC

qpid-dispatch git commit: DISPATCH-1209 - Added an enable callback to act as a gate for core module initialization.

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master b0e025d38 -> e8eb87a7a


DISPATCH-1209 - Added an enable callback to act as a gate for core module initialization.


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/e8eb87a7
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/e8eb87a7
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/e8eb87a7

Branch: refs/heads/master
Commit: e8eb87a7aaf00a7255b4c43e32d7979705f42890
Parents: b0e025d
Author: Ted Ross <tr...@redhat.com>
Authored: Wed Dec 5 08:59:26 2018 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Wed Dec 5 08:59:26 2018 -0500

----------------------------------------------------------------------
 src/router_core/module.h                        | 22 +++++++++--
 .../address_lookup_client/lookup_client.c       |  8 +++-
 .../address_lookup_server.c                     | 14 +++----
 .../edge_addr_tracking/edge_addr_tracking.c     | 20 ++++------
 src/router_core/modules/edge_router/module.c    | 41 ++++++++++----------
 .../modules/test_hooks/core_test_hooks.c        | 24 +++++-------
 src/router_core/router_core_thread.c            | 20 +++++++---
 7 files changed, 87 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/module.h
----------------------------------------------------------------------
diff --git a/src/router_core/module.h b/src/router_core/module.h
index e330146..6d87115 100644
--- a/src/router_core/module.h
+++ b/src/router_core/module.h
@@ -22,6 +22,19 @@
 #include "router_core_private.h"
 
 /**
+ * Callback to test whether a moduel should be enabled.
+ *
+ * If this gate returns true, the init callback will be invoked at core startup
+ * and the final callback will be invoked at core shutdown.  If the gate returns
+ * false, neither the init nor the final callbacks will be invoked.
+ *
+ * @param core Pointer to the core object
+ * @return True iff the module should be initialized
+ */
+typedef bool (*qdrc_module_enable_t) (qdr_core_t *core);
+
+
+/**
  * Callback to initialize a core module at core thread startup
  *
  * @param core Pointer to the core object
@@ -47,10 +60,13 @@ typedef void (*qdrc_module_final_t) (void *module_context);
  * @param on_init Pointer to a function for module initialization, called at core thread startup
  * @param on_final Pointer to a function for module finalization, called at core thread shutdown
  */
-#define QDR_CORE_MODULE_DECLARE(name,on_init,on_final)   \
+#define QDR_CORE_MODULE_DECLARE(name,enable,on_init,on_final)   \
     static void modstart() __attribute__((constructor)); \
-    void modstart() { qdr_register_core_module(name, on_init, on_final); }
-void qdr_register_core_module(const char *name, qdrc_module_init_t on_init, qdrc_module_final_t on_final);
+    void modstart() { qdr_register_core_module(name, enable, on_init, on_final); }
+void qdr_register_core_module(const char *name,
+                              qdrc_module_enable_t enable,
+                              qdrc_module_init_t on_init,
+                              qdrc_module_final_t on_final);
 
 
 #endif

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/modules/address_lookup_client/lookup_client.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/address_lookup_client/lookup_client.c b/src/router_core/modules/address_lookup_client/lookup_client.c
index afe363b..229b00a 100644
--- a/src/router_core/modules/address_lookup_client/lookup_client.c
+++ b/src/router_core/modules/address_lookup_client/lookup_client.c
@@ -356,6 +356,12 @@ static void qcm_addr_lookup_CT(qdr_core_t       *core,
 }
 
 
+static bool qcm_addr_lookup_client_enable_CT(qdr_core_t *core)
+{
+    return true;
+}
+
+
 static void qcm_addr_lookup_client_init_CT(qdr_core_t *core, void **module_context)
 {
     assert(core->addr_lookup_handler == 0);
@@ -372,4 +378,4 @@ static void qcm_addr_lookup_client_final_CT(void *module_context)
 }
 
 
-QDR_CORE_MODULE_DECLARE("address_lookup_client", qcm_addr_lookup_client_init_CT, qcm_addr_lookup_client_final_CT)
+QDR_CORE_MODULE_DECLARE("address_lookup_client", qcm_addr_lookup_client_enable_CT, qcm_addr_lookup_client_init_CT, qcm_addr_lookup_client_final_CT)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/modules/address_lookup_server/address_lookup_server.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/address_lookup_server/address_lookup_server.c b/src/router_core/modules/address_lookup_server/address_lookup_server.c
index 9a05c87..b37e23d 100644
--- a/src/router_core/modules/address_lookup_server/address_lookup_server.c
+++ b/src/router_core/modules/address_lookup_server/address_lookup_server.c
@@ -324,14 +324,14 @@ static qdrc_endpoint_desc_t _endpoint_handlers =
 };
 
 
-static void _address_lookup_init_CT(qdr_core_t *core, void **module_context)
+static bool _addres_lookup_enable_CT(qdr_core_t *core)
 {
-    //
-    // Address resolution service is provided by interior routers only
-    //
-    if (core->router_mode != QD_ROUTER_MODE_INTERIOR)
-        return;
+    return core->router_mode == QD_ROUTER_MODE_INTERIOR;
+}
+
 
+static void _address_lookup_init_CT(qdr_core_t *core, void **module_context)
+{
     _server_state.core = core;
 
     //
@@ -357,4 +357,4 @@ static void _address_lookup_final_CT(void *module_context)
 }
 
 
-QDR_CORE_MODULE_DECLARE("address lookup", _address_lookup_init_CT, _address_lookup_final_CT)
+QDR_CORE_MODULE_DECLARE("address_lookup_server", _addres_lookup_enable_CT, _address_lookup_init_CT, _address_lookup_final_CT)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
index 43244e9..715be0b 100644
--- a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
+++ b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c
@@ -315,20 +315,19 @@ static void on_link_event(void *context, qdrc_event_t event, qdr_link_t *link)
 }
 
 
-static void qdrc_edge_address_tracking_module_init_CT(qdr_core_t *core, void **module_context)
+static bool qdrc_edge_address_tracking_enable_CT(qdr_core_t *core)
 {
-    //
-    // Address tracking is ennabled only on interior routers
-    //
-    if (core->router_mode != QD_ROUTER_MODE_INTERIOR)
-        return;
+    return core->router_mode == QD_ROUTER_MODE_INTERIOR;
+}
+
 
+static void qdrc_edge_address_tracking_init_CT(qdr_core_t *core, void **module_context)
+{
     qdr_addr_tracking_module_context_t *context = NEW(qdr_addr_tracking_module_context_t);
     ZERO(context);
     context->core = core;
     *module_context = context;
 
-
     //
     // Bind to the static address QD_TERMINUS_EDGE_ADDRESS_TRACKING
     //
@@ -351,11 +350,8 @@ static void qdrc_edge_address_tracking_module_init_CT(qdr_core_t *core, void **m
 }
 
 
-static void qdrc_edge_address_tracking_module_final_CT(void *module_context)
+static void qdrc_edge_address_tracking_final_CT(void *module_context)
 {
-    if (module_context == 0)
-        return;
-
     qdr_addr_tracking_module_context_t *mc = ( qdr_addr_tracking_module_context_t *)module_context;
 
     // If there are any endpoint states still hanging around, clean it up.
@@ -370,4 +366,4 @@ static void qdrc_edge_address_tracking_module_final_CT(void *module_context)
 }
 
 
-QDR_CORE_MODULE_DECLARE("edge_addr_tracking", qdrc_edge_address_tracking_module_init_CT, qdrc_edge_address_tracking_module_final_CT)
+QDR_CORE_MODULE_DECLARE("edge_addr_tracking", qdrc_edge_address_tracking_enable_CT, qdrc_edge_address_tracking_init_CT, qdrc_edge_address_tracking_final_CT)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/modules/edge_router/module.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/edge_router/module.c b/src/router_core/modules/edge_router/module.c
index 9c73a78..dad4c99 100644
--- a/src/router_core/modules/edge_router/module.c
+++ b/src/router_core/modules/edge_router/module.c
@@ -32,19 +32,22 @@ typedef struct {
 } qcm_edge_t;
 
 
+static bool qcm_edge_router_enable_CT(qdr_core_t *core)
+{
+    return core->router_mode == QD_ROUTER_MODE_EDGE;
+}
+
+
 static void qcm_edge_router_init_CT(qdr_core_t *core, void **module_context)
 {
-    if (core->router_mode == QD_ROUTER_MODE_EDGE) {
-        qcm_edge_t *edge = NEW(qcm_edge_t);
-        edge->core = core;
-        edge->conn_mgr   = qcm_edge_conn_mgr(core);
-        edge->addr_proxy = qcm_edge_addr_proxy(core);
-        qcm_edge_mgmt_init_CT(core);
-        qcm_edge_link_route_init_CT(core);
-        // TODO - Add initialization of other edge-router functions here
-        *module_context = edge;
-    } else
-        *module_context = 0;
+    qcm_edge_t *edge = NEW(qcm_edge_t);
+    edge->core = core;
+    edge->conn_mgr   = qcm_edge_conn_mgr(core);
+    edge->addr_proxy = qcm_edge_addr_proxy(core);
+    qcm_edge_mgmt_init_CT(core);
+    qcm_edge_link_route_init_CT(core);
+    // TODO - Add initialization of other edge-router functions here
+    *module_context = edge;
 }
 
 
@@ -52,15 +55,13 @@ static void qcm_edge_router_final_CT(void *module_context)
 {
     qcm_edge_t *edge = (qcm_edge_t*) module_context;
 
-    if (edge) {
-        qcm_edge_conn_mgr_final(edge->conn_mgr);
-        qcm_edge_addr_proxy_final(edge->addr_proxy);
-        qcm_edge_mgmt_final_CT(edge->core);
-        qcm_edge_link_route_final_CT(edge->core);
-        // TODO - Add finalization of other edge-router functions here
-        free(edge);
-    }
+    qcm_edge_conn_mgr_final(edge->conn_mgr);
+    qcm_edge_addr_proxy_final(edge->addr_proxy);
+    qcm_edge_mgmt_final_CT(edge->core);
+    qcm_edge_link_route_final_CT(edge->core);
+    // TODO - Add finalization of other edge-router functions here
+    free(edge);
 }
 
 
-QDR_CORE_MODULE_DECLARE("edge_router", qcm_edge_router_init_CT, qcm_edge_router_final_CT)
+QDR_CORE_MODULE_DECLARE("edge_router", qcm_edge_router_enable_CT, qcm_edge_router_init_CT, qcm_edge_router_final_CT)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/modules/test_hooks/core_test_hooks.c
----------------------------------------------------------------------
diff --git a/src/router_core/modules/test_hooks/core_test_hooks.c b/src/router_core/modules/test_hooks/core_test_hooks.c
index 19f31af..c968690 100644
--- a/src/router_core/modules/test_hooks/core_test_hooks.c
+++ b/src/router_core/modules/test_hooks/core_test_hooks.c
@@ -656,16 +656,14 @@ static void qdrc_test_client_api_finalize(test_module_t *test_module)
 }
 
 
-static void qdrc_test_hooks_init_CT(qdr_core_t *core, void **module_context)
+static bool qdrc_test_hooks_enable_CT(qdr_core_t *core)
 {
-    //
-    // Exit if the test hooks are not enabled (by the --test-hooks command line option)
-    //
-    if (!core->qd->test_hooks) {
-        *module_context = 0;
-        return;
-    }
+    return core->qd->test_hooks;
+}
 
+
+static void qdrc_test_hooks_init_CT(qdr_core_t *core, void **module_context)
+{
     test_module_t *test_module = NEW(test_module_t);
     ZERO(test_module);
     test_module->core = core;
@@ -677,12 +675,10 @@ static void qdrc_test_hooks_init_CT(qdr_core_t *core, void **module_context)
 
 static void qdrc_test_hooks_final_CT(void *module_context)
 {
-    if (!!module_context) {
-        qdrc_test_hooks_core_endpoint_finalize(module_context);
-        qdrc_test_client_api_finalize(module_context);
-        free(module_context);
-    }
+    qdrc_test_hooks_core_endpoint_finalize(module_context);
+    qdrc_test_client_api_finalize(module_context);
+    free(module_context);
 }
 
 
-QDR_CORE_MODULE_DECLARE("core_test_hooks", qdrc_test_hooks_init_CT, qdrc_test_hooks_final_CT)
+QDR_CORE_MODULE_DECLARE("core_test_hooks", qdrc_test_hooks_enable_CT, qdrc_test_hooks_init_CT, qdrc_test_hooks_final_CT)

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/e8eb87a7/src/router_core/router_core_thread.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_thread.c b/src/router_core/router_core_thread.c
index 11525d1..2822d39 100644
--- a/src/router_core/router_core_thread.c
+++ b/src/router_core/router_core_thread.c
@@ -34,19 +34,22 @@ ALLOC_DEFINE(qdr_action_t);
 typedef struct qdrc_module_t {
     DEQ_LINKS(struct qdrc_module_t);
     const char          *name;
+    qdrc_module_enable_t enable;
     qdrc_module_init_t   on_init;
     qdrc_module_final_t  on_final;
     void                *context;
+    bool                 enabled;
 } qdrc_module_t;
 
 DEQ_DECLARE(qdrc_module_t, qdrc_module_list_t);
 static qdrc_module_list_t registered_modules = {0,0};
 
-void qdr_register_core_module(const char *name, qdrc_module_init_t on_init, qdrc_module_final_t on_final)
+void qdr_register_core_module(const char *name, qdrc_module_enable_t enable, qdrc_module_init_t on_init, qdrc_module_final_t on_final)
 {
     qdrc_module_t *module = NEW(qdrc_module_t);
     ZERO(module);
     module->name     = name;
+    module->enable   = enable;
     module->on_init  = on_init;
     module->on_final = on_final;
     DEQ_INSERT_TAIL(registered_modules, module);
@@ -80,8 +83,13 @@ void *router_core_thread(void *arg)
     //
     qdrc_module_t *module = DEQ_HEAD(registered_modules);
     while (module) {
-        qd_log(core->log, QD_LOG_INFO, "Initializing core module: %s", module->name);
-        module->on_init(core, &module->context);
+        module->enabled = module->enable(core);
+        if (module->enabled) {
+            module->on_init(core, &module->context);
+            qd_log(core->log, QD_LOG_INFO, "Core module enabled: %s", module->name);
+        } else
+            qd_log(core->log, QD_LOG_INFO, "Core module present but disabled: %s", module->name);
+            
         module = DEQ_NEXT(module);
     }
 
@@ -129,8 +137,10 @@ void *router_core_thread(void *arg)
     //
     module = DEQ_TAIL(registered_modules);
     while (module) {
-        qd_log(core->log, QD_LOG_INFO, "Finalizing core module: %s", module->name);
-        module->on_final(module->context);
+        if (module->enabled) {
+            qd_log(core->log, QD_LOG_INFO, "Finalizing core module: %s", module->name);
+            module->on_final(module->context);
+        }
         module = DEQ_PREV(module);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org