From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 128591FF15E for <inbox@lore.proxmox.com>; Tue, 25 Mar 2025 16:13:23 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A5F18C97C; Tue, 25 Mar 2025 16:13:07 +0100 (CET) From: Daniel Kral <d.kral@proxmox.com> To: pve-devel@lists.proxmox.com Date: Tue, 25 Mar 2025 16:12:41 +0100 Message-Id: <20250325151254.193177-4-d.kral@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250325151254.193177-1-d.kral@proxmox.com> References: <20250325151254.193177-1-d.kral@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.009 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH ha-manager 02/15] tools: add hash set helper subroutines X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Implement helper subroutines, which implement basic set operations done on hash sets, i.e. hashes with elements set to a true value, e.g. 1. These will be used for various tasks in the HA Manager colocation rules, e.g. for verifying the satisfiability of the rules or applying the colocation rules on the allowed set of nodes. Signed-off-by: Daniel Kral <d.kral@proxmox.com> --- If they're useful somewhere else, I can move them to PVE::Tools post-RFC, but it'd be probably useful to prefix them with `hash_` there. AFAICS there weren't any other helpers for this with a quick grep over all projects and `PVE::Tools::array_intersect()` wasn't what I needed. src/PVE/HA/Tools.pm | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/PVE/HA/Tools.pm b/src/PVE/HA/Tools.pm index 0f9e9a5..fc3282c 100644 --- a/src/PVE/HA/Tools.pm +++ b/src/PVE/HA/Tools.pm @@ -115,6 +115,48 @@ sub write_json_to_file { PVE::Tools::file_set_contents($filename, $raw); } +sub is_disjoint { + my ($hash1, $hash2) = @_; + + for my $key (keys %$hash1) { + return 0 if exists($hash2->{$key}); + } + + return 1; +}; + +sub intersect { + my ($hash1, $hash2) = @_; + + my $result = { map { $_ => $hash2->{$_} } keys %$hash1 }; + + for my $key (keys %$result) { + delete $result->{$key} if !defined($result->{$key}); + } + + return $result; +}; + +sub set_difference { + my ($hash1, $hash2) = @_; + + my $result = { map { $_ => 1 } keys %$hash1 }; + + for my $key (keys %$result) { + delete $result->{$key} if defined($hash2->{$key}); + } + + return $result; +}; + +sub union { + my ($hash1, $hash2) = @_; + + my $result = { map { $_ => 1 } keys %$hash1, keys %$hash2 }; + + return $result; +}; + sub count_fenced_services { my ($ss, $node) = @_; -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel