Repository navigation
Driver is called when nothing is changed in volume resize wizard - #14259
sathvikaragi wants to merge 2 commits into
Conversation
#110) Calling resizeVolume with the existing volume size still invoked the storage driver, causing an unnecessary driver resize request for volumes. ### Description This PR... <!--- Describe your changes in DETAIL - And how has behaviour functionally changed. --> <!-- For new features, provide link to FS, dev ML discussion etc. --> <!-- In case of bug fix, the expected and actual behaviours, steps to reproduce. --> <!-- When "Fixes: #<id>" is specified, the issue/PR will automatically be closed when this PR gets merged --> <!-- For addressing multiple issues/PRs, use multiple "Fixes: #<id>" --> <!-- Fixes: # --> <!--- ******************************************************************************* --> <!--- NOTE: AUTOMATION USES THE DESCRIPTIONS TO SET LABELS AND PRODUCE DOCUMENTATION. --> <!--- PLEASE PUT AN 'X' in only **ONE** box --> <!--- ******************************************************************************* --> ### Types of changes - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] New feature (non-breaking change which adds functionality) - [X] Bug fix (non-breaking change which fixes an issue) - [ ] Enhancement (improves an existing feature and functionality) - [ ] Cleanup (Code refactoring and cleanup, that may add test cases) - [ ] Build/CI - [ ] Test (unit or integration test code) ### Feature/Enhancement Scale or Bug Severity #### Feature/Enhancement Scale - [ ] Major - [ ] Minor #### Bug Severity - [ ] BLOCKER - [ ] Critical - [ ] Major - [X] Minor - [ ] Trivial ### Screenshots (if appropriate): Before Patch API is still called in case of no changes in the wizard: <img width="1423" height="1034" alt="Screenshot 2026-09-24 at 4 33 33 PM" src="https://github.com/user-attachments/assets/5480986e-bc79-4bc7-b05c-62077c2cc93e" /> actually resizes (IN UI) <img width="1441" height="638" alt="Screenshot 2026-09-24 at 4 36 00 PM" src="https://github.com/user-attachments/assets/8430eaa3-947e-41d4-8573-518f7831d7f0" /> after the fix Patch api is not called : <img width="1393" height="1035" alt="Screenshot 2026-09-24 at 4 17 52 PM" src="https://github.com/user-attachments/assets/b53e1146-560a-437a-9b0c-501be9ec4d76" /> Shows success immediately: <img width="1471" height="728" alt="Screenshot 2026-09-24 at 4 28 37 PM" src="https://github.com/user-attachments/assets/9cdd57b0-2b1f-4550-9830-46f87c439061" /> ### How Has This Been Tested? <!-- Please describe in detail how you tested your changes. --> <!-- Include details of your testing environment, and the tests you ran to --> #### How did you try to break this feature and the system with this change? <!-- see how your change affects other areas of the code, etc. --> <!-- Please read the [CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md) document -->
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #14259 +/- ##
=========================================
Coverage 19.91% 19.91%
- Complexity 20194 20197 +3
=========================================
Files 6373 6373
Lines 577230 577231 +1
Branches 70696 70697 +1
=========================================
+ Hits 114942 114958 +16
+ Misses 449722 449707 -15
Partials 12566 12566
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
2 open findings
What changed in this PR
Prevents invoking the storage driver (and related backend resize flow) when the volume resize wizard is submitted without any actual changes, addressing #14260.
Changes:
- Expands the early-return path to trigger when neither migration nor resize is required, even if no new disk offering is provided.
- Guards disk-offering updates so they only run when
newDiskOffering != null.
| File | Description |
|---|---|
| server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java | Adjusts the “no-op resize” logic to return early without calling the storage driver unless a disk offering change is explicitly requested. |
🧠 Review effort: Lite
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
| if (!volumeMigrateRequired && !volumeResizeRequired) { | ||
| volume = _volsDao.findById(volume.getId()); | ||
| updateStorageWithTheNewDiskOffering(volume, newDiskOffering); | ||
|
|
||
| if (newDiskOffering != null) { | ||
| _volsDao.updateDiskOffering(volume.getId(), newDiskOffering.getId()); | ||
| updateStorageWithTheNewDiskOffering(volume, newDiskOffering); | ||
| } | ||
| return volume; | ||
| } |
There was a problem hiding this comment.
Volume is now reloaded after _volsDao.updateDiskOffering, hence this issue won't be faced.
| if (!volumeMigrateRequired && !volumeResizeRequired && newDiskOffering != null) { | ||
| _volsDao.updateDiskOffering(volume.getId(), newDiskOffering.getId()); | ||
| if (!volumeMigrateRequired && !volumeResizeRequired) { | ||
| volume = _volsDao.findById(volume.getId()); |
There was a problem hiding this comment.
volume is now fetched here only after the DB update to pass on to updateStorageWithTheNewDiskOffering(volume, newDiskOffering);
| volume = _volsDao.findById(volume.getId()); | ||
| updateStorageWithTheNewDiskOffering(volume, newDiskOffering); | ||
|
|
||
| if (newDiskOffering != null) { |
There was a problem hiding this comment.
should we also skip this when the new offering is the same as the current one? nothing changes then but the storage driver still gets called here
There was a problem hiding this comment.
I agree, I have added that check to compare newdiskofferingID and volume's diskoffering ID. Now when same ID is given driver call is skipped and volume is returned.
#120) … volume resize return early ### Description This PR... <!--- Describe your changes in DETAIL - And how has behaviour functionally changed. --> <!-- For new features, provide link to FS, dev ML discussion etc. --> <!-- In case of bug fix, the expected and actual behaviours, steps to reproduce. --> <!-- When "Fixes: #<id>" is specified, the issue/PR will automatically be closed when this PR gets merged --> <!-- For addressing multiple issues/PRs, use multiple "Fixes: #<id>" --> <!-- Fixes: # --> <!--- ******************************************************************************* --> <!--- NOTE: AUTOMATION USES THE DESCRIPTIONS TO SET LABELS AND PRODUCE DOCUMENTATION. --> <!--- PLEASE PUT AN 'X' in only **ONE** box --> <!--- ******************************************************************************* --> ### Types of changes - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] New feature (non-breaking change which adds functionality) - [X] Bug fix (non-breaking change which fixes an issue) - [ ] Enhancement (improves an existing feature and functionality) - [ ] Cleanup (Code refactoring and cleanup, that may add test cases) - [ ] Build/CI - [ ] Test (unit or integration test code) ### Feature/Enhancement Scale or Bug Severity #### Feature/Enhancement Scale - [ ] Major - [X] Minor #### Bug Severity - [ ] BLOCKER - [ ] Critical - [ ] Major - [X] Minor - [ ] Trivial ### Screenshots (if appropriate): ### How Has This Been Tested? In case a newerdiskofferingID is mentioned in API then it updates the DB. <img width="1394" height="814" alt="Screenshot 2026-10-13 at 11 53 33 AM" src="https://github.com/user-attachments/assets/9b4e8249-c639-4d29-8ca4-9431b4f1b6cd" /> when same ID is given then it immediately returns. <img width="1404" height="522" alt="Screenshot 2026-10-13 at 11 53 44 AM" src="https://github.com/user-attachments/assets/d6d0350c-464b-4644-9470-b8879ebdb48c" /> <!-- Please describe in detail how you tested your changes. --> <!-- Include details of your testing environment, and the tests you ran to --> #### How did you try to break this feature and the system with this change? <!-- see how your change affects other areas of the code, etc. --> <!-- Please read the [CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md) document -->
Damans227
left a comment
There was a problem hiding this comment.
thanks @sathvikaragi, the same offering check looks right. LGTM


Description
Calling resizeVolume with the existing volume details and not changing anything in wizard still invoked the storage driver, causing an unnecessary driver resize request for volumes.
fixes : #14260
This PR...
Types of changes
Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale
Bug Severity
Screenshots (if appropriate):
actually resizes (In backend driver call is made and in UI also we can see it is resizing)

Shows success immediately:

when diskoffering ID is same as what volume already has driver is not called and it is returned immediately :

How Has This Been Tested?
How did you try to break this feature and the system with this change?