You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2018/09/10 20:30:27 UTC

qpid-dispatch git commit: DISPATCH-1107: Add router connection id interrouter Opens

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 447937f37 -> df7667e8a


DISPATCH-1107: Add router connection id interrouter Opens

This feature helps disambiguate interrouter connections.
Topology tests generate many connections and resulting logs have the
connection ids. There is nothing topology-specific about this feature.


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

Branch: refs/heads/master
Commit: df7667e8a9fa2ad6a2dd2ca91fe6f4a45b4d4f3c
Parents: 447937f
Author: Chuck Rolke <cr...@redhat.com>
Authored: Mon Sep 10 16:23:48 2018 -0400
Committer: Chuck Rolke <cr...@redhat.com>
Committed: Mon Sep 10 16:23:48 2018 -0400

----------------------------------------------------------------------
 include/qpid/dispatch/amqp.h               |  1 +
 src/amqp.c                                 |  1 +
 src/server.c                               |  5 ++++
 tests/system_tests_topology_disposition.py | 37 ++++++++++++++++++++++++-
 4 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/df7667e8/include/qpid/dispatch/amqp.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/amqp.h b/include/qpid/dispatch/amqp.h
index 393cf57..3820726 100644
--- a/include/qpid/dispatch/amqp.h
+++ b/include/qpid/dispatch/amqp.h
@@ -139,6 +139,7 @@ extern const char * const QD_CONNECTION_PROPERTY_PRODUCT_KEY;
 extern const char * const QD_CONNECTION_PROPERTY_PRODUCT_VALUE;
 extern const char * const QD_CONNECTION_PROPERTY_VERSION_KEY;
 extern const char * const QD_CONNECTION_PROPERTY_COST_KEY;
+extern const char * const QD_CONNECTION_PROPERTY_CONN_ID;
 extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_LIST_KEY;
 extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_NETHOST_KEY;
 extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_PORT_KEY;

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/df7667e8/src/amqp.c
----------------------------------------------------------------------
diff --git a/src/amqp.c b/src/amqp.c
index fcad53a..16550a7 100644
--- a/src/amqp.c
+++ b/src/amqp.c
@@ -42,6 +42,7 @@ const char * const QD_CONNECTION_PROPERTY_PRODUCT_KEY           = "product";
 const char * const QD_CONNECTION_PROPERTY_PRODUCT_VALUE         = "qpid-dispatch-router";
 const char * const QD_CONNECTION_PROPERTY_VERSION_KEY           = "version";
 const char * const QD_CONNECTION_PROPERTY_COST_KEY              = "qd.inter-router-cost";
+const char * const QD_CONNECTION_PROPERTY_CONN_ID               = "qd.conn-id";
 const char * const QD_CONNECTION_PROPERTY_FAILOVER_LIST_KEY     = "failover-server-list";
 const char * const QD_CONNECTION_PROPERTY_FAILOVER_NETHOST_KEY  = "network-host";
 const char * const QD_CONNECTION_PROPERTY_FAILOVER_PORT_KEY     = "port";

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/df7667e8/src/server.c
----------------------------------------------------------------------
diff --git a/src/server.c b/src/server.c
index ab9ca92..a2bb8ea 100644
--- a/src/server.c
+++ b/src/server.c
@@ -447,6 +447,11 @@ static void decorate_connection(qd_server_t *qd_server, pn_connection_t *conn, c
     pn_data_put_string(pn_connection_properties(conn),
                        pn_bytes(strlen(QPID_DISPATCH_VERSION), QPID_DISPATCH_VERSION));
 
+    pn_data_put_symbol(pn_connection_properties(conn),
+                       pn_bytes(strlen(QD_CONNECTION_PROPERTY_CONN_ID), QD_CONNECTION_PROPERTY_CONN_ID));
+    qd_connection_t *qd_conn = pn_connection_get_context(conn);
+    pn_data_put_int(pn_connection_properties(conn), qd_conn->connection_id);
+
     if (config && config->inter_router_cost > 1) {
         pn_data_put_symbol(pn_connection_properties(conn),
                            pn_bytes(strlen(QD_CONNECTION_PROPERTY_COST_KEY), QD_CONNECTION_PROPERTY_COST_KEY));

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/df7667e8/tests/system_tests_topology_disposition.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_topology_disposition.py b/tests/system_tests_topology_disposition.py
index 1b0d922..a701c6d 100644
--- a/tests/system_tests_topology_disposition.py
+++ b/tests/system_tests_topology_disposition.py
@@ -370,7 +370,8 @@ class TopologyDispositionTests ( TestCase ):
 
         # 1 means skip that test.
         cls.skip = { 'test_01' : 0,
-                     'test_02' : 0
+                     'test_02' : 0,
+                     'test_03' : 0
                    }
 
 
@@ -399,6 +400,40 @@ class TopologyDispositionTests ( TestCase ):
         self.assertEqual ( None, test.error )
 
 
+    def test_03_connection_id_propagation ( self ):
+        name = 'test_03'
+        error = None
+        if self.skip [ name ] :
+            self.skipTest ( "Test skipped during development." )
+        st_key = "SERVER (trace) ["
+        qc_key = "qd.conn-id\"="
+        for letter in ['A', 'B', 'C', 'D']:
+            log_name = ('../setUpClass/%s.log' % letter)
+            with  open(log_name, 'r') as router_log:
+                log_lines = router_log.read().split("\n")
+                outbound_opens = [s for s in log_lines if "-> @open" in s]
+                for oopen in outbound_opens:
+                    sti = oopen.find(st_key)
+                    if sti < 0:
+                        error = "Log %s, line '%s' has no SERVER key" % (log_name, oopen)
+                        break
+                    qci = oopen.find(qc_key)
+                    if qci < 0:
+                        error = "Log %s, line '%s' has no qd.conn-id key" % (log_name, oopen)
+                        break
+                    sti += len(st_key)
+                    qci += len(qc_key)
+                    while not oopen[sti] == "]":
+                        if not oopen[sti] == oopen[qci]:
+                            error = "log %s, line '%s' server conn_id != published conn-id" % (log_name, oopen)
+                            break
+                        sti += 1
+                        qci += 1
+                    if oopen[qci].isdigit():
+                        error = "log %s, line '%s' published conn-id is too big" % (log_name, oopen)
+                self.assertEqual(None, error)
+            self.assertEqual ( None, error )
+
 
 #################################################################
 #     Tests


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