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 2019/10/31 18:24:03 UTC

[qpid-dispatch] 03/05: DISPATCH-1409 - Added global metric/gauge for links-blocked. Updated qdstat man page.

This is an automated email from the ASF dual-hosted git repository.

tross pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git

commit 8fe83b73005c5c1b6322a6b0dad7356672b17f5f
Author: Ted Ross <tr...@redhat.com>
AuthorDate: Wed Oct 30 16:58:08 2019 -0400

    DISPATCH-1409 - Added global metric/gauge for links-blocked.  Updated qdstat man page.
---
 docs/man/qdstat.8.adoc                                           | 9 +++++++++
 include/qpid/dispatch/router_core.h                              | 1 +
 python/qpid_dispatch/management/qdrouter.json                    | 5 +++++
 src/http-libwebsockets.c                                         | 4 +++-
 src/router_core/agent_router.c                                   | 6 ++++++
 src/router_core/agent_router.h                                   | 2 +-
 src/router_core/connections.c                                    | 8 ++++++--
 .../modules/stuck_delivery_detection/delivery_tracker.c          | 1 +
 src/router_core/router_core.c                                    | 1 +
 src/router_core/router_core_private.h                            | 1 +
 tools/qdstat.in                                                  | 4 ++++
 11 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/docs/man/qdstat.8.adoc b/docs/man/qdstat.8.adoc
index aee0b38..caaed43 100644
--- a/docs/man/qdstat.8.adoc
+++ b/docs/man/qdstat.8.adoc
@@ -152,6 +152,15 @@ The number of settled deliveries on this link that were unsettled for more than
 rate::
 The average rate (over a period of five seconds) at which deliveries have been settled on this link.
 
+stuck::
+The number of deliveries on this link that are flagged as "stuck".  A delivery is considered stuck if it has been either undelivered or unsettled for more than 10 seconds.
+
+cred::
+The number of flow credits currently available on this link.
+
+blkd::
+The time elapsed since the available credit for this link became zero and has remained zero.
+
 admin::
 The administrative status of the link:
   - 'enabled' - The link is enabled for normal operation.
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index fab7e50..d8c7078 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -857,6 +857,7 @@ typedef struct {
     size_t deliveries_delayed_1sec;
     size_t deliveries_delayed_10sec;
     size_t deliveries_stuck;
+    size_t links_blocked;
     size_t deliveries_redirected_to_fallback;
 }  qdr_global_stats_t;
 ALLOC_DECLARE(qdr_global_stats_t);
diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json
index e7a90e5..ab241b7 100644
--- a/python/qpid_dispatch/management/qdrouter.json
+++ b/python/qpid_dispatch/management/qdrouter.json
@@ -510,6 +510,11 @@
 	                "description":"Number of links attached to the router node.",
 	                "graph": true
 	            },
