From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BFE661FF133 for ; Mon, 27 Apr 2026 19:06:50 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id F123224D62; Mon, 27 Apr 2026 19:06:26 +0200 (CEST) From: =?UTF-8?q?Michael=20K=C3=B6ppl?= To: pve-devel@lists.proxmox.com Subject: [PATCH cluster v3 6/8] api: add token timeout and warning level to cluster join info Date: Mon, 27 Apr 2026 19:05:46 +0200 Message-ID: <20260427170548.307698-7-m.koeppl@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260427170548.307698-1-m.koeppl@proxmox.com> References: <20260427170548.307698-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: 1777309455550 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.096 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: CHBKHDZK4QKVKDASVN3QBF52MQH247WC X-Message-ID-Hash: CHBKHDZK4QKVKDASVN3QBF52MQH247WC 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 | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/PVE/API2/ClusterConfig.pm b/src/PVE/API2/ClusterConfig.pm index bbed40e..e3a07cd 100644 --- a/src/PVE/API2/ClusterConfig.pm +++ b/src/PVE/API2/ClusterConfig.pm @@ -571,6 +571,19 @@ __PACKAGE__->register_method({ preferred_node => get_standard_option('pve-node'), totem => { type => 'object' }, config_digest => { type => 'string' }, + expected_timeout => { + type => 'number', + description => + "Expected total membership recovery timeout (in seconds) if an additional node is added.", + optional => 1, + }, + timeout_warning_level => { + type => 'string', + description => + "Warning level for the expected total membership recovery timeout.", + optional => 1, + enum => ['optimize', 'change-recommended', 'change-strongly-recommended'], + }, }, }, code => sub { @@ -599,12 +612,23 @@ __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_membership_recovery_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