You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2018/09/13 20:11:56 UTC
qpid-dispatch git commit: DISPATCH-930: template code for edge route
connection events
Repository: qpid-dispatch
Updated Branches:
refs/heads/master c392ea84e -> 75a69f345
DISPATCH-930: template code for edge route connection events
This closes #377
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/75a69f34
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/75a69f34
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/75a69f34
Branch: refs/heads/master
Commit: 75a69f3454125232d47cf30ea67b1ba233f46e37
Parents: c392ea8
Author: Kenneth Giusti <kg...@apache.org>
Authored: Thu Sep 13 15:32:47 2018 -0400
Committer: Kenneth Giusti <kg...@apache.org>
Committed: Thu Sep 13 16:10:11 2018 -0400
----------------------------------------------------------------------
src/CMakeLists.txt | 1 +
src/router_core/connections.c | 10 ++++
src/router_core/edge_control.c | 75 ++++++++++++++++++++++++++++++
src/router_core/router_core.c | 6 +++
src/router_core/router_core_private.h | 8 +++-
5 files changed, 99 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/75a69f34/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3c32437..addd168 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -84,6 +84,7 @@ set(qpid_dispatch_SOURCES
router_core/agent_link.c
router_core/agent_router.c
router_core/connections.c
+ router_core/edge_control.c
router_core/error.c
router_core/exchange_bindings.c
router_core/forwarder.c
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/75a69f34/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 9716d7e..2723c6c 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -1297,6 +1297,11 @@ static void qdr_connection_opened_CT(qdr_core_t *core, qdr_action_t *action, boo
if (cid)
qdr_route_connection_opened_CT(core, conn, action->args.connection.container_id, action->args.connection.connection_label);
}
+
+ if (conn->role == QDR_ROLE_EDGE_UPLINK && core->edge) {
+ // edge router established connection to interior
+ qdr_edge_connection_opened(core->edge, conn);
+ }
}
qdr_field_free(action->args.connection.connection_label);
@@ -1381,6 +1386,11 @@ static void qdr_connection_closed_CT(qdr_core_t *core, qdr_action_t *action, boo
DEQ_REMOVE_N(ACTIVATE, core->connections_to_activate, conn);
}
+ if (conn->role == QDR_ROLE_EDGE_UPLINK && core->edge) {
+ // edge router's uplink has closed
+ qdr_edge_connection_closed(core->edge);
+ }
+
DEQ_REMOVE(core->open_connections, conn);
qdr_connection_free(conn);
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/75a69f34/src/router_core/edge_control.c
----------------------------------------------------------------------
diff --git a/src/router_core/edge_control.c b/src/router_core/edge_control.c
new file mode 100644
index 0000000..35af28d
--- /dev/null
+++ b/src/router_core/edge_control.c
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "router_core_private.h"
+#include <inttypes.h>
+
+struct qdr_edge_t {
+ qdr_core_t *core;
+ qdr_connection_t *conn; // current active connection to interior
+
+ qdr_link_t *mgmt_link; // outgoing link to interior $management
+ qdr_link_t *mgmt_reply_to; // for management reply messages
+};
+ALLOC_DECLARE(qdr_edge_t);
+ALLOC_DEFINE(qdr_edge_t);
+
+
+
+qdr_edge_t *qdr_edge(qdr_core_t *core)
+{
+ qdr_edge_t *edge = new_qdr_edge_t();
+ ZERO(edge);
+ edge->core = core;
+ // TODO initialize
+ return edge;
+}
+
+
+void qdr_edge_free(qdr_edge_t *edge)
+{
+ if (edge) {
+ // TODO cleanup
+ free_qdr_edge_t(edge);
+ }
+}
+
+
+//
+// The router is in edge mode and the connection to the interior router
+// has opened
+//
+void qdr_edge_connection_opened(qdr_edge_t *edge, qdr_connection_t *conn)
+{
+ qd_log(edge->core->log, QD_LOG_TRACE,
+ "edge connection to interior opened (id=%"PRIu64")", conn->identity);
+ edge->conn = conn;
+}
+
+
+//
+// The router is in edge mode and the connection to the interior router
+// has closed
+//
+void qdr_edge_connection_closed(qdr_edge_t *edge)
+{
+ qd_log(edge->core->log, QD_LOG_TRACE,
+ "edge connection to interior closed");
+ edge->conn = NULL;
+}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/75a69f34/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index 4e3e442..580cb92 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -47,6 +47,10 @@ qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area,
core->router_mode = mode;
core->router_area = area;
core->router_id = id;
+
+ if (mode == QD_ROUTER_MODE_EDGE)
+ core->edge = qdr_edge(core);
+
DEQ_INIT(core->exchanges);
//
@@ -167,6 +171,8 @@ void qdr_core_free(qdr_core_t *core)
if (core->data_links_by_mask_bit) free(core->data_links_by_mask_bit);
if (core->neighbor_free_mask) qd_bitmask_free(core->neighbor_free_mask);
+ qdr_edge_free(core->edge);
+
free(core);
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/75a69f34/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 5e3f4c2..7d9b7e1 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -38,6 +38,7 @@ typedef struct qdr_auto_link_t qdr_auto_link_t;
typedef struct qdr_conn_identifier_t qdr_conn_identifier_t;
typedef struct qdr_connection_ref_t qdr_connection_ref_t;
typedef struct qdr_exchange qdr_exchange_t;
+typedef struct qdr_edge_t qdr_edge_t;
qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_treatment_t treatment);
int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t *msg, qdr_delivery_t *in_delivery,
@@ -679,6 +680,8 @@ struct qdr_core_t {
sys_cond_t *action_cond;
sys_mutex_t *action_lock;
+ qdr_edge_t *edge; // if router_mode is edge router
+
sys_mutex_t *work_lock;
qdr_core_timer_list_t scheduled_timers;
qdr_general_work_list_t work_list;
@@ -788,7 +791,6 @@ struct qdr_terminus_t {
ALLOC_DECLARE(qdr_terminus_t);
-
void *router_core_thread(void *arg);
uint64_t qdr_identifier(qdr_core_t* core);
void qdr_management_agent_on_message(void *context, qd_message_t *msg, int link_id, int cost);
@@ -849,6 +851,10 @@ void qdr_connection_free(qdr_connection_t *conn);
void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn);
qd_address_treatment_t qdr_treatment_for_address_CT(qdr_core_t *core, qdr_connection_t *conn, qd_iterator_t *iter, int *in_phase, int *out_phase);
qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, qd_iterator_t *iter);
+qdr_edge_t *qdr_edge(qdr_core_t *);
+void qdr_edge_free(qdr_edge_t *);
+void qdr_edge_connection_opened(qdr_edge_t *edge, qdr_connection_t *conn);
+void qdr_edge_connection_closed(qdr_edge_t *edge);
void qdr_connection_enqueue_work_CT(qdr_core_t *core,
qdr_connection_t *conn,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org