You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2016/04/26 20:43:02 UTC

qpid-dispatch git commit: DISPATCH-284 - Added a connection id to the link which can be used to linked back to the identity of the connection

Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 387044be4 -> d5d9b6845


DISPATCH-284 - Added a connection id to the link which can be used to linked back to the identity of the connection


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

Branch: refs/heads/master
Commit: d5d9b6845af60eb833e878cfb7a8aff9d755ba10
Parents: 387044b
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Tue Apr 26 14:42:40 2016 -0400
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Tue Apr 26 14:42:40 2016 -0400

----------------------------------------------------------------------
 include/qpid/dispatch/router_core.h               |  2 ++
 include/qpid/dispatch/server.h                    |  9 +++++++++
 python/qpid_dispatch_internal/management/agent.py | 10 ++++++++--
 src/router_core/agent_link.c                      | 11 ++++++++---
 src/router_core/agent_link.h                      |  2 +-
 src/router_core/connections.c                     |  2 ++
 src/router_core/router_core_private.h             |  1 +
 src/router_node.c                                 |  3 ++-
 src/server.c                                      |  6 ++++++
 tests/system_test.py                              |  2 +-
 tests/system_tests_management.py                  |  6 +++++-
 tools/qdstat                                      |  4 ++++
 12 files changed, 49 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 951bb21..6784b67 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -151,6 +151,7 @@ typedef enum {
  * @param incoming True iff this connection is associated with a listener, False if a connector
  * @param role The configured role of this connection
  * @param cost If the role is inter_router, this is the configured cost for the connection.
+ * @param management_id - A unique identifier that is used in management and logging operations.
  * @param label Optional label provided in the connection's configuration.  This is used to 
  *        correlate the connection with waypoints and link-route destinations that use the connection.
  * @param strip_annotations_in True if configured to remove annotations on inbound messages.
@@ -162,6 +163,7 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
                                         bool                   incoming,
                                         qdr_connection_role_t  role,
                                         int                    cost,
+                                        uint64_t               management_id,
                                         const char            *label,
                                         const char            *remote_container_id,
                                         bool                   strip_annotations_in,

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/include/qpid/dispatch/server.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/server.h b/include/qpid/dispatch/server.h
index 4683288..2a8e34a 100644
--- a/include/qpid/dispatch/server.h
+++ b/include/qpid/dispatch/server.h
@@ -564,6 +564,15 @@ pn_collector_t *qd_connection_collector(qd_connection_t *conn);
 
 
 /**
+ * Get the connection id of a connection.
+ *
+ * @param conn Connection object supplied in QD_CONN_EVENT_{LISTENER,CONNETOR}_OPEN
+ * @return The connection_id associated with the connection.
+ */
+uint64_t qd_connection_connection_id(qd_connection_t *conn);
+
+
+/**
  * Get the configuration that was used in the setup of this connection.
  *
  * @param conn Connection object supplied in QD_CONN_EVENT_{LISTENER,CONNETOR}_OPEN

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/python/qpid_dispatch_internal/management/agent.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/management/agent.py b/python/qpid_dispatch_internal/management/agent.py
index b050b8a..1c91dc3 100644
--- a/python/qpid_dispatch_internal/management/agent.py
+++ b/python/qpid_dispatch_internal/management/agent.py
@@ -161,9 +161,15 @@ class EntityAdapter(SchemaEntity):
     def validate(self, **kwargs):
         """Set default identity and name if not already set, then do schema validation"""
         identity = self.attributes.get("identity")
-        if not identity:
+        name = self.attributes.get("name")
+        if identity:
+            if not name:
+                self.attributes[u"name"] = "%s/%s" % (self.entity_type.short_name, self._identifier())
+        else:
             self.attributes[u"identity"] = "%s/%s" % (self.entity_type.short_name, self._identifier())
-        self.attributes.setdefault(u'name', self.attributes[u'identity'])
+            if not name:
+                self.attributes.setdefault(u'name', self.attributes[u'identity'])
+
         super(EntityAdapter, self).validate(**kwargs)
 
     def _identifier(self):

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/src/router_core/agent_link.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_link.c b/src/router_core/agent_link.c
index 6830367..9204565 100644
--- a/src/router_core/agent_link.c
+++ b/src/router_core/agent_link.c
@@ -33,8 +33,9 @@
 #define QDR_LINK_UNDELIVERED_COUNT  9
 #define QDR_LINK_UNSETTLED_COUNT    10
 #define QDR_LINK_DELIVERY_COUNT     11
-#define QDR_LINK_ADMIN_STATE        12
-#define QDR_LINK_OPER_STATE         13
+#define QDR_LINK_CONNECTION_ID      12
+#define QDR_LINK_ADMIN_STATE        13
+#define QDR_LINK_OPER_STATE         14
 
 const char *qdr_link_columns[] =
     {"name",
@@ -49,6 +50,7 @@ const char *qdr_link_columns[] =
      "undeliveredCount",
      "unsettledCount",
      "deliveryCount",
+     "connectionId", // The connection id of the owner connection
      "adminStatus",
      "operStatus",
      0};
@@ -90,7 +92,6 @@ static void qdr_agent_write_column_CT(qd_composed_field_t *body, int col, qdr_li
             break;
         }
 
-
         case QDR_LINK_TYPE:
             qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.link");
             break;
@@ -139,6 +140,10 @@ static void qdr_agent_write_column_CT(qd_composed_field_t *body, int col, qdr_li
             qd_compose_insert_ulong(body, link->total_deliveries);
             break;
 
+        case QDR_LINK_CONNECTION_ID:
+            qd_compose_insert_ulong(body, link->conn->management_id);
+            break;
+
         case QDR_LINK_ADMIN_STATE:
             text = link->admin_enabled ? "enabled" : "disabled";
             qd_compose_insert_string(body, text);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/src/router_core/agent_link.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_link.h b/src/router_core/agent_link.h
index 9cdf391..db1f88a 100644
--- a/src/router_core/agent_link.h
+++ b/src/router_core/agent_link.h
@@ -29,7 +29,7 @@ void qdra_link_update_CT(qdr_core_t          *core,
                          qdr_query_t         *query,
                          qd_parsed_field_t   *in_body);
 
-#define QDR_LINK_COLUMN_COUNT  14
+#define QDR_LINK_COLUMN_COUNT  15
 
 const char *qdr_link_columns[QDR_LINK_COLUMN_COUNT + 1];
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index e762a85..69379b1 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -59,6 +59,7 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
                                         bool                   incoming,
                                         qdr_connection_role_t  role,
                                         int                    cost,
+                                        uint64_t               management_id,
                                         const char            *label,
                                         const char            *remote_container_id,
                                         bool                   strip_annotations_in,
@@ -77,6 +78,7 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t            *core,
     conn->strip_annotations_in  = strip_annotations_in;
     conn->strip_annotations_out = strip_annotations_out;
     conn->link_capacity         = link_capacity;
+    conn->management_id         = management_id;
     conn->mask_bit              = -1;
     DEQ_INIT(conn->links);
     DEQ_INIT(conn->work_list);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/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 061e346..a3e0b17 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -425,6 +425,7 @@ struct qdr_connection_t {
     bool                        strip_annotations_out;
     int                         link_capacity;
     int                         mask_bit;
+    uint64_t                    management_id; // A unique identifier for the qdr_connection_t copied over from qd_connection_t.
     qdr_connection_work_list_t  work_list;
     sys_mutex_t                *work_lock;
     qdr_link_ref_list_t         links;

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index a6431fe..c3ef5c2 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -505,6 +505,7 @@ static void AMQP_opened_handler(qd_router_t *router, qd_connection_t *conn, bool
     bool                   strip_annotations_out = false;
     int                    link_capacity = 1;
     const char            *name = 0;
+    uint64_t               connection_id = qd_connection_connection_id(conn);
     pn_connection_t       *pn_conn = qd_connection_pn(conn);
 
     qd_router_connection_get_config(conn, &role, &cost, &name,
@@ -542,7 +543,7 @@ static void AMQP_opened_handler(qd_router_t *router, qd_connection_t *conn, bool
             cost = remote_cost;
     }
 
-    qdr_connection_t *qdrc = qdr_connection_opened(router->router_core, inbound, role, cost, name,
+    qdr_connection_t *qdrc = qdr_connection_opened(router->router_core, inbound, role, cost, connection_id, name,
                                                    pn_connection_remote_container(pn_conn),
                                                    strip_annotations_in, strip_annotations_out, link_capacity);
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/src/server.c
----------------------------------------------------------------------
diff --git a/src/server.c b/src/server.c
index 7750056..c761720 100644
--- a/src/server.c
+++ b/src/server.c
@@ -368,6 +368,7 @@ qd_error_t qd_entity_refresh_connection(qd_entity_t* entity, void *impl)
         qd_entity_set_string(entity, "role", config->role) == 0 &&
         qd_entity_set_string(entity, "dir", conn->connector ? "out" : "in") == 0 &&
         qd_entity_set_string(entity, "user", user) == 0 &&
+        qd_entity_set_long(entity, "identity", conn->connection_id) == 0 &&
         qd_entity_set_bool(entity, "isAuthenticated", tport && pn_transport_is_authenticated(tport)) == 0 &&
         qd_entity_set_bool(entity, "isEncrypted", tport && pn_transport_is_encrypted(tport)) == 0 &&
         qd_entity_set_bool(entity, "ssl", ssl != 0) == 0) {
@@ -1529,6 +1530,11 @@ pn_collector_t *qd_connection_collector(qd_connection_t *conn)
     return conn->collector;
 }
 
+uint64_t qd_connection_connection_id(qd_connection_t *conn)
+{
+    return conn->connection_id;
+}
+
 
 const qd_server_config_t *qd_connection_config(const qd_connection_t *conn)
 {

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/tests/system_test.py
----------------------------------------------------------------------
diff --git a/tests/system_test.py b/tests/system_test.py
index 3061e3e..be9b262 100755
--- a/tests/system_test.py
+++ b/tests/system_test.py
@@ -440,7 +440,7 @@ class Qdrouterd(Process):
         """If router has a connection to host:port return the management info.
         Otherwise return None"""
         try:
-            return self.management.read(identity="connection/%s:%s" % (host, port))
+            return self.management.read(name="connection/%s:%s" % (host, port))
         except:
             return False
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/tests/system_tests_management.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_management.py b/tests/system_tests_management.py
index c24ac35..ead40ac 100644
--- a/tests/system_tests_management.py
+++ b/tests/system_tests_management.py
@@ -364,7 +364,11 @@ class ManagementTest(system_test.TestCase):
             if e.type == MANAGEMENT:
                 self.assertEqual(e.identity, "self")
             else:
-                self.assertRegexpMatches(e.identity, "^%s/" % short_name(e.type), e)
+                if e.type == 'org.apache.qpid.dispatch.connection':
+                    # This will make sure that the identity of the connection object is always numeric
+                    self.assertRegexpMatches(str(e.identity), "[1-9]+", e)
+                else:
+                    self.assertRegexpMatches(e.identity, "^%s/" % short_name(e.type), e)
 
     def test_remote_node(self):
         """Test that we can access management info of remote nodes using get_mgmt_nodes addresses"""

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d5d9b684/tools/qdstat
----------------------------------------------------------------------
diff --git a/tools/qdstat b/tools/qdstat
index 3dd1668..3d733d6 100755
--- a/tools/qdstat
+++ b/tools/qdstat
@@ -109,6 +109,7 @@ class BusManager(Node):
     def displayConnections(self):
         disp = Display(prefix="  ")
         heads = []
+        heads.append(Header("Id"))
         heads.append(Header("host"))
         heads.append(Header("container"))
         heads.append(Header("role"))
@@ -122,6 +123,7 @@ class BusManager(Node):
 
         for conn in objects:
             row = []
+            row.append(conn.identity)
             row.append(conn.host)
             row.append(conn.container)
             row.append(conn.role)
@@ -214,6 +216,7 @@ class BusManager(Node):
         heads = []
         heads.append(Header("type"))
         heads.append(Header("dir"))
+        heads.append(Header("conn id"))
         heads.append(Header("id"))
         heads.append(Header("peer"))
         heads.append(Header("class"))
@@ -235,6 +238,7 @@ class BusManager(Node):
             row = []
             row.append(link.linkType)
             row.append(link.linkDir)
+            row.append(link.connectionId)
             row.append(link.identity)
             row.append(link.peer)
             row.append(self._addr_class(link.owningAddr))


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