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 <cro...@redhat.com> Authored: Mon Sep 10 16:23:48 2018 -0400 Committer: Chuck Rolke <cro...@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-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org