+                "blockedLinkCount": {
+                    "type": "integer",
+                    "description": "The number of links that are flagged as blocked.  A blocked link is one in which the available credit has remained zero for more than 10 seconds.",
+                    "graph": true
+                },
 	            "nodeCount": {
 	                "type": "integer",
 	                "description":"Number of known peer router nodes.",
diff --git a/src/http-libwebsockets.c b/src/http-libwebsockets.c
index dda8b9d..c4dd366 100644
--- a/src/http-libwebsockets.c
+++ b/src/http-libwebsockets.c
@@ -472,6 +472,7 @@ static int stats_get_deliveries_egress_route_container(qdr_global_stats_t *stats
 static int stats_get_deliveries_delayed_1sec(qdr_global_stats_t *stats) { return stats->deliveries_delayed_1sec; }
 static int stats_get_deliveries_delayed_10sec(qdr_global_stats_t *stats) { return stats->deliveries_delayed_10sec; }
 static int stats_get_deliveries_stuck(qdr_global_stats_t *stats) { return stats->deliveries_stuck; }
+static int stats_get_links_blocked(qdr_global_stats_t *stats) { return stats->links_blocked; }
 static int stats_get_deliveries_redirected_to_fallback(qdr_global_stats_t *stats) { return stats->deliveries_redirected_to_fallback; }
 
 static struct metric_definition metrics[] = {
@@ -494,7 +495,8 @@ static struct metric_definition metrics[] = {
     {"deliveries_egress_route_container", "counter", stats_get_deliveries_egress_route_container},
     {"deliveries_delayed_1sec", "counter", stats_get_deliveries_delayed_1sec},
     {"deliveries_delayed_10sec", "counter", stats_get_deliveries_delayed_10sec},
-    {"deliveries_stuck", "counter", stats_get_deliveries_stuck},
+    {"deliveries_stuck", "gauge", stats_get_deliveries_stuck},
+    {"links_blocked", "gauge", stats_get_links_blocked},
     {"deliveries_redirected_to_fallback", "counter", stats_get_deliveries_redirected_to_fallback}
 };
 static size_t metrics_length = sizeof(metrics)/sizeof(metrics[0]);
diff --git a/src/router_core/agent_router.c b/src/router_core/agent_router.c
index 7bdc934..b726686 100644
--- a/src/router_core/agent_router.c
+++ b/src/router_core/agent_router.c
@@ -53,6 +53,7 @@
 #define QDR_ROUTER_DELIVERIES_INGRESS_ROUTE_CONTAINER  26
 #define QDR_ROUTER_DELIVERIES_EGRESS_ROUTE_CONTAINER   27
 #define QDR_ROUTER_DELIVERIES_REDIRECTED               28
+#define QDR_ROUTER_LINKS_BLOCKED                       29
 
 
 const char *qdr_router_columns[] =
@@ -85,6 +86,7 @@ const char *qdr_router_columns[] =
      "deliveriesIngressRouteContainer",
      "deliveriesEgressRouteContainer",
      "deliveriesRedirectedToFallback",
+     "linksBlocked",
      0};
 
 
@@ -227,6 +229,10 @@ static void qdr_agent_write_column_CT(qd_composed_field_t *body, int col, qdr_co
         qd_compose_insert_ulong(body, core->deliveries_redirected);
         break;
 
+    case QDR_ROUTER_LINKS_BLOCKED:
+        qd_compose_insert_uint(body, core->links_blocked);
+        break;
+
     default:
         qd_compose_insert_null(body);
         break;
diff --git a/src/router_core/agent_router.h b/src/router_core/agent_router.h
index 7f0e271..97452af 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  29
+#define QDR_ROUTER_COLUMN_COUNT  30
 
 const char *qdr_router_columns[QDR_ROUTER_COLUMN_COUNT + 1];
 
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 4fb5af9..a9229d1 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -237,6 +237,7 @@ void qdr_record_link_credit(qdr_core_t *core, qdr_link_t *link)
         //
         link->reported_as_blocked = false;
         link->zero_credit_time = core->uptime_ticks;
+        core->links_blocked--;
     } else if (link->credit_reported == 0 && pn_credit > 0)
         //
         // The link has transitioned from zero credit to positive credit.
@@ -995,11 +996,14 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li
     // Log the link closure
     //
     qd_log(core->log, QD_LOG_INFO, "[C%"PRIu64"][L%"PRIu64"] %s: del=%"PRIu64" presett=%"PRIu64" psdrop=%"PRIu64
-           " acc=%"PRIu64" rej=%"PRIu64" rel=%"PRIu64" mod=%"PRIu64" delay1=%"PRIu64" delay10=%"PRIu64,
+           " acc=%"PRIu64" rej=%"PRIu64" rel=%"PRIu64" mod=%"PRIu64" delay1=%"PRIu64" delay10=%"PRIu64" blocked=%s",
            conn->identity, link->identity, log_text, link->total_deliveries, link->presettled_deliveries,
            link->dropped_presettled_deliveries, link->accepted_deliveries, link->rejected_deliveries,
            link->released_deliveries, link->modified_deliveries, link->deliveries_delayed_1sec,
-           link->deliveries_delayed_10sec);
+           link->deliveries_delayed_10sec, link->reported_as_blocked ? "yes" : "no");
+
+    if (link->reported_as_blocked)
+        core->links_blocked--;
 
     free_qdr_link_t(link);
 }
diff --git a/src/router_core/modules/stuck_delivery_detection/delivery_tracker.c b/src/router_core/modules/stuck_delivery_detection/delivery_tracker.c
index 2494b5d..0c86803 100644
--- a/src/router_core/modules/stuck_delivery_detection/delivery_tracker.c
+++ b/src/router_core/modules/stuck_delivery_detection/delivery_tracker.c
@@ -75,6 +75,7 @@ static void process_link_CT(qdr_core_t *core, qdr_link_t *link)
     if (!link->reported_as_blocked && link->zero_credit_time > 0 &&
         (core->uptime_ticks - link->zero_credit_time > stuck_age)) {
         link->reported_as_blocked = true;
+        core->links_blocked++;
         qd_log(core->log, QD_LOG_INFO,
                "[C%"PRIu64"][L%"PRIu64"] "
                "Link blocked with zero credit for %d seconds",
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index e5994a6..3ecea9c 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -859,6 +859,7 @@ static void qdr_global_stats_request_CT(qdr_core_t *core, qdr_action_t *action,
         stats->deliveries_delayed_1sec = core->deliveries_delayed_1sec;
         stats->deliveries_delayed_10sec = core->deliveries_delayed_10sec;
         stats->deliveries_stuck = core->deliveries_stuck;
+        stats->links_blocked = core->links_blocked;
         stats->deliveries_redirected_to_fallback = core->deliveries_redirected;
     }
     qdr_general_work_t *work = qdr_general_work(qdr_post_global_stats_response);
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 683dde7..17256a5 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -871,6 +871,7 @@ struct qdr_core_t {
     uint64_t deliveries_delayed_10sec;
     uint64_t deliveries_stuck;
     uint64_t deliveries_redirected;
+    uint32_t links_blocked;
 
     qdr_edge_conn_addr_t          edge_conn_addr;
     void                         *edge_context;
diff --git a/tools/qdstat.in b/tools/qdstat.in
index 6b8f4b1..267237f 100755
--- a/tools/qdstat.in
+++ b/tools/qdstat.in
@@ -314,6 +314,10 @@ class BusManager(Node):
                 rows.append(('Deliveries Delayed > 10sec', router.deliveriesDelayed10Sec))
                 rows.append(('Deliveries Stuck > 10sec',   router.deliveriesStuck))
                 rows.append(('Deliveries to Fallback',     router.deliveriesRedirectedToFallback))
+                try:
+                    rows.append(('Links Blocked', router.linksBlocked))
+                except:
+                    pass
             except:
                 pass
             rows.append(('Ingress Count', router.deliveriesIngress))


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