diff --git a/.gitignore b/.gitignore index ee9c73c..5e82a40 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ SOURCES/pcp-6.2.0.src.tar.gz +SOURCES/redhat-issues-RHEL-50693-hacluster-metrics-update.patch diff --git a/.pcp.metadata b/.pcp.metadata index 2dc0110..c9a02bb 100644 --- a/.pcp.metadata +++ b/.pcp.metadata @@ -1 +1,2 @@ 617d0e505af5f253080effb6701e089fc02e7379 SOURCES/pcp-6.2.0.src.tar.gz +17b4396eb6593178f6c29db6f0eb01234eb6dba0 SOURCES/redhat-issues-RHEL-50693-hacluster-metrics-update.patch diff --git a/SOURCES/1001-libpcp-small-derived-metrics-bug-fix.patch b/SOURCES/1001-libpcp-small-derived-metrics-bug-fix.patch new file mode 100644 index 0000000..a85d9fd --- /dev/null +++ b/SOURCES/1001-libpcp-small-derived-metrics-bug-fix.patch @@ -0,0 +1,108 @@ +From f8dc87ed130a0cfe1077242a4da2d621c4016bfb Mon Sep 17 00:00:00 2001 +From: Ken McDonell <kenj@kenj.id.au> +Date: Thu, 4 Apr 2024 11:34:41 +1100 +Subject: [PATCH] libpcp: small derived metrics bug fix + +This is a partial fix for +https://github.com/performancecopilot/pcp/issues/1921 + +If the operand has the semantics of PM_SEM_COUNTER and the +value goes backwards from one fetch to the next, then return +no values for rate(). + +There is QA to come, but this needs a final blessing from Oracle +before the reproducer archive can be included. + +cherry-picked:- f8dc87ed130a0cfe1077242a4da2d621c4016bfb +[Orabug: 36538820] +Signed-off-by: sagar sagar <sagar.sagar@oracle.com> +--- + man/man3/pmregisterderived.3 | 13 +++++++++---- + src/libpcp/src/derive_fetch.c | 23 ++++++++++++++++++++++- + 2 files changed, 31 insertions(+), 5 deletions(-) + +diff --git a/man/man3/pmregisterderived.3 b/man/man3/pmregisterderived.3 +index d8719f373..32963c3b3 100644 +--- a/man/man3/pmregisterderived.3 ++++ b/man/man3/pmregisterderived.3 +@@ -485,15 +485,20 @@ metric x with the dimension in the + .B time + domain decreased by one and scaling if required in the time utilization case + where the operand is in units of time, and the derived metric is unitless. +-This mimics the rate conversion applied to counter metrics by tools ++There is one value in the result ++for each instance that appears in both the current and the previous ++sample, except in the case where the metric x has ++the semantics of a counter, i.e. PM_SEM_COUNTER, and ++current value of an instance is smaller than the previous value ++of the same instance then no value is ++returned for this instance (this corresponds to a ``counter wrap'' or a ``counter reset''). ++These rules ++mimic the rate conversion applied to counter metrics by tools + such as + .BR pmval (1), + .BR pmie (1) + and + .BR pmchart (1). +-There is one value in the result +-for each instance that appears in both the current and the previous +-sample. + T} + _ + instant(x) T{ +diff --git a/src/libpcp/src/derive_fetch.c b/src/libpcp/src/derive_fetch.c +index 62921ece4..ed5f6ebcf 100644 +--- a/src/libpcp/src/derive_fetch.c ++++ b/src/libpcp/src/derive_fetch.c +@@ -847,7 +847,13 @@ eval_expr(__pmContext *ctxp, node_t *np, struct timespec *stamp, int numpmid, + } + } + else { +- /* rate() conversion, type will be DOUBLE */ ++ /* ++ * rate() conversion, type will be DOUBLE ++ * ++ * For COUNTER metrics, return "no value" if the counter is ++ * NOT monotonic increasing ... this matches what pmval(1) ++ * and pmie(1) do in the same circumstances. ++ */ + struct timespec stampdiff; + + stampdiff = np->data.info->stamp; +@@ -857,18 +863,33 @@ eval_expr(__pmContext *ctxp, node_t *np, struct timespec *stamp, int numpmid, + np->data.info->ivlist[k].value.d = (double)(np->left->data.info->ivlist[i].value.l - np->left->data.info->last_ivlist[j].value.l); + break; + case PM_TYPE_U32: ++ if (np->left->desc.sem == PM_SEM_COUNTER && ++ np->left->data.info->ivlist[i].value.ul < np->left->data.info->last_ivlist[j].value.ul) ++ continue; + np->data.info->ivlist[k].value.d = (double)(np->left->data.info->ivlist[i].value.ul - np->left->data.info->last_ivlist[j].value.ul); + break; + case PM_TYPE_64: ++ if (np->left->desc.sem == PM_SEM_COUNTER && ++ np->left->data.info->ivlist[i].value.ll < np->left->data.info->last_ivlist[j].value.ll) ++ continue; + np->data.info->ivlist[k].value.d = (double)(np->left->data.info->ivlist[i].value.ll - np->left->data.info->last_ivlist[j].value.ll); + break; + case PM_TYPE_U64: ++ if (np->left->desc.sem == PM_SEM_COUNTER && ++ np->left->data.info->ivlist[i].value.ull < np->left->data.info->last_ivlist[j].value.ull) ++ continue; + np->data.info->ivlist[k].value.d = (double)(np->left->data.info->ivlist[i].value.ull - np->left->data.info->last_ivlist[j].value.ull); + break; + case PM_TYPE_FLOAT: ++ if (np->left->desc.sem == PM_SEM_COUNTER && ++ np->left->data.info->ivlist[i].value.f < np->left->data.info->last_ivlist[j].value.f) ++ continue; + np->data.info->ivlist[k].value.d = (double)(np->left->data.info->ivlist[i].value.f - np->left->data.info->last_ivlist[j].value.f); + break; + case PM_TYPE_DOUBLE: ++ if (np->left->desc.sem == PM_SEM_COUNTER && ++ np->left->data.info->ivlist[i].value.d < np->left->data.info->last_ivlist[j].value.d) ++ continue; + np->data.info->ivlist[k].value.d = np->left->data.info->ivlist[i].value.d - np->left->data.info->last_ivlist[j].value.d; + break; + default: +-- +2.39.3 + diff --git a/SOURCES/redhat-issues-RHEL-25543-python-year-day-range.patch b/SOURCES/redhat-issues-RHEL-25543-python-year-day-range.patch deleted file mode 100644 index b43b5ab..0000000 --- a/SOURCES/redhat-issues-RHEL-25543-python-year-day-range.patch +++ /dev/null @@ -1,35 +0,0 @@ -commit ce6112399ebf0ff39069a34bc9286242c875555e -Author: adam kaminski <adam@adamkaminski.com> -Date: Fri Feb 9 12:49:34 2024 -0500 - - pmapi.py : fix for struct_time() and day of year out of range on yyyy-01-01 - - Fix for `day of year out of range` on 2024-01-01, due to self.tm_yday - 1, which returns `[2024, 1, 1, 2, 3, 0, 0, -1, 0]`. The range for tm_yday should be [1, 366]. - - # timedatectl set-ntp false - # timedatectl set-time "2024-01-01 00:00:00" - # /usr/libexec/pcp/bin/pcp-mpstat -P ALL -t 1 -s 2 - Traceback (most recent call last): - File "/usr/libexec/pcp/bin/pcp-mpstat", line 653, in <module> - sts = manager.run() - File "/usr/lib64/python3.6/site-packages/pcp/pmcc.py", line 687, in run - self._printer.report(self) - File "/usr/libexec/pcp/bin/pcp-mpstat", line 606, in report - self.print_machine_info(group, manager) - File "/usr/libexec/pcp/bin/pcp-mpstat", line 585, in print_machine_info - time_string = time.strftime("%x", timestamp.struct_time()) - ValueError: day of year out of range - -diff --git a/src/python/pcp/pmapi.py b/src/python/pcp/pmapi.py -index fd8d40e32c..05c8afb079 100644 ---- a/src/python/pcp/pmapi.py -+++ b/src/python/pcp/pmapi.py -@@ -330,7 +330,7 @@ class tm(Structure): - pywday = 6 - stlist = [self.tm_year + 1900, self.tm_mon + 1, self.tm_mday, - self.tm_hour, self.tm_min, self.tm_sec, -- pywday, self.tm_yday - 1, self.tm_isdst] -+ pywday, self.tm_yday + 1, self.tm_isdst] - return time.struct_time(stlist) - - def __str__(self): diff --git a/SOURCES/redhat-issues-RHEL-30719-pmproxy-resp-proxy-disabled.patch b/SOURCES/redhat-issues-RHEL-30719-pmproxy-resp-proxy-disabled.patch new file mode 100644 index 0000000..7ecacbd --- /dev/null +++ b/SOURCES/redhat-issues-RHEL-30719-pmproxy-resp-proxy-disabled.patch @@ -0,0 +1,27 @@ +commit 3bde240a2acc85e63e2f7813330713dd9b59386e +Author: Nathan Scott <nathans@redhat.com> +Date: Wed Mar 27 14:51:28 2024 +1100 + + pmproxy: disable Redis protocol proxying by default + + If a redis-server has been locked down in terms of connections, + we want to prevent pmproxy from being allowed to send arbitrary + RESP commands to it. + + This protocol proxying doesn't affect PCP functionality at all, + its more of a developer/sysadmin convenience when Redis used in + cluster mode (relatively uncommon compared to localhost mode). + +diff --git a/src/pmproxy/pmproxy.conf b/src/pmproxy/pmproxy.conf +index e54891792e..4cbc1c96af 100644 +--- a/src/pmproxy/pmproxy.conf ++++ b/src/pmproxy/pmproxy.conf +@@ -29,7 +29,7 @@ pcp.enabled = true + http.enabled = true + + # support Redis protocol proxying +-redis.enabled = true ++redis.enabled = false + + # support SSL/TLS protocol wrapping + secure.enabled = true diff --git a/SPECS/pcp.spec b/SPECS/pcp.spec index 11c3721..b896107 100644 --- a/SPECS/pcp.spec +++ b/SPECS/pcp.spec @@ -1,6 +1,6 @@ Name: pcp Version: 6.2.0 -Release: 2%{?dist} +Release: 3.0.1%{?dist} Summary: System-level performance monitoring and performance management License: GPL-2.0-or-later AND LGPL-2.1-or-later AND CC-BY-3.0 URL: https://pcp.io @@ -8,7 +8,12 @@ URL: https://pcp.io Source0: https://github.com/performancecopilot/pcp/releases/pcp-%{version}.src.tar.gz Patch1: redhat-issues-RHEL-2317-default-archive-version.patch -Patch2: redhat-issues-RHEL-25543-python-year-day-range.patch +Patch2: redhat-issues-RHEL-30719-pmproxy-resp-proxy-disabled.patch +Patch3: redhat-issues-RHEL-50693-hacluster-metrics-update.patch + +#Oracle patches +Patch1001: 1001-libpcp-small-derived-metrics-bug-fix.patch + %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 ExcludeArch: %{ix86} @@ -3493,8 +3498,14 @@ fi %files zeroconf -f pcp-zeroconf-files.rpm %changelog -* Wed Mar 20 2024 Nathan Scott <nathans@redhat.com> - 6.2.0-2 -- Fix python sub-package year day range issue (RHEL-25543) +* Tue Sep 03 2024 EL Errata <el-errata_ww@oracle.com> - 6.2.0-3.0.1 +- Fixed libpcp derived metric issue for ol9 [Orabug: 36538820] + +* Thu Aug 08 2024 Nathan Scott <nathans@redhat.com> - 6.2.0-3 +- Update hacluster PMDA for pacemaker 2.1.6 crm_mon (RHEL-50693) + +* Wed Apr 17 2024 Nathan Scott <nathans@redhat.com> - 6.2.0-2 +- Disable RESP proxying by default in pmproxy (RHEL-30719) * Mon Feb 12 2024 Nathan Scott <nathans@redhat.com> - 6.2.0-1 - Rebase to latest stable version of PCP (RHEL-2317)