From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 787271FF136 for ; Mon, 20 Apr 2026 18:44:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1A1AFAF41; Mon, 20 Apr 2026 18:43:56 +0200 (CEST) From: =?UTF-8?q?Michael=20K=C3=B6ppl?= To: pve-devel@lists.proxmox.com Subject: [PATCH cluster v2 6/8] api: add token timeout and warning level to cluster join info Date: Mon, 20 Apr 2026 18:43:12 +0200 Message-ID: <20260420164314.370023-7-m.koeppl@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260420164314.370023-1-m.koeppl@proxmox.com> References: <20260420164314.370023-1-m.koeppl@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1776703315620 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.100 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: D5W2EUR2ULO6NONWHVLQAGNAZFMOQCCI X-Message-ID-Hash: D5W2EUR2ULO6NONWHVLQAGNAZFMOQCCI X-MailFrom: m.koeppl@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: The token timeout in seconds and the warning level provide additional information for users regarding the expected token timeout in seconds after adding an additional node and whether changing the token coefficient is recommended. Signed-off-by: Michael Köppl --- src/PVE/API2/ClusterConfig.pm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/PVE/API2/ClusterConfig.pm b/src/PVE/API2/ClusterConfig.pm index bbed40e..5739e4c 100644 --- a/src/PVE/API2/ClusterConfig.pm +++ b/src/PVE/API2/ClusterConfig.pm @@ -571,6 +571,18 @@ __PACKAGE__->register_method({ preferred_node => get_standard_option('pve-node'), totem => { type => 'object' }, config_digest => { type => 'string' }, + expected_timeout => { + type => 'number', + description => + "Expected total timeout (in seconds) if an additional node is added.", + optional => 1, + }, + timeout_warning_level => { + type => 'string', + description => "Warning level for the expected total timeout.", + optional => 1, + enum => ['optimize', 'change-recommended', 'change-strongly-recommended'], + }, }, }, code => sub { @@ -599,12 +611,22 @@ __PACKAGE__->register_method({ $node->{pve_addr} = scalar(PVE::Cluster::remote_node_ip($name)); } + # Total timeout if additional node is added + my $total_timeout_secs = PVE::Corosync::calculate_membership_recovery_timeout( + $totem_cfg, + scalar(keys %$nodelist) + 1, + ); + + my $warning_level = PVE::Corosync::get_timeout_warning_level($total_timeout_secs); + my $res = { nodelist => [values %$nodelist], preferred_node => $nodename, totem => $totem_cfg, config_digest => $corosync_config_digest, + expected_timeout => $total_timeout_secs, }; + $res->{timeout_warning_level} = $warning_level if defined($warning_level); return $res; }, -- 2.47.3