You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2018/02/27 22:15:44 UTC
qpid-dispatch git commit: DISPATCH-911 - (from Ganesh Murthy) Add
global delivery counts This closes #254
Repository: qpid-dispatch
Updated Branches:
refs/heads/master 257321d0f -> b6805c0ce
DISPATCH-911 - (from Ganesh Murthy) Add global delivery counts
This closes #254
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/b6805c0c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/b6805c0c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/b6805c0c
Branch: refs/heads/master
Commit: b6805c0ce324b15dcd29937978cbb303c08c5394
Parents: 257321d
Author: Ted Ross <tr...@redhat.com>
Authored: Tue Feb 27 17:07:49 2018 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Tue Feb 27 17:09:58 2018 -0500
----------------------------------------------------------------------
include/qpid/dispatch/router_core.h | 2 +
python/qpid_dispatch/management/qdrouter.json | 67 ++++++++++++++++++++-
src/router_core/agent_address.c | 46 +++++++++------
src/router_core/agent_address.h | 2 +-
src/router_core/agent_router.c | 68 ++++++++++++++++++++++
src/router_core/agent_router.h | 2 +-
src/router_core/connections.c | 5 ++
src/router_core/forwarder.c | 28 +++++++--
src/router_core/router_core_private.h | 19 ++++++
src/router_core/transfer.c | 37 ++++++++++--
src/router_node.c | 1 -
tests/system_tests_autolinks.py | 51 +++++++++++++++-
tests/system_tests_default_distribution.py | 12 ++--
tests/system_tests_one_router.py | 52 +++++++++++++++--
tests/system_tests_qdstat.py | 12 ++--
tests/system_tests_two_routers.py | 16 ++++-
tools/qdstat | 13 +++++
17 files changed, 380 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 18dbc34..63e3f46 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -187,6 +187,8 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t *core,
*/
void qdr_connection_closed(qdr_connection_t *conn);
+bool qdr_connection_route_container(qdr_connection_t *conn);
+
/**
* qdr_connection_set_context
*
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/python/qpid_dispatch/management/qdrouter.json
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json
index ebe5291..4da4ccf 100644
--- a/python/qpid_dispatch/management/qdrouter.json
+++ b/python/qpid_dispatch/management/qdrouter.json
@@ -462,18 +462,71 @@
"graph": true
},
+ "presettledDeliveries": {
+ "type": "integer",
+ "description":"Number of presettled deliveries handled by the router.",
+ "graph": true
+ },
+ "droppedPresettledDeliveries": {
+ "type": "integer",
+ "description":"Number of presettled deliveries that were dropped by the router.",
+ "graph": true
+ },
+ "acceptedDeliveries": {
+ "type": "integer",
+ "description":"Number of deliveries whose delivery state was set to ACCEPTED by the router. These deliveries were successfully processed by the router.",
+ "graph": true
+ },
+ "rejectedDeliveries": {
+ "type": "integer",
+ "description":"Number of deliveries whose delivery state was set to REJECTED by the router. These deliveries were Invalid and unprocessable.",
+ "graph": true
+ },
+ "releasedDeliveries": {
+ "type": "integer",
+ "description":"Number of deliveries whose delivery state was set to RELEASED by the router. These deliveries was not (and will not be) processed",
+ "graph": true
+ },
+ "modifiedDeliveries": {
+ "type": "integer",
+ "description":"Number of deliveries whose delivery state was set to MODIFIED by the router. These deliveries were modified but not processed.",
+ "graph": true
+ },
+ "deliveriesIngress": {
+ "type": "integer",
+ "description":"Number of deliveries that were sent to it by a sender that is directly attached to the router.",
+ "graph": true
+ },
+ "deliveriesEgress": {
+ "type": "integer",
+ "description":"Number of deliveries that were sent by the router to a receiver that is directly attached to the router.",
+ "graph": true
+ },
+ "deliveriesTransit": {
+ "type": "integer",
+ "description":"Number of deliveries that were sent to another router in the network.",
+ "graph": true
+ },
+ "deliveriesIngressRouteContainer": {
+ "type": "integer",
+ "description":"Number of deliveries that were received from router container connections.",
+ "graph": true
+ },
+ "deliveriesEgressRouteContainer": {
+ "type": "integer",
+ "description":"Number of deliveries that were sent to route container connections.",
+ "graph": true
+ },
"workerThreads": {
"type": "integer",
"default": 4,
"description": "The number of threads that will be created to process message traffic and other application work (timers, non-amqp file descriptors, etc.) .",
"create": true
-
},
"debugDump": {
"type": "path",
"description": "A file to dump debugging information that can't be logged normally.",
"create": true
-
},
"saslConfigPath": {
"type": "path",
@@ -1265,6 +1318,16 @@
"description": "The number of deliveries to this address that were originated from an in-process entity",
"graph": true
},
+ "deliveriesIngressRouteContainer": {
+ "type": "integer",
+ "description": "Number of deliveries that were received from a route-container address.",
+ "graph": true
+ },
+ "deliveriesEgressRouteContainer": {
+ "type": "integer",
+ "description": "Number of deliveries that were sent to a route-container address.",
+ "graph": true
+ },
"key": {
"description": "Internal unique (to this router) key to identify the address",
"type": "string"
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/agent_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c
index 72fb310..c9f2dde 100644
--- a/src/router_core/agent_address.c
+++ b/src/router_core/agent_address.c
@@ -20,23 +20,25 @@
#include "agent_address.h"
#include "router_core_private.h"
-#define QDR_ADDRESS_NAME 0
-#define QDR_ADDRESS_IDENTITY 1
-#define QDR_ADDRESS_TYPE 2
-#define QDR_ADDRESS_KEY 3
-#define QDR_ADDRESS_DISTRIBUTION 4
-#define QDR_ADDRESS_IN_PROCESS 5
-#define QDR_ADDRESS_SUBSCRIBER_COUNT 6
-#define QDR_ADDRESS_REMOTE_COUNT 7
-#define QDR_ADDRESS_CONTAINER_COUNT 8
-#define QDR_ADDRESS_REMOTE_HOST_ROUTERS 9
-#define QDR_ADDRESS_DELIVERIES_INGRESS 10
-#define QDR_ADDRESS_DELIVERIES_EGRESS 11
-#define QDR_ADDRESS_DELIVERIES_TRANSIT 12
-#define QDR_ADDRESS_DELIVERIES_TO_CONTAINER 13
-#define QDR_ADDRESS_DELIVERIES_FROM_CONTAINER 14
-#define QDR_ADDRESS_TRANSIT_OUTSTANDING 15
-#define QDR_ADDRESS_TRACKED_DELIVERIES 16
+#define QDR_ADDRESS_NAME 0
+#define QDR_ADDRESS_IDENTITY 1
+#define QDR_ADDRESS_TYPE 2
+#define QDR_ADDRESS_KEY 3
+#define QDR_ADDRESS_DISTRIBUTION 4
+#define QDR_ADDRESS_IN_PROCESS 5
+#define QDR_ADDRESS_SUBSCRIBER_COUNT 6
+#define QDR_ADDRESS_REMOTE_COUNT 7
+#define QDR_ADDRESS_CONTAINER_COUNT 8
+#define QDR_ADDRESS_REMOTE_HOST_ROUTERS 9
+#define QDR_ADDRESS_DELIVERIES_INGRESS 10
+#define QDR_ADDRESS_DELIVERIES_EGRESS 11
+#define QDR_ADDRESS_DELIVERIES_TRANSIT 12
+#define QDR_ADDRESS_DELIVERIES_TO_CONTAINER 13
+#define QDR_ADDRESS_DELIVERIES_FROM_CONTAINER 14
+#define QDR_ADDRESS_DELIVERIES_EGRESS_ROUTE_CONTAINER 15
+#define QDR_ADDRESS_DELIVERIES_INGRESS_ROUTE_CONTAINER 16
+#define QDR_ADDRESS_TRANSIT_OUTSTANDING 17
+#define QDR_ADDRESS_TRACKED_DELIVERIES 18
const char *qdr_address_columns[] =
{"name",
@@ -54,6 +56,8 @@ const char *qdr_address_columns[] =
"deliveriesTransit",
"deliveriesToContainer",
"deliveriesFromContainer",
+ "deliveriesEgressRouteContainer",
+ "deliveriesIngressRouteContainer",
"transitOutstanding",
"trackedDeliveries",
0};
@@ -141,6 +145,14 @@ static void qdr_insert_address_columns_CT(qdr_core_t *core,
qd_compose_insert_ulong(body, addr->deliveries_from_container);
break;
+ case QDR_ADDRESS_DELIVERIES_EGRESS_ROUTE_CONTAINER:
+ qd_compose_insert_ulong(body, addr->deliveries_egress_route_container);
+ break;
+
+ case QDR_ADDRESS_DELIVERIES_INGRESS_ROUTE_CONTAINER:
+ qd_compose_insert_ulong(body, addr->deliveries_ingress_route_container);
+ break;
+
case QDR_ADDRESS_TRANSIT_OUTSTANDING:
if (addr->outstanding_deliveries) {
qd_compose_start_list(body);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/agent_address.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h
index d9bde2c..b326837 100644
--- a/src/router_core/agent_address.h
+++ b/src/router_core/agent_address.h
@@ -31,7 +31,7 @@ void qdra_address_get_CT(qdr_core_t *core,
const char *qdr_address_columns[]);
-#define QDR_ADDRESS_COLUMN_COUNT 17
+#define QDR_ADDRESS_COLUMN_COUNT 19
const char *qdr_address_columns[QDR_ADDRESS_COLUMN_COUNT + 1];
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/agent_router.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_router.c b/src/router_core/agent_router.c
index b1e069a..6577bbf 100644
--- a/src/router_core/agent_router.c
+++ b/src/router_core/agent_router.c
@@ -45,6 +45,19 @@
#define QDR_ROUTER_SASL_CONFIG_NAME 20
#define QDR_ROUTER_CONNECTION_COUNT 21
+#define QDR_ROUTER_PRESETTLED_DELIVERIES 22
+#define QDR_ROUTER_DROPPED_PRESETTLED_DELIVERIES 23
+#define QDR_ROUTER_ACCEPTED_DELIVERIES 24
+#define QDR_ROUTER_REJECTED_DELIVERIES 25
+#define QDR_ROUTER_RELEASED_DELIVERIES 26
+#define QDR_ROUTER_MODIFIED_DELIVERIES 27
+#define QDR_ROUTER_DELIVERIES_INGRESS 28
+#define QDR_ROUTER_DELIVERIES_EGRESS 29
+#define QDR_ROUTER_DELIVERIES_TRANSIT 30
+#define QDR_ROUTER_DELIVERIES_INGRESS_ROUTE_CONTAINER 31
+#define QDR_ROUTER_DELIVERIES_EGRESS_ROUTE_CONTAINER 32
+
+
const char *qdr_router_columns[] =
{"name",
"identity",
@@ -68,6 +81,17 @@ const char *qdr_router_columns[] =
"saslConfigPath",
"saslConfigName",
"connectionCount",
+ "presettledDeliveries",
+ "droppedPresettledDeliveries",
+ "acceptedDeliveries",
+ "rejectedDeliveries",
+ "releasedDeliveries",
+ "modifiedDeliveries",
+ "deliveriesIngress",
+ "deliveriesEgress",
+ "deliveriesTransit",
+ "deliveriesIngressRouteContainer",
+ "deliveriesEgressRouteContainer",
0};
@@ -147,6 +171,50 @@ static void qdr_agent_write_column_CT(qd_composed_field_t *body, int col, qdr_co
qd_compose_insert_null(body);
break;
+ case QDR_ROUTER_PRESETTLED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->presettled_deliveries);
+ break;
+
+ case QDR_ROUTER_DROPPED_PRESETTLED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->dropped_presettled_deliveries);
+ break;
+
+ case QDR_ROUTER_ACCEPTED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->accepted_deliveries);
+ break;
+
+ case QDR_ROUTER_REJECTED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->rejected_deliveries);
+ break;
+
+ case QDR_ROUTER_RELEASED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->released_deliveries);
+ break;
+
+ case QDR_ROUTER_MODIFIED_DELIVERIES:
+ qd_compose_insert_ulong(body, core->modified_deliveries);
+ break;
+
+ case QDR_ROUTER_DELIVERIES_INGRESS:
+ qd_compose_insert_ulong(body, core->deliveries_ingress);
+ break;
+
+ case QDR_ROUTER_DELIVERIES_EGRESS:
+ qd_compose_insert_ulong(body, core->deliveries_egress);
+ break;
+
+ case QDR_ROUTER_DELIVERIES_TRANSIT:
+ qd_compose_insert_ulong(body, core->deliveries_transit);
+ break;
+
+ case QDR_ROUTER_DELIVERIES_INGRESS_ROUTE_CONTAINER:
+ qd_compose_insert_ulong(body, core->deliveries_ingress_route_container);
+ break;
+
+ case QDR_ROUTER_DELIVERIES_EGRESS_ROUTE_CONTAINER:
+ qd_compose_insert_ulong(body, core->deliveries_egress_route_container);
+ break;
+
default:
qd_compose_insert_null(body);
break;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/agent_router.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_router.h b/src/router_core/agent_router.h
index 3dc55b5..6cb9b18 100644
--- a/src/router_core/agent_router.h
+++ b/src/router_core/agent_router.h
@@ -21,7 +21,7 @@
#include "router_core_private.h"
-#define QDR_ROUTER_COLUMN_COUNT 22
+#define QDR_ROUTER_COLUMN_COUNT 33
const char *qdr_router_columns[QDR_ROUTER_COLUMN_COUNT + 1];
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index dd7a2a4..00b0928 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -120,6 +120,11 @@ void qdr_connection_closed(qdr_connection_t *conn)
qdr_action_enqueue(conn->core, action);
}
+bool qdr_connection_route_container(qdr_connection_t *conn)
+{
+ return conn->role == QDR_ROLE_ROUTE_CONTAINER;
+}
+
void qdr_connection_set_context(qdr_connection_t *conn, void *context)
{
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/forwarder.c
----------------------------------------------------------------------
diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c
index db67998..3a0e3eb 100644
--- a/src/router_core/forwarder.c
+++ b/src/router_core/forwarder.c
@@ -165,7 +165,7 @@ static void qdr_forward_drop_presettled_CT_LH(qdr_core_t *core, qdr_link_t *link
// Increment the presettled_dropped_deliveries on the out_link
link->dropped_presettled_deliveries++;
-
+ core->dropped_presettled_deliveries++;
}
dlv = next;
}
@@ -279,8 +279,10 @@ int qdr_forward_multicast_CT(qdr_core_t *core,
qdr_delivery_t *out_delivery = qdr_forward_new_delivery_CT(core, in_delivery, out_link, msg);
qdr_forward_deliver_CT(core, out_link, out_delivery);
fanout++;
- if (out_link->link_type != QD_LINK_CONTROL && out_link->link_type != QD_LINK_ROUTER)
+ if (out_link->link_type != QD_LINK_CONTROL && out_link->link_type != QD_LINK_ROUTER) {
addr->deliveries_egress++;
+ core->deliveries_egress++;
+ }
link_ref = DEQ_NEXT(link_ref);
}
}
@@ -353,6 +355,7 @@ int qdr_forward_multicast_CT(qdr_core_t *core,
qdr_forward_deliver_CT(core, dest_link, out_delivery);
fanout++;
addr->deliveries_transit++;
+ core->deliveries_transit++;
}
}
@@ -482,6 +485,13 @@ int qdr_forward_closest_CT(qdr_core_t *core,
}
addr->deliveries_egress++;
+ core->deliveries_egress++;
+
+ if (qdr_connection_route_container(out_link->conn)) {
+ core->deliveries_egress_route_container++;
+ addr->deliveries_egress_route_container++;
+ }
+
return 1;
}
@@ -515,6 +525,7 @@ int qdr_forward_closest_CT(qdr_core_t *core,
out_delivery = qdr_forward_new_delivery_CT(core, in_delivery, out_link, msg);
qdr_forward_deliver_CT(core, out_link, out_delivery);
addr->deliveries_transit++;
+ core->deliveries_transit++;
return 1;
}
}
@@ -674,10 +685,19 @@ int qdr_forward_balanced_CT(qdr_core_t *core,
//
// Bump the appropriate counter based on where we sent the delivery.
//
- if (chosen_link_bit >= 0)
+ if (chosen_link_bit >= 0) {
addr->deliveries_transit++;
- else
+ core->deliveries_transit++;
+ }
+ else {
addr->deliveries_egress++;
+ core->deliveries_egress++;
+
+ if (qdr_connection_route_container(chosen_link->conn)) {
+ core->deliveries_egress_route_container++;
+ addr->deliveries_egress_route_container++;
+ }
+ }
return 1;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/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 415d494..9b7ba23 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -470,6 +470,9 @@ struct qdr_address_t {
uint64_t deliveries_transit;
uint64_t deliveries_to_container;
uint64_t deliveries_from_container;
+ uint64_t deliveries_egress_route_container;
+ uint64_t deliveries_ingress_route_container;
+
///@}
};
@@ -701,6 +704,22 @@ struct qdr_core_t {
sys_mutex_t *id_lock;
qdr_forwarder_t *forwarders[QD_TREATMENT_LINK_BALANCED + 1];
+
+
+ // Overall delivery counters
+ uint64_t presettled_deliveries;
+ uint64_t dropped_presettled_deliveries;
+ uint64_t accepted_deliveries;
+ uint64_t rejected_deliveries;
+ uint64_t released_deliveries;
+ uint64_t modified_deliveries;
+ uint64_t deliveries_ingress;
+ uint64_t deliveries_egress;
+ uint64_t deliveries_transit;
+ uint64_t deliveries_egress_route_container;
+ uint64_t deliveries_ingress_route_container;
+
+
};
void *router_core_thread(void *arg);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index 6f69772..182082e 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -520,16 +520,31 @@ static void qdr_delete_delivery_internal_CT(qdr_core_t *core, qdr_delivery_t *de
}
if (link) {
- if (delivery->presettled)
+ if (delivery->presettled) {
link->presettled_deliveries++;
- else if (delivery->disposition == PN_ACCEPTED)
+ if (link->link_direction == QD_INCOMING)
+ core->presettled_deliveries++;
+ }
+ else if (delivery->disposition == PN_ACCEPTED) {
link->accepted_deliveries++;
- else if (delivery->disposition == PN_REJECTED)
+ if (link->link_direction == QD_INCOMING)
+ core->accepted_deliveries++;
+ }
+ else if (delivery->disposition == PN_REJECTED) {
link->rejected_deliveries++;
- else if (delivery->disposition == PN_RELEASED)
+ if (link->link_direction == QD_INCOMING)
+ core->rejected_deliveries++;
+ }
+ else if (delivery->disposition == PN_RELEASED) {
link->released_deliveries++;
- else if (delivery->disposition == PN_MODIFIED)
+ if (link->link_direction == QD_INCOMING)
+ core->released_deliveries++;
+ }
+ else if (delivery->disposition == PN_MODIFIED) {
link->modified_deliveries++;
+ if (link->link_direction == QD_INCOMING)
+ core->modified_deliveries++;
+ }
}
//
@@ -764,6 +779,7 @@ static long qdr_addr_path_count_CT(qdr_address_t *addr)
static void qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *dlv, qdr_address_t *addr)
{
+ core->deliveries_ingress++;
bool receive_complete = qd_message_receive_complete(qdr_delivery_message(dlv));
if (addr && addr == link->owning_addr && qdr_addr_path_count_CT(addr) == 0) {
//
@@ -787,6 +803,7 @@ static void qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery
if (dlv->settled) {
// Increment the presettled_dropped_deliveries on the in_link
link->dropped_presettled_deliveries++;
+ core->dropped_presettled_deliveries++;
}
}
else {
@@ -801,8 +818,16 @@ static void qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery
if (addr) {
fanout = qdr_forward_message_CT(core, addr, dlv->msg, dlv, false, link->link_type == QD_LINK_CONTROL);
- if (link->link_type != QD_LINK_CONTROL && link->link_type != QD_LINK_ROUTER)
+ if (link->link_type != QD_LINK_CONTROL && link->link_type != QD_LINK_ROUTER) {
addr->deliveries_ingress++;
+
+ if (qdr_connection_route_container(link->conn)) {
+ addr->deliveries_ingress_route_container++;
+ core->deliveries_ingress_route_container++;
+
+ }
+
+ }
link->total_deliveries++;
}
//
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 81437cb..b8c4a6b 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -33,7 +33,6 @@
const char *QD_ROUTER_NODE_TYPE = "router.node";
const char *QD_ROUTER_ADDRESS_TYPE = "router.address";
const char *QD_ROUTER_LINK_TYPE = "router.link";
-const char *CORE_AGENT_ADDRESS = "$management";
static char *router_role = "inter-router";
static char *container_role = "route-container";
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tests/system_tests_autolinks.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_autolinks.py b/tests/system_tests_autolinks.py
index 07dc3f6..a2c1035 100644
--- a/tests/system_tests_autolinks.py
+++ b/tests/system_tests_autolinks.py
@@ -18,13 +18,17 @@
#
import unittest2 as unittest
+import json
from proton import Message
-from system_test import TestCase, Qdrouterd, main_module, TIMEOUT
+from system_test import TestCase, Qdrouterd, main_module, TIMEOUT, Process
from proton.handlers import MessagingHandler
from proton.reactor import Container
+from subprocess import PIPE, STDOUT
CONNECTION_PROPERTIES = {u'connection': u'properties', u'int_property': 6451}
+
+
class AutolinkTest(TestCase):
"""System tests involving a single router"""
@classmethod
@@ -75,6 +79,26 @@ class AutolinkTest(TestCase):
cls.normal_address = cls.router.addresses[0]
cls.route_address = cls.router.addresses[1]
+ def run_qdstat_general(self):
+ cmd = ['qdstat', '--bus', str(AutolinkTest.normal_address), '--timeout', str(TIMEOUT)] + ['-g']
+ p = self.popen(
+ cmd,
+ name='qdstat-'+self.id(), stdout=PIPE, expect=None)
+
+ out = p.communicate()[0]
+ assert p.returncode == 0, "qdstat exit status %s, output:\n%s" % (p.returncode, out)
+ return out
+
+ def run_qdmanage(self, cmd, input=None, expect=Process.EXIT_OK):
+ p = self.popen(
+ ['qdmanage'] + cmd.split(' ') + ['--bus', AutolinkTest.normal_address, '--indent=-1', '--timeout', str(TIMEOUT)],
+ stdin=PIPE, stdout=PIPE, stderr=STDOUT, expect=expect)
+ out = p.communicate(input)[0]
+ try:
+ p.teardown()
+ except Exception, e:
+ raise Exception("%s\n%s" % (e, out))
+ return out
def test_01_autolink_attach(self):
"""
@@ -85,7 +109,6 @@ class AutolinkTest(TestCase):
test.run()
self.assertEqual(None, test.error)
-
def test_02_autolink_credit(self):
"""
Create a normal connection and a sender to the autolink address. Then create the route-container
@@ -95,6 +118,12 @@ class AutolinkTest(TestCase):
test.run()
self.assertEqual(None, test.error)
+ long_type = 'org.apache.qpid.dispatch.router'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+
+ self.assertEqual(output[0]['deliveriesIngress'], 1)
+ self.assertEqual(output[0]['deliveriesEgress'], 0)
def test_03_autolink_sender(self):
"""
@@ -105,6 +134,15 @@ class AutolinkTest(TestCase):
test.run()
self.assertEqual(None, test.error)
+ long_type = 'org.apache.qpid.dispatch.router'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+ self.assertEqual(output[0]['deliveriesEgressRouteContainer'], 275)
+ self.assertEqual(output[0]['deliveriesIngressRouteContainer'], 0)
+ self.assertEqual(output[0]['deliveriesTransit'], 0)
+
+ self.assertEqual(output[0]['deliveriesIngress'], 277)
+ self.assertEqual(output[0]['deliveriesEgress'], 276)
def test_04_autolink_receiver(self):
"""
@@ -115,6 +153,15 @@ class AutolinkTest(TestCase):
test.run()
self.assertEqual(None, test.error)
+ long_type = 'org.apache.qpid.dispatch.router'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+ self.assertEqual(output[0]['deliveriesEgressRouteContainer'], 275)
+ self.assertEqual(output[0]['deliveriesIngressRouteContainer'], 275)
+ self.assertEqual(output[0]['deliveriesTransit'], 0)
+
+ self.assertEqual(output[0]['deliveriesIngress'], 553)
+ self.assertEqual(output[0]['deliveriesEgress'], 552)
def test_05_inter_container_transfer(self):
"""
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tests/system_tests_default_distribution.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_default_distribution.py b/tests/system_tests_default_distribution.py
index 6d66996..8d318e4 100644
--- a/tests/system_tests_default_distribution.py
+++ b/tests/system_tests_default_distribution.py
@@ -73,12 +73,12 @@ class DefaultDistributionTest(TestCase):
def test_general(self):
out = self.run_qdstat(['--general'], r'(?s)Router Statistics.*Mode\s*Standalone')
- self.assertTrue("Connections 1" in out)
- self.assertTrue("Nodes 0" in out)
- self.assertTrue("Auto Links 0" in out)
- self.assertTrue("Link Routes 0" in out)
- self.assertTrue("Router Id QDR" in out)
- self.assertTrue("Mode standalone" in out)
+ self.assertTrue("Connections 1" in out)
+ self.assertTrue("Nodes 0" in out)
+ self.assertTrue("Auto Links 0" in out)
+ self.assertTrue("Link Routes 0" in out)
+ self.assertTrue("Router Id QDR" in out)
+ self.assertTrue("Mode standalone" in out)
class Timeout(object):
def __init__(self, parent):
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tests/system_tests_one_router.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_one_router.py b/tests/system_tests_one_router.py
index 6a37e79..3d79160 100644
--- a/tests/system_tests_one_router.py
+++ b/tests/system_tests_one_router.py
@@ -152,7 +152,6 @@ class OneRouterTest(TestCase):
M3.stop()
M4.stop()
-
def test_02b_disp_to_closed_connection(self):
addr = self.address+"/pre_settled/2"
M1 = self.messenger()
@@ -1129,6 +1128,7 @@ class OneRouterTest(TestCase):
test = BatchedSettlementTest(self.address)
test.run()
self.assertEqual(None, test.error)
+ self.assertTrue(test.accepted_count_match)
def test_21_presettled_overflow(self):
test = PresettledOverflowTest(self.address)
@@ -1159,6 +1159,7 @@ class OneRouterTest(TestCase):
test = RejectDispositionTest(self.address)
test.run()
self.assertTrue(test.received_error)
+ self.assertTrue(test.reject_count_match)
def test_connection_properties_unicode_string(self):
"""
@@ -1314,6 +1315,7 @@ class ExcessDeliveriesReleasedTest(MessagingHandler):
self.error = "Expected 6 accepted, got %d" % self.n_accepted
if self.n_received != 6:
self.error = "Expected 6 received, got %d" % self.n_received
+
event.connection.close()
def on_message(self, event):
@@ -1559,6 +1561,18 @@ class MulticastUnsettledNoReceiverTest(MessagingHandler):
if result[5] == 'in' and 'multicast.MulticastNoReceiverTest' in result[6]:
if result[16] != 250:
self.error = "Expected 250 dropped presettled deliveries but got " + str(result[16])
+ else:
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+ pos = outs.attribute_names.index("droppedPresettledDeliveries")
+ results = outs.results[0]
+ if results[pos] != 250:
+ self.error = "When querying router, expected 250 dropped presettled " \
+ "deliveries but got " + str(results[pos])
+ else:
+ pos = outs.attribute_names.index("releasedDeliveries")
+ if results[pos] < 250:
+ self.error = "The number of released deliveries cannot be less that 250 " \
+ "but it is " + str(results[pos])
self.timer.cancel()
self.conn.close()
@@ -1602,8 +1616,13 @@ class ReleasedVsModifiedTest(MessagingHandler):
def check_if_done(self):
if self.n_received == self.accept and self.n_released == self.count - self.accept and self.n_modified == self.accept:
- self.timer.cancel()
- self.conn.close()
+ local_node = Node.connect(self.address, timeout=TIMEOUT)
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+ pos = outs.attribute_names.index("modifiedDeliveries")
+ results = outs.results[0]
+ if results[pos] == self.accept:
+ self.timer.cancel()
+ self.conn.close()
def timeout(self):
self.error = "Timeout Expired: sent=%d, received=%d, released=%d, modified=%d" % \
@@ -1709,9 +1728,17 @@ class BatchedSettlementTest(MessagingHandler):
self.n_received = 0
self.n_settled = 0
self.batch = []
+ self.accepted_count_match = False
def check_if_done(self):
if self.n_settled == self.count:
+ local_node = Node.connect(self.address, timeout=TIMEOUT)
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+ pos = outs.attribute_names.index("acceptedDeliveries")
+ results = outs.results[0]
+ if results >= self.count:
+ self.accepted_count_match = True
+
self.timer.cancel()
self.conn.close()
@@ -1855,7 +1882,14 @@ class PresettledOverflowTest(MessagingHandler):
if result[5] == 'out' and 'balanced.PresettledOverflow' in result[6]:
if result[16] != 250:
self.error = "Expected 250 dropped presettled deliveries but got " + str(result[16])
-
+ else:
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+ pos = outs.attribute_names.index("droppedPresettledDeliveries")
+ results = outs.results[0]
+ # There is 250 from a previous test
+ if results[pos] < 500:
+ self.error = "When querying router, expected 500 dropped presettled " \
+ "deliveries but got " + str(results[pos])
self.conn.close()
self.timer.cancel()
@@ -1872,7 +1906,7 @@ class RejectDispositionTest(MessagingHandler):
self.dest = "rejectDispositionTest"
self.error_description = 'you were out of luck this time!'
self.error_name = u'amqp:internal-error'
-
+ self.reject_count_match = False
def on_start(self, event):
conn = event.container.connect(self.address)
@@ -1888,6 +1922,14 @@ class RejectDispositionTest(MessagingHandler):
if event.delivery.remote.condition.description == self.error_description \
and event.delivery.remote.condition.name == self.error_name:
self.received_error = True
+
+ local_node = Node.connect(self.address, timeout=TIMEOUT)
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+ pos = outs.attribute_names.index("rejectedDeliveries")
+ results = outs.results[0]
+ if results[pos] == 2:
+ self.reject_count_match = True
+
event.connection.close()
def on_message(self, event):
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tests/system_tests_qdstat.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_qdstat.py b/tests/system_tests_qdstat.py
index 84000da..bf85220 100644
--- a/tests/system_tests_qdstat.py
+++ b/tests/system_tests_qdstat.py
@@ -53,12 +53,12 @@ class QdstatTest(system_test.TestCase):
def test_general(self):
out = self.run_qdstat(['--general'], r'(?s)Router Statistics.*Mode\s*Standalone')
- self.assertTrue("Connections 1" in out)
- self.assertTrue("Nodes 0" in out)
- self.assertTrue("Auto Links 0" in out)
- self.assertTrue("Link Routes 0" in out)
- self.assertTrue("Router Id QDR.A" in out)
- self.assertTrue("Mode standalone" in out)
+ self.assertTrue("Connections 1" in out)
+ self.assertTrue("Nodes 0" in out)
+ self.assertTrue("Auto Links 0" in out)
+ self.assertTrue("Link Routes 0" in out)
+ self.assertTrue("Router Id QDR.A" in out)
+ self.assertTrue("Mode standalone" in out)
def test_connections(self):
self.run_qdstat(['--connections'], r'host.*container.*role')
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tests/system_tests_two_routers.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_two_routers.py b/tests/system_tests_two_routers.py
index 7fae131..7aa3096 100644
--- a/tests/system_tests_two_routers.py
+++ b/tests/system_tests_two_routers.py
@@ -23,6 +23,7 @@ from proton import Message, PENDING, ACCEPTED, REJECTED, Timeout
from system_test import TestCase, Qdrouterd, main_module, TIMEOUT
from proton.handlers import MessagingHandler
from proton.reactor import Container
+from qpid_dispatch.management.client import Node
# PROTON-828:
try:
@@ -97,6 +98,9 @@ class TwoRouterTest(TestCase):
M1 = self.messenger()
M2 = self.messenger()
+ # Why 104 ? Choose a random number and use it to test later on.
+ num_msgs = 104
+
M1.route("amqp:/*", self.routers[0].addresses[0]+"/$1")
M2.route("amqp:/*", self.routers[1].addresses[0]+"/$1")
@@ -108,12 +112,12 @@ class TwoRouterTest(TestCase):
self.routers[0].wait_address("pre_settled.1", 0, 1)
tm.address = addr
- for i in range(100):
+ for i in range(num_msgs):
tm.body = {'number': i}
M1.put(tm)
M1.send()
- for i in range(100):
+ for i in range(num_msgs):
M2.recv(1)
M2.get(rm)
self.assertEqual(i, rm.body['number'])
@@ -121,6 +125,14 @@ class TwoRouterTest(TestCase):
M1.stop()
M2.stop()
+ local_node = Node.connect(self.routers[0].addresses[0], timeout=TIMEOUT)
+ outs = local_node.query(type='org.apache.qpid.dispatch.router')
+
+ # deliveriesTransit must most surely be greater than num_msgs
+ pos = outs.attribute_names.index("deliveriesTransit")
+ results = outs.results[0]
+ self.assertTrue(results[pos] > num_msgs)
+
def test_02a_multicast_unsettled(self):
addr = "amqp:/multicast.2"
M1 = self.messenger()
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b6805c0c/tools/qdstat
----------------------------------------------------------------------
diff --git a/tools/qdstat b/tools/qdstat
index 98862d7..93cc8cc 100755
--- a/tools/qdstat
+++ b/tools/qdstat
@@ -243,6 +243,19 @@ class BusManager(Node):
rows.append(('Addresses', router.addrCount))
rows.append(('Connections', router.connectionCount))
+ # Overall delivery related counts.
+ rows.append(('Presettled Count', router.presettledDeliveries))
+ rows.append(('Dropped Presettled Count', router.droppedPresettledDeliveries))
+ rows.append(('Accepted Count', router.acceptedDeliveries))
+ rows.append(('Rejected Count', router.rejectedDeliveries))
+ rows.append(('Released Count', router.releasedDeliveries))
+ rows.append(('Modified Count', router.modifiedDeliveries))
+ rows.append(('Ingress Count', router.deliveriesIngress))
+ rows.append(('Egress Count', router.deliveriesEgress))
+ rows.append(('Transit Count', router.deliveriesTransit))
+ rows.append(('Deliveries from Route Container', router.deliveriesIngressRouteContainer))
+ rows.append(('Deliveries to Route Container', router.deliveriesEgressRouteContainer))
+
title = "Router Statistics"
dispRows = rows
disp.formattedTable(title, heads, dispRows)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org