JoaoJandre opened a new pull request, #9270:
URL: https://github.com/apache/cloudstack/pull/9270

   ### Description
   
   This PR solves issue #8907.
   
   Currently, when taking a volume snapshot/backup with KVM as the hypervisor, 
it is always a full snapshot/backup. However, always taking full snapshots of 
volumes is costly for both the storage network and storage systems. To solve 
the aforementioned issues, this PR extends the volume snapshot feature in KVM, 
allowing users to create incremental volume snapshots using KVM as a hypervisor.
   
   To give operators control over which type of snapshot is being created, a 
new global setting `kvm.incremental.snapshot` has been added, which can be 
changed at zone and cluster scopes; this setting is false by default. Also, the 
`snapshot.delta.max` configuration, used to control the maximum deltas when 
using XenServer, was extended to also limit the size of the backing chain of 
snapshots on primary/secondary storage. 
   
   This functionality is only available in environments with Libvirt 7.6.0+ and 
qemu 6.1+. If the `kvm.incremental.snapshot` setting is true, and the hosts do 
not have the required Libvirt and qemu versions, an error will be thrown when 
trying to take a snapshot. Additionally, this functionality is only available 
when using file based storage, such as shared mount-point (iSCSI and FC), NFS, 
and local storage. Other storage types for KVM, such as CLVM and RBD, need 
different approaches to enable incremental backups; therefore, these are not 
currently supported.
   
   Issue #8907 has more details and flowcharts of all the mapped workflows.
   
   ### Types of changes
   
   - [ ] Breaking change (fix or feature that would cause existing 
functionality to change)
   - [X] New feature (non-breaking change which adds functionality)
   - [ ] Bug fix (non-breaking change which fixes an issue)
   - [X] Enhancement (improves an existing feature and functionality)
   - [ ] Cleanup (Code refactoring and cleanup, that may add test cases)
   - [ ] build/CI
   
   ### Feature/Enhancement Scale or Bug Severity
   
   #### Feature/Enhancement Scale
   
   - [X] Major
   - [ ] Minor
   
   #### Bug Severity
   
   - [ ] BLOCKER
   - [ ] Critical
   - [ ] Major
   - [ ] Minor
   - [ ] Trivial
   
   
   ### Screenshots (if appropriate):
   
   
   ### How Has This Been Tested?
   
   # Description of tests
   
   During testing, the `kvm.incremental.snapshot` setting was changed to `true` 
and the `snapshot.delta.max` setting was changed to 3.
   
   ## Tests with snapshot.backup.to.secondary = false
   
   For the tests in this section, a test VM was created and reused for all 
tests.
   
   ### Snapshot creation tests
   
   | Test | Result |
   | --- | --- |
   | Access the VM, create any file in it and create volume snapshot 1 while 
the VM running | Full snapshot created |
   | Access the VM, create a second file in it, create volume snapshot 2 while 
the VM running | Incremental snapshot created with correct size and backing 
chain (snapshot 1) |
   | Stop the VM and create volume snapshot 3 | Correctly created incremental 
snapshot |
   | Start the VM again, create volume snapshot 4 | Full snapshot created |
   | Migrate the VM and create volume snapshot 5 | Incremental snapshot created 
from snapshot 4 |
   | Migrate VM + ROOT volume | Exception |
   
   ### Snapshot restore tests
   
   | Test | Result |
   | --- | --- |
   | Access the VM, delete all previously created files, stop the VM, restore 
snapshot 1 and start the VM again | Restoration correctly performed, the file 
created in snapshot creation test 1 was present on the volume |
   | Access the VM, delete the file restored in snapshot restore test 2, stop 
the VM, restore snapshot 2 and start the VM again | Restoration correctly 
performed, the files created in tests 1 and 2 of snapshot creation were present 
on the volume |
   
   
   ### Snapshot removal tests
   
   | Test | Result |
   | --- | --- |
   | Delete snapshot 5 | Snapshot deleted and removed from storage |
   | Delete snapshot 1 | Snapshot deleted and not removed from storage |
   | Delete snapshots 2 and 3 | Snapshots deleted and removed from storage; 
furthermore, snapshot 1 was also removed from storage |
   
   ### Template creation test
   
   | # | Test | Result |
   | --- | --- | --- |
   | 1 | Create template from snapshot 4 and create a VM using the template | 
Template created correctly, VM had the files created in the original VM |
   
   
   ## Tests with snapshot.backup.to.secondary = true
   
   All tests performed in the previous sections were repeated with 
snapshot.backup.to.secondary = false, in addition, two additional tests were 
performed. For the tests in this section, a test VM was created and reused for 
all tests.
   
   ### Snapshot creation tests
   
   | N | Test | Result |
   | --- | --- | --- |
   | 1 | Migrate the VM + ROOT volume and take snapshot 6 | Migration carried 
out and full snapshot created |
   | 2 | Stop the VM, migrate the volume and take snapshot 7 | Volume migration 
performed and incremental snapshot created from snapshot 6 |


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to