Repository: qpid-dispatch Updated Branches: refs/heads/master 264db62f4 -> 414d34efb
DISPATCH-57 - Added some new attributes to the address entity to provide visibility into the balanced algorithm. Also changed the format of the "peer" attribute in links to be only the numeric identity. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/414d34ef Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/414d34ef Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/414d34ef Branch: refs/heads/master Commit: 414d34efb7e8fed964b6e324feeaf8c2a4d494dc Parents: 264db62 Author: Ted Ross <[email protected]> Authored: Wed May 4 09:20:58 2016 -0400 Committer: Ted Ross <[email protected]> Committed: Wed May 4 09:20:58 2016 -0400 ---------------------------------------------------------------------- python/qpid_dispatch/management/qdrouter.json | 10 +++- src/router_core/agent_address.c | 59 +++++++++++++++++----- src/router_core/agent_address.h | 2 +- src/router_core/agent_link.c | 2 +- 4 files changed, 56 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/414d34ef/python/qpid_dispatch/management/qdrouter.json ---------------------------------------------------------------------- diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json index 17e3bd3..6de9b43 100644 --- a/python/qpid_dispatch/management/qdrouter.json +++ b/python/qpid_dispatch/management/qdrouter.json @@ -1156,9 +1156,17 @@ "description": "Internal unique (to this router) key to identify the address", "type": "string" }, - "hostRouters": { + "remoteHostRouters": { "type": "list", "description": "List of remote routers on which there is a destination for this address." + }, + "transitOutstanding": { + "type": "list", + "description": "List of numbers of outstanding deliveries across a transit (inter-router) link for this address. This is for balanced distribution only." + }, + "trackedDeliveries": { + "type": "integer", + "description": "Number of transit deliveries being tracked for this address (for balanced distribution)." } } }, http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/414d34ef/src/router_core/agent_address.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c index f4c603e..e1ca533 100644 --- a/src/router_core/agent_address.c +++ b/src/router_core/agent_address.c @@ -29,12 +29,14 @@ #define QDR_ADDRESS_SUBSCRIBER_COUNT 6 #define QDR_ADDRESS_REMOTE_COUNT 7 #define QDR_ADDRESS_CONTAINER_COUNT 8 -#define QDR_ADDRESS_HOST_ROUTERS 9 +#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 const char *qdr_address_columns[] = {"name", @@ -46,18 +48,21 @@ const char *qdr_address_columns[] = "subscriberCount", "remoteCount", "containerCount", - "hostRouters", + "remoteHostRouters", "deliveriesIngress", "deliveriesEgress", "deliveriesTransit", "deliveriesToContainer", "deliveriesFromContainer", + "transitOutstanding", + "trackedDeliveries", 0}; -static void qdr_insert_address_columns_CT(qdr_address_t *addr, - qd_composed_field_t *body, - int column_index) +static void qdr_insert_address_columns_CT(qdr_core_t *core, + qdr_address_t *addr, + qd_composed_field_t *body, + int column_index) { switch(column_index) { case QDR_ADDRESS_NAME: @@ -100,9 +105,20 @@ static void qdr_insert_address_columns_CT(qdr_address_t *addr, qd_compose_insert_uint(body, DEQ_SIZE(addr->conns)); break; - case QDR_ADDRESS_HOST_ROUTERS: - qd_compose_insert_null(body); // TEMP + case QDR_ADDRESS_REMOTE_HOST_ROUTERS: { + qd_compose_start_list(body); + int c; + int bit; + for (QD_BITMASK_EACH(addr->rnodes, bit, c)) { + qdr_node_t *rnode = core->routers_by_mask_bit[bit]; + if (rnode && rnode->owning_addr) { + const char *ar = (char*) qd_hash_key_by_handle(rnode->owning_addr->hash_handle); + qd_compose_insert_string(body, ar + 1); // Remove the 'R' prefix from the router address + } + } + qd_compose_end_list(body); break; + } case QDR_ADDRESS_DELIVERIES_INGRESS: qd_compose_insert_ulong(body, addr->deliveries_ingress); @@ -124,6 +140,20 @@ static void qdr_insert_address_columns_CT(qdr_address_t *addr, qd_compose_insert_ulong(body, addr->deliveries_from_container); break; + case QDR_ADDRESS_TRANSIT_OUTSTANDING: + if (addr->outstanding_deliveries) { + qd_compose_start_list(body); + for (int i = 0; i < qd_bitmask_width(); i++) + qd_compose_insert_long(body, addr->outstanding_deliveries[i]); + qd_compose_end_list(body); + } else + qd_compose_insert_null(body); + break; + + case QDR_ADDRESS_TRACKED_DELIVERIES: + qd_compose_insert_long(body, addr->tracked_deliveries); + break; + default: qd_compose_insert_null(body); break; @@ -131,7 +161,8 @@ static void qdr_insert_address_columns_CT(qdr_address_t *addr, } -static void qdr_manage_write_address_map_CT(qdr_address_t *addr, +static void qdr_manage_write_address_map_CT(qdr_core_t *core, + qdr_address_t *addr, qd_composed_field_t *body, const char *qdr_address_columns[]) { @@ -139,14 +170,14 @@ static void qdr_manage_write_address_map_CT(qdr_address_t *addr, for(int i = 0; i < QDR_ADDRESS_COLUMN_COUNT; i++) { qd_compose_insert_string(body, qdr_address_columns[i]); - qdr_insert_address_columns_CT(addr, body, i); + qdr_insert_address_columns_CT(core, addr, body, i); } qd_compose_end_map(body); } -static void qdr_manage_write_address_list_CT(qdr_query_t *query, qdr_address_t *addr) +static void qdr_manage_write_address_list_CT(qdr_core_t *core, qdr_query_t *query, qdr_address_t *addr) { qd_composed_field_t *body = query->body; @@ -157,7 +188,7 @@ static void qdr_manage_write_address_list_CT(qdr_query_t *query, qdr_address_t * int i = 0; while (query->columns[i] >= 0) { - qdr_insert_address_columns_CT(addr, body, query->columns[i]); + qdr_insert_address_columns_CT(core, addr, body, query->columns[i]); i++; } @@ -197,7 +228,7 @@ void qdra_address_get_CT(qdr_core_t *core, // // Write the columns of the address entity into the response body. // - qdr_manage_write_address_map_CT(addr, query->body, qdr_address_columns); + qdr_manage_write_address_map_CT(core, addr, query->body, qdr_address_columns); query->status = QD_AMQP_OK; } @@ -236,7 +267,7 @@ void qdra_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) // // Write the columns of the address entity into the response body. // - qdr_manage_write_address_list_CT(query, addr); + qdr_manage_write_address_list_CT(core, query, addr); // // Advance to the next address @@ -279,7 +310,7 @@ void qdra_address_get_next_CT(qdr_core_t *core, qdr_query_t *query) // // Write the columns of the address entity into the response body. // - qdr_manage_write_address_list_CT(query, addr); + qdr_manage_write_address_list_CT(core, query, addr); // // Advance to the next address http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/414d34ef/src/router_core/agent_address.h ---------------------------------------------------------------------- diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h index b47433e..36a51bc 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 15 +#define QDR_ADDRESS_COLUMN_COUNT 17 const char *qdr_address_columns[QDR_ADDRESS_COLUMN_COUNT + 1]; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/414d34ef/src/router_core/agent_link.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent_link.c b/src/router_core/agent_link.c index 9204565..3b99326 100644 --- a/src/router_core/agent_link.c +++ b/src/router_core/agent_link.c @@ -122,7 +122,7 @@ static void qdr_agent_write_column_CT(qd_composed_field_t *body, int col, qdr_li case QDR_LINK_PEER: if (link->connected_link) { char id[100]; - snprintf(id, 100, "link.%"PRId64, link->connected_link->identity); + snprintf(id, 100, "%"PRId64, link->connected_link->identity); qd_compose_insert_string(body, id); } else qd_compose_insert_null(body); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
