From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 4033D1FF0E2 for ; Thu, 30 Jul 2026 15:17:52 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 9FABD213E5; Thu, 30 Jul 2026 15:17:51 +0200 (CEST) From: Fiona Ebner To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server 1/8] block job: monitor: avoid duplicate completion Date: Thu, 30 Jul 2026 15:15:50 +0200 Message-ID: <20260730131613.157722-2-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260730131613.157722-1-f.ebner@proxmox.com> References: <20260730131613.157722-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1785417458054 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.164 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_LOW -0.7 Sender listed at https://www.dnswl.org/, low trust 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: WUXMCDJGXQL7FA3LJ5J7BLYEGU6C7BHW X-Message-ID-Hash: WUXMCDJGXQL7FA3LJ5J7BLYEGU6C7BHW X-MailFrom: f.ebner@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: If the QMP command for completion (i.e. complete or cancel) is successful, the job transitions to the next state in QEMU. So a duplicate completion command won't usually do anything. A job might take some time to actually complete, so at the moment, completion handling may happen multiple times. This produces confusing duplicate log lines and can actually lead to unnecessary failure with bad timing, if the job transitions to state 'concluded' after between querying the status and issuing the next complete: > VM 100 qmp command 'job-complete' failed - \ > Job 'mirror-scsi0' in state 'concluded' cannot \ > accept command verb 'complete' Signed-off-by: Fiona Ebner --- src/PVE/QemuServer/BlockJob.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/PVE/QemuServer/BlockJob.pm b/src/PVE/QemuServer/BlockJob.pm index 921f046c..254d7906 100644 --- a/src/PVE/QemuServer/BlockJob.pm +++ b/src/PVE/QemuServer/BlockJob.pm @@ -196,6 +196,8 @@ sub monitor { } else { for my $job_id (sort keys %$jobs) { + next if $jobs->{$job_id}->{complete}; + # try to switch the disk if source and destination are on the same guest print "$job_id: Completing block job...\n"; -- 2.47.3