Skip to content

skip a queued volume detach when the volume is no longer on that vm - #14401

Open
Damans227 wants to merge 1 commit into
apache:mainfrom
Damans227:fix-stale-detach-volume
Open

Damans227 wants to merge 1 commit into
apache:mainfrom
Damans227:fix-stale-detach-volume

Conversation

@Damans227

@Damans227 Damans227 commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #14214

A detach that waits in the queue can run after the volume was already detached and attached to another vm. When it finally runs it still clears the volume's attachment in the database, so CloudStack thinks the volume is free while it is still plugged in. Every later attach to that vm then gets the same device slot and fails with target 'vdX' duplicated. This makes the detach check that the volume is still attached to the vm it was asked to leave. If it isnt, it logs a warning and leaves the volume alone. The attach side case in the issue (occurrence 4) has no known cause yet and is not covered here.

Test:

Unit tests for a detach that runs after the volume moved to another vm, and after it was already detached.

On a KVM lab with 2 hosts, deploy vm A and vm B and attach data volume V to A. While V is on A, send back to back: detach V (job 1), stop A, detach V again (job 2). Job 2 waits behind the stop. When job 1 is done, attach V to B. Job 2 runs after the stop finishes.

Before: job 2 clears V's attachment while V is still plugged into B, and the next attach to B fails with target 'vdX' duplicated.

After: job 2 succeeds and leaves V on B. A later attach to B gets the next slot.

job-82 detach V        15:52:23 -> 15:52:26 SUCCEEDED
job-84 stop A          15:52:23 -> 15:53:01 SUCCEEDED
job-88 attach V to B   15:52:28 -> 15:52:31 SUCCEEDED
job-86 detach V        15:52:23 -> 15:53:04 SUCCEEDED

cmk list volumes id=<V>
  "name": "volV", "vmname": "vmB", "deviceid": 1

virsh domblklist i-2-8-VM   (vm B)
 vda  .../e5cf4917-49af-4adc-9b89-a3d77d7a562c
 vdb  .../e8a48991-edef-4020-9a44-38ba9ebe3283   (V)
 vdc  .../c77d109e-7e27-4e91-87a7-766d3edeb1e5   (next attach)

@Damans227

Copy link
Copy Markdown
Collaborator Author

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@Damans227 a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@codecov

codecov Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 66.66667% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 20.21%. Comparing base (a945a7c) to head (9e4cee9).

Files with missing lines Patch % Lines
...n/java/com/cloud/storage/VolumeApiServiceImpl.java 66.66% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff            @@
##               main   #14401   +/-   ##
=========================================
  Coverage     20.21%   20.21%           
- Complexity    20749    20753    +4     
=========================================
  Files          6426     6426           
  Lines        580181   580184    +3     
  Branches      71033    71034    +1     
=========================================
+ Hits         117292   117301    +9     
+ Misses       450174   450170    -4     
+ Partials      12715    12713    -2     
Flag Coverage Δ
uitests 3.69% <ø> (ø)
unittests 21.51% <66.66%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19553

@Damans227
Damans227 marked this pull request as ready for review October 14, 2026 16:39

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Straggler DetachVolume job clears attachment state of a newer attach on another VM, leaving an orphaned disk in libvirt (KVM)

2 participants