Skip to content

Conversation

@winterhazel
Copy link
Member

Description

After adding a new secondary storage, CloudStack will always try to download public templates/ISOs that have URLs from the source to the new secondary storage, even if it already exists on another one. Due to this behavior, if the URL does not exist anymore, the template will not become available at the new storage; and if the template has been updated at the source, it will not be installed because of checksum mismatch. This forces operators to manually copy/move templates to the new secondary storage.

To solve this issue, this PR creates the zone-scoped setting copy.public.templates.from.other.storages. When enabled, CloudStack will try to copy templates/ISOs from other secondary storages in the same zone before attempting to downloading them from the source. It is enabled by default.

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)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

How Has This Been Tested?

With the setting enabled

  1. I deleted all existing secondary storages, and registered an empty one (SS 1). I verified that the SSVM started to download the templates that were registered.

  2. I registered another template, and immediately also registered secondary storage 2. I verified that the templates available in SS 1 were copied to SS 2, and that the last registered template was being downloaded to both secondary storages.

  3. Inside SS 1, I deleted the first half of templates; inside SS 2, I deleted the other half of templates. Then, I added SS 3. I verified that all the templates were copied to SS 3. SS 1 and SS 2 were not synchronized yet, so they still had only half of the templates each.

  4. I restarted the SSVM's service. I verified that the first half of templates was copied from SS 1 to SS 2, and that the other half was copied from SS 2 to SS 1.

  5. I deleted SS 1 and SS 2. Then, I deployed a VM using each one of the templates, and verified that they were deployed successfully.

With the setting disabled

  1. I disabled the setting and added SS 4. I verified that the SSVM started to download the templates to SS 4 from the source instead of copying them.

  2. Migration: I marked all templates as private so that they are not downloaded to new secondary storages. Then, I added SS 5 and called migrateSecondaryStorageData to migrate data from SS 4 to SS 5. I verified that the templates were migrated successfully.

@winterhazel
Copy link
Member Author

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@codecov
Copy link

codecov bot commented Feb 11, 2025

Codecov Report

❌ Patch coverage is 13.87755% with 211 lines in your changes missing coverage. Please review.
✅ Project coverage is 16.23%. Comparing base (494c56a) to head (a2a9559).
⚠️ Report is 3 commits behind head on 4.20.

Files with missing lines Patch % Lines
...tack/engine/orchestration/StorageOrchestrator.java 0.00% 93 Missing ⚠️
.../cloudstack/storage/image/TemplateServiceImpl.java 33.67% 65 Missing ⚠️
...ack/engine/orchestration/DataMigrationUtility.java 0.00% 53 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               4.20   #10363      +/-   ##
============================================
+ Coverage     16.22%   16.23%   +0.01%     
- Complexity    13358    13371      +13     
============================================
  Files          5657     5657              
  Lines        498686   498854     +168     
  Branches      60526    60539      +13     
============================================
+ Hits          80918    81003      +85     
- Misses       408744   408820      +76     
- Partials       9024     9031       +7     
Flag Coverage Δ
uitests 4.00% <ø> (ø)
unittests 17.09% <13.87%> (+0.01%) ⬆️

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.

@blueorangutan
Copy link

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

Copy link
Contributor

@DaanHoogland DaanHoogland left a comment

Choose a reason for hiding this comment

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

makes functional sense, but needs testing

@winterhazel
Copy link
Member Author

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12548

@winterhazel
Copy link
Member Author

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12562

@DaanHoogland DaanHoogland added this to the 4.21.0 milestone Feb 26, 2025
@DaanHoogland
Copy link
Contributor

@winterhazel I marked this for 4.21 as it is based off main, but would this be a good improvement for 4.20.1 as well?

@JoaoJandre
Copy link
Contributor

@winterhazel could you fix the compilation errors?

@blueorangutan
Copy link

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

@winterhazel
Copy link
Member Author

@winterhazel I marked this for 4.21 as it is based off main, but would this be a good improvement for 4.20.1 as well?

