Repository: qpid-dispatch Updated Branches: refs/heads/tross-DISPATCH-179-1 7e5d714a8 -> 75390ae35
DISPATCH-179 - Added semantics to the address entity so it can be displayed by qdstat. Added more descriptive text to the management schema. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/a26308de Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a26308de Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a26308de Branch: refs/heads/tross-DISPATCH-179-1 Commit: a26308dec2f71d9cc15d28ecfb0f1cae7af57994 Parents: 7e5d714 Author: Ted Ross <[email protected]> Authored: Fri Feb 12 11:14:12 2016 -0500 Committer: Ted Ross <[email protected]> Committed: Fri Feb 12 11:14:12 2016 -0500 ---------------------------------------------------------------------- python/qpid_dispatch/management/qdrouter.json | 57 +++++++-- src/router_config.c | 2 - src/router_core/agent_address.c | 133 +++++++++++---------- src/router_core/agent_address.h | 2 +- src/router_core/agent_provisioned.c | 4 - tools/qdstat | 12 ++ 6 files changed, 134 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/python/qpid_dispatch/management/qdrouter.json ---------------------------------------------------------------------- diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json index 8689b2b..d95fff4 100644 --- a/python/qpid_dispatch/management/qdrouter.json +++ b/python/qpid_dispatch/management/qdrouter.json @@ -831,6 +831,7 @@ "router.provisioned": { "description": "Provisioned component within the router: Address configuration, waypoint, or link-route destination", "extends": "configurationEntity", + "operations": ["CREATE", "DELETE"], "attributes": { "objectType": { "type": ["address", "linkDestination", "waypoint"], @@ -944,19 +945,57 @@ "description": "AMQP address managed by the router.", "extends": "operationalEntity", "attributes": { - "inProcess": {"type": "integer"}, - "subscriberCount": {"type": "integer", "graph": true}, - "remoteCount": {"type": "integer", "graph": true}, - "deliveriesIngress": {"type": "integer", "graph": true}, - "deliveriesEgress": {"type": "integer", "graph": true}, - "deliveriesTransit": {"type": "integer", "graph": true}, - "deliveriesToContainer": {"type": "integer", "graph": true}, - "deliveriesFromContainer": {"type": "integer", "graph": true}, + "semantics": { + "type": ["flood", "multi", "anyClosest", "anyBalanced", "linkBalanced"], + "description": "Forwarding semantics for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multi - one copy of each message delivered to all subscribers; anyClosest - messages delivered to only the closest subscriber; anyBalanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations." + }, + "inProcess": { + "type": "integer", + "description": "The number of in-process subscribers for this address" + }, + "subscriberCount": { + "type": "integer", + "description": "The number of local subscribers for this address (i.e. attached to this router)", + "graph": true + }, + "remoteCount": { + "type": "integer", + "description": "The number of remote routers that have at least one subscriber to this address", + "graph": true + }, + "deliveriesIngress": { + "type": "integer", + "description": "The number of deliveries to this address that entered the router network on this router", + "graph": true + }, + "deliveriesEgress": { + "type": "integer", + "description": "The number of deliveries to this address that exited the router network on this router", + "graph": true + }, + "deliveriesTransit": { + "type": "integer", + "description": "The number of deliveries to this address that transited this router to another router", + "graph": true + }, + "deliveriesToContainer": { + "type": "integer", + "description": "The number of deliveries to this address that were given to an in-process subscriber", + "graph": true + }, + "deliveriesFromContainer": { + "type": "integer", + "description": "The number of deliveries to this address that were originated from an in-process entity", + "graph": true + }, "key": { "description": "Internal unique (to this router) key to identify the address", "type": "string" }, - "hostRouters": {"type": "list", "description": "List of remote routers on which there is a destination for this address."} + "hostRouters": { + "type": "list", + "description": "List of remote routers on which there is a destination for this address." + } } }, http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/src/router_config.c ---------------------------------------------------------------------- diff --git a/src/router_config.c b/src/router_config.c index ba9094d..94da8fc 100644 --- a/src/router_config.c +++ b/src/router_config.c @@ -72,8 +72,6 @@ qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity) qd_compose_insert_string(body, "address"); qd_compose_insert_string(body, prefix); - printf("Configure: %s\n", prefix); - qd_compose_insert_string(body, "semantics"); qd_compose_insert_string(body, sem); qd_compose_end_map(body); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/src/router_core/agent_address.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c index e963bce..0256593 100644 --- a/src/router_core/agent_address.c +++ b/src/router_core/agent_address.c @@ -24,21 +24,23 @@ #define QDR_ADDRESS_IDENTITY 1 #define QDR_ADDRESS_TYPE 2 #define QDR_ADDRESS_KEY 3 -#define QDR_ADDRESS_IN_PROCESS 4 -#define QDR_ADDRESS_SUBSCRIBER_COUNT 5 -#define QDR_ADDRESS_REMOTE_COUNT 6 -#define QDR_ADDRESS_HOST_ROUTERS 7 -#define QDR_ADDRESS_DELIVERIES_INGRESS 8 -#define QDR_ADDRESS_DELIVERIES_EGRESS 9 -#define QDR_ADDRESS_DELIVERIES_TRANSIT 10 -#define QDR_ADDRESS_DELIVERIES_TO_CONTAINER 11 -#define QDR_ADDRESS_DELIVERIES_FROM_CONTAINER 12 +#define QDR_ADDRESS_SEMANTICS 4 +#define QDR_ADDRESS_IN_PROCESS 5 +#define QDR_ADDRESS_SUBSCRIBER_COUNT 6 +#define QDR_ADDRESS_REMOTE_COUNT 7 +#define QDR_ADDRESS_HOST_ROUTERS 8 +#define QDR_ADDRESS_DELIVERIES_INGRESS 9 +#define QDR_ADDRESS_DELIVERIES_EGRESS 10 +#define QDR_ADDRESS_DELIVERIES_TRANSIT 11 +#define QDR_ADDRESS_DELIVERIES_TO_CONTAINER 12 +#define QDR_ADDRESS_DELIVERIES_FROM_CONTAINER 13 const char *qdr_address_columns[] = {"name", "identity", "type", "key", + "semantics", "inProcess", "subscriberCount", "remoteCount", @@ -56,58 +58,69 @@ static void qdr_insert_address_columns_CT(qdr_address_t *addr, int column_index) { switch(column_index) { - case QDR_ADDRESS_NAME: - case QDR_ADDRESS_IDENTITY: - case QDR_ADDRESS_KEY: - if (addr->hash_handle) - qd_compose_insert_string(body, (const char*) qd_hash_key_by_handle(addr->hash_handle)); - else - qd_compose_insert_null(body); - break; - - case QDR_ADDRESS_TYPE: - qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.address"); - break; - - case QDR_ADDRESS_IN_PROCESS: - qd_compose_insert_uint(body, DEQ_SIZE(addr->subscriptions)); - break; - - case QDR_ADDRESS_SUBSCRIBER_COUNT: - qd_compose_insert_uint(body, DEQ_SIZE(addr->rlinks)); - break; - - case QDR_ADDRESS_REMOTE_COUNT: - qd_compose_insert_uint(body, qd_bitmask_cardinality(addr->rnodes)); - break; - - case QDR_ADDRESS_HOST_ROUTERS: - qd_compose_insert_null(body); // TEMP - break; - - case QDR_ADDRESS_DELIVERIES_INGRESS: - qd_compose_insert_ulong(body, addr->deliveries_ingress); - break; - - case QDR_ADDRESS_DELIVERIES_EGRESS: - qd_compose_insert_ulong(body, addr->deliveries_egress); - break; - - case QDR_ADDRESS_DELIVERIES_TRANSIT: - qd_compose_insert_ulong(body, addr->deliveries_transit); - break; - - case QDR_ADDRESS_DELIVERIES_TO_CONTAINER: - qd_compose_insert_ulong(body, addr->deliveries_to_container); - break; - - case QDR_ADDRESS_DELIVERIES_FROM_CONTAINER: - qd_compose_insert_ulong(body, addr->deliveries_from_container); - break; - - default: + case QDR_ADDRESS_NAME: + case QDR_ADDRESS_IDENTITY: + case QDR_ADDRESS_KEY: + if (addr->hash_handle) + qd_compose_insert_string(body, (const char*) qd_hash_key_by_handle(addr->hash_handle)); + else qd_compose_insert_null(body); - break; + break; + + case QDR_ADDRESS_TYPE: + qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.address"); + break; + + case QDR_ADDRESS_SEMANTICS: { + switch (addr->semantics) { + case QD_SEMANTICS_MULTICAST_FLOOD: qd_compose_insert_string(body, "flood"); break; + case QD_SEMANTICS_MULTICAST_ONCE: qd_compose_insert_string(body, "multi"); break; + case QD_SEMANTICS_ANYCAST_CLOSEST: qd_compose_insert_string(body, "anyClosest"); break; + case QD_SEMANTICS_ANYCAST_BALANCED: qd_compose_insert_string(body, "anyBalanced"); break; + case QD_SEMANTICS_LINK_BALANCED: qd_compose_insert_string(body, "linkBalanced"); break; + } + break; + } + + case QDR_ADDRESS_IN_PROCESS: + qd_compose_insert_uint(body, DEQ_SIZE(addr->subscriptions)); + break; + + case QDR_ADDRESS_SUBSCRIBER_COUNT: + qd_compose_insert_uint(body, DEQ_SIZE(addr->rlinks)); + break; + + case QDR_ADDRESS_REMOTE_COUNT: + qd_compose_insert_uint(body, qd_bitmask_cardinality(addr->rnodes)); + break; + + case QDR_ADDRESS_HOST_ROUTERS: + qd_compose_insert_null(body); // TEMP + break; + + case QDR_ADDRESS_DELIVERIES_INGRESS: + qd_compose_insert_ulong(body, addr->deliveries_ingress); + break; + + case QDR_ADDRESS_DELIVERIES_EGRESS: + qd_compose_insert_ulong(body, addr->deliveries_egress); + break; + + case QDR_ADDRESS_DELIVERIES_TRANSIT: + qd_compose_insert_ulong(body, addr->deliveries_transit); + break; + + case QDR_ADDRESS_DELIVERIES_TO_CONTAINER: + qd_compose_insert_ulong(body, addr->deliveries_to_container); + break; + + case QDR_ADDRESS_DELIVERIES_FROM_CONTAINER: + qd_compose_insert_ulong(body, addr->deliveries_from_container); + break; + + default: + qd_compose_insert_null(body); + break; } } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/src/router_core/agent_address.h ---------------------------------------------------------------------- diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h index e0416e7..77d6dcc 100644 --- a/src/router_core/agent_address.h +++ b/src/router_core/agent_address.h @@ -36,7 +36,7 @@ void qdra_address_delete_CT(qdr_core_t *core, qdr_query_t *query); -#define QDR_ADDRESS_COLUMN_COUNT 13 +#define QDR_ADDRESS_COLUMN_COUNT 14 const char *qdr_address_columns[QDR_ADDRESS_COLUMN_COUNT + 1]; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/src/router_core/agent_provisioned.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent_provisioned.c b/src/router_core/agent_provisioned.c index 066d016..83b436f 100644 --- a/src/router_core/agent_provisioned.c +++ b/src/router_core/agent_provisioned.c @@ -196,14 +196,10 @@ static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_fiel qd_address_iterator_override_prefix(iter, cls); qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH); - printf("CT configure address: %s\n", qd_field_iterator_copy(iter)); - qd_field_iterator_reset(iter); - qdr_address_t *addr = 0; qd_hash_retrieve(core->addr_hash, iter, (void**) &addr); if (addr) { // Log error TODO - printf(" dup\n"); return 0; } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a26308de/tools/qdstat ---------------------------------------------------------------------- diff --git a/tools/qdstat b/tools/qdstat index 0dae5d6..fc8b32c 100755 --- a/tools/qdstat +++ b/tools/qdstat @@ -187,6 +187,16 @@ class BusManager(Node): outlist.append(str(i)) return outlist + def _sem_text(self, sem): + sem_map = {'flood' : 'flood', + 'multi' : 'multi', + 'anyClosest' : 'closest', + 'anyBalanced' : 'balanced', + 'linkBalanced' : 'linkBalanced'} + if sem in sem_map: + return sem_map[sem] + return '-' + def displayGeneral(self): disp = Display(prefix=" ") heads = [] @@ -279,6 +289,7 @@ class BusManager(Node): disp = Display(prefix=" ") heads = [] heads.append(Header("addr")) + heads.append(Header("sem")) heads.append(Header("in-proc", Header.COMMAS)) heads.append(Header("local", Header.COMMAS)) heads.append(Header("remote", Header.COMMAS)) @@ -294,6 +305,7 @@ class BusManager(Node): for addr in objects: row = [] row.append(self._addr_summary(addr.name)) + row.append(self._sem_text(addr.semantics)) row.append(addr.inProcess) row.append(addr.subscriberCount) row.append(addr.remoteCount) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
