From e27c1f0e2b66603d0a7a620648a2c10bcc1c8099 Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Wed, 7 Aug 2024 16:07:58 +1000 Subject: [PATCH] pmdahacluster: handle pacemaker 2.1.6 crm_mon output changes Related: RHEL-50693 --- pcp.spec | 8 +- ...-RHEL-50693-hacluster-metrics-update.patch | 721 ++++++++++++++++++ 2 files changed, 727 insertions(+), 2 deletions(-) create mode 100644 redhat-issues-RHEL-50693-hacluster-metrics-update.patch diff --git a/pcp.spec b/pcp.spec index 99f84ec..0b14d44 100644 --- a/pcp.spec +++ b/pcp.spec @@ -1,6 +1,6 @@ Name: pcp Version: 6.2.2 -Release: 5%{?dist} +Release: 6%{?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 @@ -13,6 +13,7 @@ Patch2: redhat-issues-RHEL-30198-pmcd-logdir-tmpfiles.patch Patch3: revert-time64_t-i386.patch Patch4: redhat-issues-39159-39132-32983-39293.patch Patch5: redhat-issues-RHEL-40718-java-bytecode-update.patch +Patch6: redhat-issues-RHEL-50693-hacluster-metrics-update.patch %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 ExcludeArch: %{ix86} @@ -3543,6 +3544,9 @@ fi %files zeroconf -f pcp-zeroconf-files.rpm %changelog +* Wed Aug 7 2024 Nathan Scott - 6.2.2-6 +- Update hacluster PMDA for pacemaker 2.1.6 crm_mon (RHEL-50693) + * Thu Aug 1 2024 Nathan Scott - 6.2.2-5 - Add rpm dependency on package providing ps(1) tool (RHEL-39491) - Update Java bytecode in pcp-testasuite package (RHEL-40718) @@ -3556,7 +3560,7 @@ fi * Mon Jun 10 2024 Nathan Scott - 6.2.2-3 - Revert time64_t related changes breaking i386 (RHEL-30198) -* Thu May 15 2024 Nathan Scott - 6.2.2-2 +* Thu May 16 2024 Nathan Scott - 6.2.2-2 - Adjust tmpfiles.d permissions for pmcd logdir (RHEL-30198) * Wed May 15 2024 Nathan Scott - 6.2.2-1 diff --git a/redhat-issues-RHEL-50693-hacluster-metrics-update.patch b/redhat-issues-RHEL-50693-hacluster-metrics-update.patch new file mode 100644 index 0000000..1441087 --- /dev/null +++ b/redhat-issues-RHEL-50693-hacluster-metrics-update.patch @@ -0,0 +1,721 @@ +commit 23c6a7f872446b6c92a1e899e2763827e9728d5d +Author: Paul Evans +Date: Mon Aug 5 14:27:51 2024 +0100 + + pmdahacluster: handle pacemaker 2.1.6 crm_mon output changes + + Update the handling of crm_mon output for pacemaker 2.1.6 to handle the + additional fields included in this release. + + Additional test root hacluster-root-003.tgz added to exercise these changes + while the original hacluster root tests exercises older crm_mon output + formats. + + This patch satisfies RHEL-50693 + +diff -Naurp pcp-6.2.2.orig/qa/1897.out pcp-6.2.2/qa/1897.out +--- pcp-6.2.2.orig/qa/1897.out 2023-11-16 17:51:39.000000000 +1100 ++++ pcp-6.2.2/qa/1897.out 2024-08-07 15:49:16.196678155 +1000 +@@ -1314,3 +1314,629 @@ ERROR SUMMARY: 0 errors from 0 contexts + + == done + ++== Checking metric descriptors and values - hacluster-root-003.tgz ++ ++ha_cluster.corosync.member_votes.local PMID: 155.6.1 [Votes that are local to this node] ++ Data Type: 32-bit unsigned int InDom: 155.5 0x26c00005 ++ Semantics: instant Units: count ++Help: ++The quorum votes which are local to this node in the cluster. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.corosync.member_votes.node_id PMID: 155.6.2 [Node ID] ++ Data Type: 64-bit unsigned int InDom: 155.5 0x26c00005 ++ Semantics: instant Units: count ++Help: ++The full corosync ID for the nodes in the cluster. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 2 ++ ++ha_cluster.corosync.member_votes.votes PMID: 155.6.0 [Quorum votes per node] ++ Data Type: 32-bit unsigned int InDom: 155.5 0x26c00005 ++ Semantics: instant Units: count ++Help: ++The number of quorum votes allocated to each node in the cluster. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 1 ++ ++ha_cluster.corosync.quorate PMID: 155.7.0 [Value given for quorate] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The value represents whether or not the cluster is quorate. ++ value 1 ++ ++ha_cluster.corosync.quorum_votes.expected_votes PMID: 155.7.1 [Expected vote count] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The number of expected quorum votes for the cluster. ++ value 2 ++ ++ha_cluster.corosync.quorum_votes.highest_expected PMID: 155.7.2 [Highest expected vote count] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The highest number of expected quorum votes for the cluster. ++ value 2 ++ ++ha_cluster.corosync.quorum_votes.quorum PMID: 155.7.4 [Whether cluster is quorate] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The value reported for the quorate for the cluster. ++ value 1 ++ ++ha_cluster.corosync.quorum_votes.total_votes PMID: 155.7.3 [Total number of votes] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The total number of quorum votes for the cluster. ++ value 2 ++ ++ha_cluster.corosync.ring_errors PMID: 155.7.5 [Number of faulty rings] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++The total number of Corosync rings which are faulty. ++ value 0 ++ ++ha_cluster.corosync.rings.address PMID: 155.8.1 [IP Address for ring] ++ Data Type: string InDom: 155.6 0x26c00006 ++ Semantics: instant Units: count ++Help: ++The IP address locally linked to this ring. ++ inst [0 or "0"] value "192.168.122.148" ++ ++ha_cluster.corosync.rings.all PMID: 155.15.0 [Corosync rings information] ++ Data Type: 32-bit unsigned int InDom: 155.13 0x26c0000d ++ Semantics: instant Units: count ++Help: ++Value is 1 if a ring exists. The details of the corresponding ring ++is given as label metadata values for this metric. ++ inst [0 or "0"] value 1 ++ ++ha_cluster.corosync.rings.node_id PMID: 155.8.2 [ID of the local node] ++ Data Type: 64-bit unsigned int InDom: 155.6 0x26c00006 ++ Semantics: instant Units: count ++Help: ++The internal Corosync node ID to the node matched to the ring. ++ inst [0 or "0"] value 1 ++ ++ha_cluster.corosync.rings.number PMID: 155.8.3 [Ring number] ++ Data Type: 32-bit unsigned int InDom: 155.6 0x26c00006 ++ Semantics: instant Units: count ++Help: ++The number for the Corosync ring. ++ inst [0 or "0"] value 0 ++ ++ha_cluster.corosync.rings.ring_id PMID: 155.8.4 [Ring ID] ++ Data Type: string InDom: 155.6 0x26c00006 ++ Semantics: instant Units: count ++Help: ++The internal Corosync ring ID, corresponds to the first node to join. ++ inst [0 or "0"] value "1.9" ++ ++ha_cluster.corosync.rings.status PMID: 155.8.0 [Corosync ring status] ++ Data Type: 32-bit unsigned int InDom: 155.6 0x26c00006 ++ Semantics: instant Units: count ++Help: ++The status for each Corosync ring in the cluster, a value of 1 is faulty and ++0 is healthy. ++ inst [0 or "0"] value 0 ++ ++ha_cluster.drbd.al_writes PMID: 155.10.6 [Writes to the activity log] ++ Data Type: 64-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++Amount of writes to the activity log area of metadata by the DRBD ++resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.bm_writes PMID: 155.10.7 [Writes to bitmap area] ++ Data Type: 64-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++Amount of writes to the bitmap area of metadata by the DRBD resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.connections.all PMID: 155.18.0 [DRBD Peer disk information] ++ Data Type: 32-bit unsigned int InDom: 155.16 0x26c00010 ++ Semantics: instant Units: count ++Help: ++Value is 1 if a drbd peer connection exists. The details of the corresponding DRBD peer ++connection is given as label metadata values for this metric. ++No value(s) available! ++ ++ha_cluster.drbd.connections.peer_disk_state PMID: 155.11.4 [Peer disk state] ++ Data Type: string InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The reported peer disk state for the connection. ++No value(s) available! ++ ++ha_cluster.drbd.connections.peer_node_id PMID: 155.11.1 [The ID the connection is for] ++ Data Type: string InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The given peer node ID for which the connection is for. ++No value(s) available! ++ ++ha_cluster.drbd.connections.peer_role PMID: 155.11.2 [Role of the connection] ++ Data Type: string InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The reported role type for the connection. ++No value(s) available! ++ ++ha_cluster.drbd.connections.resource PMID: 155.11.0 [Resource that the connection is for] ++ Data Type: string InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The given resource that the DRBD connection is for each resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.connections.volume PMID: 155.11.3 [Volume number] ++ Data Type: 32-bit unsigned int InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The reported volume for the connection. ++No value(s) available! ++ ++ha_cluster.drbd.connections_pending PMID: 155.11.8 [Number of connections pending] ++ Data Type: 32-bit unsigned int InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The number of requests sent which have not yet been received by DRBD for the ++resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.connections_received PMID: 155.11.6 [Volume of data received] ++ Data Type: 64-bit unsigned int InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The volume of data received via the network connection in KiB by DRBD for the ++resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.connections_sent PMID: 155.11.7 [Volume of data sent] ++ Data Type: 64-bit unsigned int InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The volume of data sent via the network connection in KiB by DRBD for the ++resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.connections_sync PMID: 155.11.5 [Connections in sync] ++ Data Type: float InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The number of DRBD connections in sync for each resource:volume, this value is ++between 0 to 100. ++No value(s) available! ++ ++ha_cluster.drbd.connections_unacked PMID: 155.11.9 [Number of connection not acknowledged] ++ Data Type: 32-bit unsigned int InDom: 155.9 0x26c00009 ++ Semantics: instant Units: count ++Help: ++The number of requests sent which have not yet been acknowledged by DRBD for ++the resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.lower_pending PMID: 155.10.9 [Number of open requests] ++ Data Type: 64-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The number of open requests to the local I/O subsystem by DRBD for the ++resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.quorum PMID: 155.10.10 [Quorum status of DRBD resource:volume] ++ Data Type: 32-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The Quorum status of the DRBD resource according to resource:volume, 1 is ++quorate and 0 is non-quorate. ++No value(s) available! ++ ++ha_cluster.drbd.read PMID: 155.10.5 [Amount read by DRBD resource] ++ Data Type: 32-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++Amount in KiB read by the DRBD resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.resources.all PMID: 155.17.0 [DRBD resource information] ++ Data Type: 32-bit unsigned int InDom: 155.15 0x26c0000f ++ Semantics: instant Units: count ++Help: ++Value is 1 if a drbd resource exists. The details of the corresponding drbd resource ++is given as label metadata values for this metric. ++No value(s) available! ++ ++ha_cluster.drbd.resources.disk_state PMID: 155.10.3 [Disk state] ++ Data Type: string InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The current reported disk state of for the resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.resources.resource PMID: 155.10.0 [Name of the resource] ++ Data Type: string InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The name given for the DRBD resource for each resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.resources.role PMID: 155.10.1 [Role of the resource] ++ Data Type: string InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The reported role for the DRBD resource for each resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.resources.volume PMID: 155.10.2 [Volume of the resource] ++ Data Type: string InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The volume number of the resource for each resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.split_brain PMID: 155.10.11 [Signal for split brain detection.] ++ Data Type: 32-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++This metric signals if there has been a split brain occurring in DRBD for the ++resource:volume, value is 1 is a split brain has been detected. ++No value(s) available! ++ ++ha_cluster.drbd.upper_pending PMID: 155.10.8 [Block I/O requests pending] ++ Data Type: 64-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++The number of the block I/O requests forwarded but not yet answered by DRBD ++for the resource:volume. ++No value(s) available! ++ ++ha_cluster.drbd.written PMID: 155.10.4 [Amount written to DRBD resource] ++ Data Type: 32-bit unsigned int InDom: 155.8 0x26c00008 ++ Semantics: instant Units: count ++Help: ++Amount in KiB written to the DRBD resource:volume. ++No value(s) available! ++ ++ha_cluster.pacemaker.config_last_change PMID: 155.0.0 [Unix timestamp corresponding to last Pacemaker configuration change] ++ Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++Unix timestamp in seconds corresponding to the last time that the Pacemaker ++configuration was changed on the system. ++ value 1687428694 ++ ++ha_cluster.pacemaker.fail_count PMID: 155.1.0 [The number of fail count recorded] ++ Data Type: 64-bit unsigned int InDom: 155.0 0x26c00000 ++ Semantics: instant Units: count ++Help: ++The number of fail count per node and resource ID, the actual maximum value ++depends on Pacemaker internals. ++ inst [0 or "rhel9-node1:VirtualIP"] value 0 ++ ++ha_cluster.pacemaker.location_constraints.all PMID: 155.12.0 [Location constraint information] ++ Data Type: 32-bit unsigned int InDom: 155.10 0x26c0000a ++ Semantics: instant Units: count ++Help: ++Value is 1 if a location constraint exists. The details of the location constraint ++is given as label metadata values for this metric. ++No value(s) available! ++ ++ha_cluster.pacemaker.location_constraints.node PMID: 155.2.0 [Node of the location constraint] ++ Data Type: string InDom: 155.1 0x26c00001 ++ Semantics: instant Units: count ++Help: ++The node that the location constraint applies to in the cluster. ++No value(s) available! ++ ++ha_cluster.pacemaker.location_constraints.resource PMID: 155.2.1 [Resource of the location constraint] ++ Data Type: string InDom: 155.1 0x26c00001 ++ Semantics: instant Units: count ++Help: ++The resource that the location constraint applies to in the cluster. ++No value(s) available! ++ ++ha_cluster.pacemaker.location_constraints.role PMID: 155.2.2 [Resource role of the location constraint] ++ Data Type: string InDom: 155.1 0x26c00001 ++ Semantics: instant Units: count ++Help: ++The resource role that the location constraint applies to, if any. ++No value(s) available! ++ ++ha_cluster.pacemaker.location_constraints.score PMID: 155.2.3 [Score of the location constraint] ++ Data Type: string InDom: 155.1 0x26c00001 ++ Semantics: instant Units: count ++Help: ++The score given to the location constraint by Pacemaker, the value depends on ++Pacemaker internals. ++No value(s) available! ++ ++ha_cluster.pacemaker.migration_threshold PMID: 155.1.1 [Migration threshold per node and resource ID] ++ Data Type: 64-bit unsigned int InDom: 155.0 0x26c00000 ++ Semantics: instant Units: count ++Help: ++The value for the migration threshold per node and resource ID set by the ++Pacemaker cluster. ++ inst [0 or "rhel9-node1:VirtualIP"] value 1000000 ++ ++ha_cluster.pacemaker.node_attributes PMID: 155.4.0 [Metadata used by Resource Agents] ++ Data Type: string InDom: 155.3 0x26c00003 ++ Semantics: instant Units: count ++Help: ++The raw values for the cluster metadata attributes and their value per node as ++used by the Resource Agents. ++No value(s) available! ++ ++ha_cluster.pacemaker.node_attributes_all PMID: 155.13.0 [Metadata information] ++ Data Type: 32-bit unsigned int InDom: 155.11 0x26c0000b ++ Semantics: instant Units: count ++Help: ++Value is 1 if a node metadata exists. The details of the node metadata ++is given as label metadata values for this metric. ++No value(s) available! ++ ++ha_cluster.pacemaker.nodes.status.dc PMID: 155.3.8 [Whether the node status is given as the DC] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the DC status is reported by the node in the cluster, a ++value of 1 confirms the node status as the designated coordinator. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.expected_up PMID: 155.3.7 [Whether the node status is given as expected_up] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the expected_up status is reported by the node in the cluster, a ++value of 1 confirms the node status as expected_up. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 1 ++ ++ha_cluster.pacemaker.nodes.status.maintenance PMID: 155.3.3 [Whether the node status is given as maintenance] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the maintenance status is reported by the node in the cluster, a ++value of 1 confirms the node status as online. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.online PMID: 155.3.0 [Whether the node status is given as online] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the online status is reported by the node in the cluster, a value of ++1 confirms the node status as online. ++ inst [0 or "rhel9-node1"] value 1 ++ inst [1 or "rhel9-node2"] value 1 ++ ++ha_cluster.pacemaker.nodes.status.pending PMID: 155.3.4 [Whether the node status is given as pending] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the pending status is reported by the node in the cluster, a value of ++1 confirms the node status as pending. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.shutdown PMID: 155.3.6 [Whether the node status is given as shutdown] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the shutdown status is reported by the node in the cluster, a value ++of 1 confirms the node status as shutdown. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.standby PMID: 155.3.1 [Whether the node status is given as standby] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the standby status is reported by the node in the cluster, a value of ++1 confirms the node status as standby. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.standby_on_fail PMID: 155.3.2 [Whether the node status is given as standby_on_fail] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the standby_on_fail status is reported by the node in the cluster, ++a value of 1 confirms the node status as standby_on_fail. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.status.unclean PMID: 155.3.5 [Whether the node status is given as unclean] ++ Data Type: 32-bit unsigned int InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++Whether the unclean status is reported by the node in the cluster, a value of ++1 confirms the node status as unclean. ++ inst [0 or "rhel9-node1"] value 0 ++ inst [1 or "rhel9-node2"] value 0 ++ ++ha_cluster.pacemaker.nodes.type PMID: 155.3.9 [The type given to the node] ++ Data Type: string InDom: 155.2 0x26c00002 ++ Semantics: instant Units: count ++Help: ++The membership type given to the node in the Pacemaker cluster. ++ inst [0 or "rhel9-node1"] value "member" ++ inst [1 or "rhel9-node2"] value "member" ++ ++ha_cluster.pacemaker.resources.agent PMID: 155.5.0 [The name of the resource agent for this resource] ++ Data Type: string InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++The name given for the resource agent for the given resource instance in the ++cluster. ++ inst [0 or "VirtualIP:rhel9-node1"] value "ocf:heartbeat:IPaddr2" ++ ++ha_cluster.pacemaker.resources.all PMID: 155.14.0 [Pacemaker resources information] ++ Data Type: 32-bit unsigned int InDom: 155.12 0x26c0000c ++ Semantics: instant Units: count ++Help: ++Value is 1 if a resources exists. The details of the resource ++is given as label metadata values for this metric. ++ inst [0 or "VirtualIP:rhel9-node1"] value 1 ++ ++ha_cluster.pacemaker.resources.clone PMID: 155.5.1 [The name of the clone given for this resource] ++ Data Type: string InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++The name given for the clone for the given resource instance in the cluster, ++if any. ++ inst [0 or "VirtualIP:rhel9-node1"] value "" ++ ++ha_cluster.pacemaker.resources.group PMID: 155.5.2 [The name of the group given for this resource] ++ Data Type: string InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++The name given for the group for the given resource instance in the cluster, ++if any. ++ inst [0 or "VirtualIP:rhel9-node1"] value "" ++ ++ha_cluster.pacemaker.resources.managed PMID: 155.5.3 [Value is either true or false] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++The value of whether the resource instance in the cluster is managed or not. ++ inst [0 or "VirtualIP:rhel9-node1"] value 1 ++ ++ha_cluster.pacemaker.resources.role PMID: 155.5.4 [The given role state] ++ Data Type: string InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++The value of the given role state for the resource instance in the cluster. ++ inst [0 or "VirtualIP:rhel9-node1"] value "Started" ++ ++ha_cluster.pacemaker.resources.status.active PMID: 155.5.5 [Whether the resources status is given as active] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++Whether the active status is reported by the resource in the cluster, a ++value of 1 confirms the resource status as active. ++ inst [0 or "VirtualIP:rhel9-node1"] value 1 ++ ++ha_cluster.pacemaker.resources.status.blocked PMID: 155.5.7 [Whether the resources status is given as blocked] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++Whether the blocked status is reported by the resource in the cluster, a ++value of 1 confirms the resource status as blocked. ++ inst [0 or "VirtualIP:rhel9-node1"] value 0 ++ ++ha_cluster.pacemaker.resources.status.failed PMID: 155.5.8 [Whether the resources status is given as failed] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++Whether the failed status is reported by the resource in the cluster, a ++value of 1 confirms the resource status as failed. ++ inst [0 or "VirtualIP:rhel9-node1"] value 0 ++ ++ha_cluster.pacemaker.resources.status.failure_ignored PMID: 155.5.9 [Whether the resources status is given as failure_ignored] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++Whether the failure_ignored status is reported by the resource in the ++cluster, a value of 1 confirms the resource status as failure_ignored. ++ inst [0 or "VirtualIP:rhel9-node1"] value 0 ++ ++ha_cluster.pacemaker.resources.status.orphaned PMID: 155.5.6 [Whether the resources status is given as orphaned] ++ Data Type: 32-bit unsigned int InDom: 155.4 0x26c00004 ++ Semantics: instant Units: count ++Help: ++Whether the orphaned status is reported by the resource in the cluster, a ++value of 1 confirms the resource status as orphaned. ++ inst [0 or "VirtualIP:rhel9-node1"] value 0 ++ ++ha_cluster.pacemaker.stonith_enabled PMID: 155.0.1 [Whether stonith is enabled in the cluster] ++ Data Type: 32-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff ++ Semantics: instant Units: count ++Help: ++Value returns as to whether stonith is enabled or disabled for the cluster. ++ value 0 ++ ++ha_cluster.sbd.all PMID: 155.16.0 [SBD device information] ++ Data Type: 32-bit unsigned int InDom: 155.14 0x26c0000e ++ Semantics: instant Units: count ++Help: ++Value is 1 if a sbd device exists. The details of the corresponding SBD device ++is given as label metadata values for this metric. ++No value(s) available! ++ ++ha_cluster.sbd.devices.path PMID: 155.9.0 [Path of SBD device] ++ Data Type: string InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The full path given to each SBD device. ++No value(s) available! ++ ++ha_cluster.sbd.devices.status PMID: 155.9.1 [Status of the SBD device] ++ Data Type: string InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The current status given for each of the SBD devices, the value is one of ++healthy or unhealthy. ++No value(s) available! ++ ++ha_cluster.sbd.timeouts.allocate PMID: 155.9.3 [allocate timeout value] ++ Data Type: 32-bit unsigned int InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The value threshold for allocate timeouts for the given SBD device. ++No value(s) available! ++ ++ha_cluster.sbd.timeouts.loop PMID: 155.9.4 [loop timeout value] ++ Data Type: 32-bit unsigned int InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The value threshold for loop timeouts for the given SBD device. ++No value(s) available! ++ ++ha_cluster.sbd.timeouts.mgswait PMID: 155.9.2 [mgswait timeout value] ++ Data Type: 32-bit unsigned int InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The value threshold for msgwait timeouts for the given SBD device. ++No value(s) available! ++ ++ha_cluster.sbd.timeouts.watchdog PMID: 155.9.5 [watchdog timeout value] ++ Data Type: 32-bit unsigned int InDom: 155.7 0x26c00007 ++ Semantics: instant Units: count ++Help: ++The value threshold for watchdog timeouts for the given SBD device. ++No value(s) available! ++== Checking with valgrind - hacluster-root-003.tgz ++=== std out === ++ ++ha_cluster.pacemaker.config_last_change ++ value 1687428694 ++ ++ha_cluster.corosync.quorate ++ value 1 ++ ++ha_cluster.sbd.devices.path ++No value(s) available! ++ ++ha_cluster.drbd.split_brain ++No value(s) available! ++=== std err === ++=== filtered valgrind report === ++Memcheck, a memory error detector ++Command: pminfo -L -K clear -K add,155,PCP_PMDAS_DIR/hacluster/pmda_hacluster.so,hacluster_init -f ha_cluster.pacemaker.config_last_change ha_cluster.corosync.quorate ha_cluster.sbd.devices.path ha_cluster.drbd.split_brain ++LEAK SUMMARY: ++definitely lost: 0 bytes in 0 blocks ++indirectly lost: 0 bytes in 0 blocks ++ERROR SUMMARY: 0 errors from 0 contexts ... ++ ++== done ++ +diff -Naurp pcp-6.2.2.orig/qa/hacluster/hacluster-root-003.tgz pcp-6.2.2/qa/hacluster/hacluster-root-003.tgz +--- pcp-6.2.2.orig/qa/hacluster/hacluster-root-003.tgz 1970-01-01 10:00:00.000000000 +1000 ++++ pcp-6.2.2/qa/hacluster/hacluster-root-003.tgz 2024-08-07 15:51:27.795737748 +1000 +@@ -0,0 +1,13 @@ ++[[s6Ϋ+CYSJbKco;}@$(!& h?~@e&!&c pÅ'n.p{alOz`~ ~jJSIȓ-iϴu &`&?Q$1?hm!(Y[->*{?zUa7=!ݏ(Ý ?::,[UV+^u ++ABNcFu!T1=q;Ȓ&<+/!K ~}zGɊtZ8RMGLM{x&~BWkͲw(ȿuǽ޸? A7{s%'~&"֫ޅ gYFsPL!Gt ++!t(G/ir,BRE=lLs)r& D 4NJK"G2+lS. WTH4eogfQSifZ:۔hAV7>vV3[q~}To:Q֪?Q/r\v\ri̾S~_߭~ϵ9;n/?<=M?M?F{ 2q;X^[:жA0=7 G=Q{<-z[B1(.h6GXX")S| "嘐mr;jk ++ɀ&͈ɩ^8]JLi#lUJĖkdY0YbhPXj639{q쇋$apdE(L͞mqo嬂=#k(N\1Q{Ɗ!5@d$be ,Ɋ*ؘkXJ Pɚ NՆUϿ"*t`\R*yu}󋉓{ǘcM䖒hmF,kBc+f"#xiR5_2?aW) ++} ++g>CFQ5鉃&sQD2CK SX!b*bGQF#"3io DhxU¢9KY\P*IaR +++U08ȒK]@WJ `BD pWd:;06e\3n-BD4OQ LFgp',XtR9ĹS+0t@`)܂1Y q%A%o:r#n E? !B0)}NPco+j^@6 ++A-DPă go@g|1Ǝh7W~) Ab fScXM^yWH抅6il6@7#8IGax@(1m,Sdz_mN ZAv0S~)Z;kɊ$9!E@TiQ)/g/?/D6Ӎ|ch C #ㆊL_`]ۯ1q1u-)#3 4#`u0% _;d|'$0*.W6 (BD̴[>x.Qztv%oNJv rzQ gDs\GEՋ#I.DD(2C0l ++24bʓB:W "_9")VXfJ}\O/,]Yhy9,bYX +H$0AQ^ sL"t5 1ch;1&R ڞt`U 1kui$Yk(Ҕns368(5n~~5PY;*wm0ڜ3Xp13]֊8jC^0`4M8&G{TpM촁Cp|nV%DhX6rƌX]H33|@Jh~xd_ sNocG^\.ۧ8iuz6UUԾaX̕4EسD7%x<(픶#j N\aYH[zPP62,R|CKܧIRh+þ<KrsycY |shF8uN;0Wջ#VaZ4[d2S/I]Së(z.2s_=/M~.<[q=բБXm&!fK*6!dvC%܀=3DLy?;dLpfC{J&yEA g EHFƺp$YV2%U2Jh w7uwUEg)bঞliVݥfkd\g\%CeO7mV+p  j7BQ7*!BPu3r)f* N5{)@}hW0U`s=]|""O2vK8dFfJ`t -<޼=-7_toӚִ5iMkZӚִ5iMkZӚִ/gh,P +\ No newline at end of file +diff -Naurp pcp-6.2.2.orig/src/pmdas/hacluster/help pcp-6.2.2/src/pmdas/hacluster/help +--- pcp-6.2.2.orig/src/pmdas/hacluster/help 2023-11-16 17:51:39.000000000 +1100 ++++ pcp-6.2.2/src/pmdas/hacluster/help 2024-08-07 15:49:33.914903633 +1000 +@@ -281,8 +281,8 @@ The volume number of the resource for ea + The current reported disk state of for the resource:volume. + + @ ha_cluster.drbd.resources.all DRBD resource information +-Value is 1 if a drbd resource exists. The details of the corresponding drbd resource +-is given as label metadata values for this metric. ++Value is 1 if a DRBD resource exists. Details of the corresponding DRBD ++resource are given as label metadata values for this metric. + + @ ha_cluster.drbd.connections.resource Resource that the connection is for + The given resource that the DRBD connection is for each resource:volume. +@@ -300,5 +300,5 @@ The reported volume for the connection. + The reported peer disk state for the connection. + + @ ha_cluster.drbd.connections.all DRBD Peer disk information +-Value is 1 if a drbd peer connection exists. The details of the corresponding DRBD peer +-connection is given as label metadata values for this metric. ++Value is 1 if a DRBD peer connection exists. Details of the corresponding ++DRBD peer connection are given as label metadata values for this metric. +diff -Naurp pcp-6.2.2.orig/src/pmdas/hacluster/pacemaker.c pcp-6.2.2/src/pmdas/hacluster/pacemaker.c +--- pcp-6.2.2.orig/src/pmdas/hacluster/pacemaker.c 2023-11-16 17:51:39.000000000 +1100 ++++ pcp-6.2.2/src/pmdas/hacluster/pacemaker.c 2024-08-07 15:51:14.150698727 +1000 +@@ -707,6 +707,7 @@ hacluster_refresh_pacemaker_resources(co + /* Collect our metrics */ + if (strstr(buffer, "resource id=") && strstr(buffer, resource_id)) { + ++ /* Pacemaker v2.14 and prior crm_mon format */ + if (strstr(buffer, "target_role")) { + sscanf(buffer, "%*s %*s resource_agent=\"%[^\"]\" role=\"%[^\"]\" %*s active=\"%7[^\"]\" orphaned=\"%7[^\"]\" blocked=\"%7[^\"]\" managed=\"%7[^\"]\" failed=\"%7[^\"]\" failure_ignored=\"%7[^\"]\"", + resources->agent, +@@ -718,6 +719,21 @@ hacluster_refresh_pacemaker_resources(co + failed, + failure_ignored + ); ++ ++ /* Pacemaker v2.16+ crm_mon format */ ++ } else if (strstr(buffer, "maintenance")) { ++ sscanf(buffer, "%*s %*s resource_agent=\"%[^\"]\" role=\"%[^\"]\" active=\"%7[^\"]\" orphaned=\"%7[^\"]\" blocked=\"%7[^\"]\" %*s managed=\"%7[^\"]\" failed=\"%7[^\"]\" failure_ignored=\"%7[^\"]\"", ++ resources->agent, ++ resources->role, ++ active, ++ orphaned, ++ blocked, ++ managed, ++ failed, ++ failure_ignored ++ ); ++ ++ /* Pacemaker v2.15 crm_mon format */ + } else { + sscanf(buffer, "%*s %*s resource_agent=\"%[^\"]\" role=\"%[^\"]\" active=\"%7[^\"]\" orphaned=\"%7[^\"]\" blocked=\"%7[^\"]\" managed=\"%7[^\"]\" failed=\"%7[^\"]\" failure_ignored=\"%7[^\"]\"", + resources->agent,