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