Yeah, it would be great to have it in 4.20.1. I'll rebase.

@winterhazel
Copy link
Member Author

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

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

@winterhazel winterhazel removed this from the 4.21.0 milestone Feb 26, 2025
@Pearl1594 Pearl1594 added this to the 4.20.2 milestone Jun 3, 2025
@weizhouapache
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

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

@weizhouapache weizhouapache modified the milestones: 4.20.2, 4.22.0 Sep 11, 2025
@DaanHoogland
Copy link
Contributor

@weizhouapache , this seems a non-functional change and an improvement. Can we mark it for a future 4.20 update if it doesn’t make 4.20.2?

@weizhouapache weizhouapache modified the milestones: 4.22.0, 4.20.3 Sep 15, 2025
@weizhouapache
Copy link
Member

@weizhouapache , this seems a non-functional change and an improvement. Can we mark it for a future 4.20 update if it doesn’t make 4.20.2?

@DaanHoogland
I moved it to 4.20.3 milestone and let the next RM to decide

@winterhazel winterhazel marked this pull request as draft November 7, 2025 23:59
@blueorangutan
Copy link

[SF] Trillian Build Failed (tid-14934)

@winterhazel winterhazel marked this pull request as ready for review December 14, 2025 00:04
@winterhazel
Copy link
Member Author

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

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

@harikrishna-patnala
Copy link
Contributor

@blueorangutan test

@blueorangutan
Copy link

@harikrishna-patnala a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

Copy link
Contributor

@harikrishna-patnala harikrishna-patnala left a comment

Choose a reason for hiding this comment

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

code LGTM

@blueorangutan
Copy link

[SF] Trillian Build Failed (tid-14987)

@blueorangutan
Copy link

[SF] Trillian test result (tid-14984)
Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8
Total time taken: 51621 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr10363-t14984-kvm-ol8.zip
Smoke tests completed. 140 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
test_01_sys_vm_start Failure 0.10 test_secondary_storage.py

@harikrishna-patnala
Copy link
Contributor

[SF] Trillian test result (tid-14984) Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8 Total time taken: 51621 seconds Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr10363-t14984-kvm-ol8.zip Smoke tests completed. 140 look OK, 1 have errors, 0 did not run Only failed and skipped tests results shown below:
Test Result Time (s) Test File
test_01_sys_vm_start Failure 0.10 test_secondary_storage.py

@winterhazel can you please check if this failure is related to this PR change ?

@winterhazel
Copy link
Member Author

@winterhazel can you please check if this failure is related to this PR change ?

@harikrishna-patnala it is unrelated. Also failing on other PRs: #12198 (comment)

@harikrishna-patnala
Copy link
Contributor

I've tested few cases of adding a new secondary storage with few available and unavailable templates on the server.

Upon adding the new storage, all the templates came to downloaded and ready state.

@winterhazel for your information, I'm also working on another similar change where in the templates to be copied from a secondary storage of another zone if it is available and accessible. This case can happen when a new zone is added and a new secondary storage is added into it. Thank you.

@harikrishna-patnala harikrishna-patnala merged commit e8200a0 into apache:4.20 Dec 18, 2025
25 of 26 checks passed
DaanHoogland pushed a commit that referenced this pull request Dec 22, 2025
* 4.22:
  Update templateConfig.sh to not break with directorys with space on t… (#10898)
  Fix VM and volume metrics listing regressions (#12284)
  packaging: use latest cmk release link directly (#11429)
  api:rename RegisterCmd.java => RegisterUserKeyCmd.java (#12259)
  Prioritize copying templates from other secondary storages instead of downloading them (#10363)
  Show time correctly in the backup schedule UI  (#12012)
  kvm: use preallocation option for fat disk resize (#11986)
  Python exception processing static routes fixed (#11967)
  KVM memballooning requires free page reporting and autodeflate (#11932)
  api: create/register/upload template with empty template tag (#12234)
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.

8 participants