Skip to content

linstor: Use template's uuid if pool's downloadPath is null as resour… #11053

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

ghernadi
Copy link

Description

My colleague, @rp- is on vacation right now and we found a bug where the previously non-null VMTemplateStoragePoolVO#getLocalDownloadPath for some reason returns null in the recent versions of Cloudstack. This is my attempt to patch the issue, which worked in our test-setup.

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • 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
  • Minor
  • Trivial

Screenshots (if appropriate):

How Has This Been Tested?

The following scenario no longer works without this patch:

  • Create a new VM (instance)
  • Stop VM and make a snapshot of it
  • Create a template from the just created snapshot
  • Create a new VM from the new template

The last step causes the cloud-plugin-storage-volume-linstor to try to clone from cs-null instead of cs-${template_uuid}. cs-null obviously does not exist within LINSTOR itself, which causes an error.

How did you try to break this feature and the system with this change?

Copy link

boring-cyborg bot commented Jun 18, 2025

Congratulations on your first Pull Request and welcome to the Apache CloudStack community! If you have any issues or are unsure about any anything please check our Contribution Guide (https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
Here are some useful points:

@@ -668,8 +671,15 @@ private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolV
storagePoolVO.getId(), csCloneId, null);

if (tmplPoolRef != null) {
final String templateRscName = LinstorUtil.RSC_PREFIX + tmplPoolRef.getLocalDownloadPath();
final String templateRscName;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove the final?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can change that if some coding guidelines of Cloudstack wants me to, but the thought-process here was to keep the variable effectively final after it was initialized (which happens in the next few lines. Do you still want me to remove it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, if it works it works but a buit strange to have a final be assigned later (guess it is alright during initialisation)

Copy link

codecov bot commented Jun 25, 2025

Codecov Report

Attention: Patch coverage is 0% with 7 lines in your changes missing coverage. Please review.

Project coverage is 16.57%. Comparing base (0d5a0ea) to head (2e1de6f).
Report is 663 commits behind head on main.

Files with missing lines Patch % Lines
...tore/driver/LinstorPrimaryDataStoreDriverImpl.java 0.00% 6 Missing ⚠️
.../hypervisor/kvm/storage/LinstorStorageAdaptor.java 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main   #11053      +/-   ##
============================================
+ Coverage     15.18%   16.57%   +1.39%     
- Complexity    11365    13969    +2604     
============================================
  Files          5416     5743     +327     
  Lines        475890   510499   +34609     
  Branches      58093    62076    +3983     
============================================
+ Hits          72254    84623   +12369     
- Misses       395550   416413   +20863     
- Partials       8086     9463    +1377     
Flag Coverage Δ
uitests 3.90% <ø> (-0.39%) ⬇️
unittests 17.47% <0.00%> (+1.56%) ⬆️

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

☔ View full report in Codecov by Sentry.
📢 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.

@DaanHoogland
Copy link
Contributor

My colleague, @rp- is on vacation right now and we found a bug where the previously non-null VMTemplateStoragePoolVO#getLocalDownloadPath for some reason returns null in the recent versions of Cloudstack. This is my attempt to patch the issue, which worked in our test-setup.

“recent” menaing unreleased versions, or also 4.19.3 and/or 4.20.1, @ghernadi ?

in the later case you may want to base your fix off of an older release branch.

@ghernadi
Copy link
Author

“recent” menaing unreleased versions, or also 4.19.3 and/or 4.20.1, @ghernadi ?

in the later case you may want to base your fix off of an older release branch.

To my understanding the old version (i.e. the version before my PR) was working as expected with versions 4.19.1.3 and 4.20.0.0, but 4.19.2.0 or 4.19.3.0 already require my PR to work again.

What branch do you suggest to rebase this PR?

@DaanHoogland
Copy link
Contributor

in that case 4.19 @ghernadi

@rp- rp- self-assigned this Jun 30, 2025
@rp-
Copy link
Contributor

rp- commented Jun 30, 2025

I'm back and will also update this PR and add the scenario to the integration tests

@rp- rp- force-pushed the gh/fix-linstor-tmpl-download-path branch from 935ed8a to f1f6cc4 Compare July 1, 2025 10:39
@boring-cyborg boring-cyborg bot added component:integration-test Python Warning... Python code Ahead! labels Jul 1, 2025
@@ -668,8 +671,15 @@ private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolV
storagePoolVO.getId(), csCloneId, null);

if (tmplPoolRef != null) {
final String templateRscName = LinstorUtil.RSC_PREFIX + tmplPoolRef.getLocalDownloadPath();
final String templateRscName;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, if it works it works but a buit strange to have a final be assigned later (guess it is alright during initialisation)

…ce-name

Also added an integration test for templates from snapshots
@rp- rp- force-pushed the gh/fix-linstor-tmpl-download-path branch from f1f6cc4 to 2e1de6f Compare July 1, 2025 11:23
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.

3 participants