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