From 02c007adfc02d30e8170d2f4a61d70acbaca4d3b Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Fri, 7 Feb 2025 18:24:15 +1100 Subject: [PATCH] libpcp: further refinements to dup instance label logging Related to Red Hat bug RHEL-67227 --- qa/1368.out | 18 ------------------ qa/1502.out | 32 -------------------------------- src/libpcp/src/logmeta.c | 16 ++++++++++++---- 3 files changed, 12 insertions(+), 54 deletions(-) diff --git a/qa/1368.out b/qa/1368.out index b4d78a62d8..8954b93109 100644 --- a/qa/1368.out +++ b/qa/1368.out @@ -34,24 +34,6 @@ Metric Labels in the Log ... [0] name(2,3) : value(7,3) [instances] InDom 29.2[900] labels (11 bytes): {"bin":900} [0] name(2,3) : value(7,3) [instances] - InDom 29.2[100] labels (11 bytes): {"bin":100} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[200] labels (11 bytes): {"bin":200} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[300] labels (11 bytes): {"bin":300} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[400] labels (11 bytes): {"bin":400} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[500] labels (11 bytes): {"bin":500} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[600] labels (11 bytes): {"bin":600} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[700] labels (11 bytes): {"bin":700} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[800] labels (11 bytes): {"bin":800} - [0] name(2,3) : value(7,3) [instances] - InDom 29.2[900] labels (11 bytes): {"bin":900} - [0] name(2,3) : value(7,3) [instances] === Dump help text diff --git a/qa/1502.out b/qa/1502.out index 325924b09c..e907659725 100644 --- a/qa/1502.out +++ b/qa/1502.out @@ -840,38 +840,6 @@ Fri Mar 15 09:53:02.050538091 2024 InDom 29.12[3] labels (0 bytes): InDom 29.12[4] labels (0 bytes): Fri Mar 15 09:53:10.084432000 2024 - InDom 29.3[0] labels (19 bytes): {"transient":false} - [0] name(2,9) : value(13,5) [instances] - InDom 29.3[21] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[24] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[26] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[27] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[29] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[30] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[35] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[36] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[37] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[38] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[39] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[40] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[41] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[42] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] - InDom 29.3[43] labels (18 bytes): {"transient":true} - [0] name(2,9) : value(13,4) [instances] InDom 29.10[0] labels (0 bytes): InDom 29.10[1] labels (0 bytes): InDom 29.12[1] labels (0 bytes): diff --git a/src/libpcp/src/logmeta.c b/src/libpcp/src/logmeta.c index ba06adf8ef..bf30a26579 100644 --- a/src/libpcp/src/logmeta.c +++ b/src/libpcp/src/logmeta.c @@ -416,16 +416,24 @@ samelabelset(const pmLabelSet *set1, const pmLabelSet *set2) /* * Discard any label sets within idp which are also within idp_next. - * Instance labels are a special case which cannot be reduced due to - * the potentially dynamic nature of the associated instance domain. + * Instance labels are a special case which cannot be reduced unless + * both complete sets match exactly, due to the potentially dynamic + * nature of the associated instance domain. */ static void discard_dup_labelsets(__pmLogLabelSet *idp, const __pmLogLabelSet *idp_next) { int i, j; - if (idp->type & PM_LABEL_INSTANCES) - return; + if (idp->type & PM_LABEL_INSTANCES) { + if (idp->nsets != idp_next->nsets) + return; + for (i = 0; i < idp->nsets; ++i) { + if (samelabelset(&idp->labelsets[i], &idp_next->labelsets[i])) + continue; + return; + } + } for (i = 0; i < idp->nsets; ++i) { for (j = 0; j < idp_next->nsets; ++j) {