From 7b6edb1acc8430874b4665f30bb9b09f58db9585 Mon Sep 17 00:00:00 2001 From: Julien Hervot de Mattos Vaz Date: Tue, 25 Feb 2025 14:05:10 -0300 Subject: [PATCH 1/3] Launch RESIZE event on volume snapshot revert --- .../storage/snapshot/SnapshotManagerImpl.java | 17 +++++++++++++---- .../storage/snapshot/SnapshotManagerTest.java | 2 -- .../test/java/com/cloud/utils/UriUtilsTest.java | 4 ++-- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 572e0ace7233..d04eeed4afba 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -390,10 +390,19 @@ public Snapshot revertSnapshot(Long snapshotId) { boolean result = snapshotStrategy.revertSnapshot(snapshotInfo); if (result) { + Long differenceBetweenVolumeAndSnapshotSize = new Long(volume.getSize() - snapshot.getSize()); // update volume size and primary storage count - _resourceLimitMgr.decrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, new Long(volume.getSize() - snapshot.getSize())); - volume.setSize(snapshot.getSize()); - _volsDao.update(volume.getId(), volume); + if (differenceBetweenVolumeAndSnapshotSize != 0) { + if (differenceBetweenVolumeAndSnapshotSize > 0) { + _resourceLimitMgr.decrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize); + } else if (differenceBetweenVolumeAndSnapshotSize < 0) { + _resourceLimitMgr.incrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize * -1L); + } + volume.setSize(snapshot.getSize()); + _volsDao.update(volume.getId(), volume); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_RESIZE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), + volume.getDiskOfferingId(), volume.getTemplateId(), volume.getSize(), Volume.class.getName(), volume.getUuid()); + } return snapshotInfo; } return null; @@ -805,7 +814,7 @@ public boolean deleteSnapshot(long snapshotId, Long zoneId) { return result; } catch (Exception e) { - logger.debug("Failed to delete snapshot {}:{}", snapshotCheck, e.toString()); + logger.debug("Failed to delete snapshot {}:{}", snapshotCheck.getId(), e.toString()); throw new CloudRuntimeException("Failed to delete snapshot:" + e.toString()); } diff --git a/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java index 28903c72cc3c..4ccc6e999618 100755 --- a/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java +++ b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java @@ -235,7 +235,6 @@ public void setup() throws ResourceAllocationException { doNothing().when(_resourceLimitMgr).checkResourceLimit(any(Account.class), any(ResourceType.class)); doNothing().when(_resourceLimitMgr).checkResourceLimit(any(Account.class), any(ResourceType.class), anyLong()); - doNothing().when(_resourceLimitMgr).decrementResourceCount(anyLong(), any(ResourceType.class), anyLong()); doNothing().when(_resourceLimitMgr).incrementResourceCount(anyLong(), any(ResourceType.class)); doNothing().when(_resourceLimitMgr).incrementResourceCount(anyLong(), any(ResourceType.class), anyLong()); @@ -352,7 +351,6 @@ public void testRevertSnapshotF3() { when(_vmDao.findById(anyLong())).thenReturn(vmMock); when(vmMock.getState()).thenReturn(State.Stopped); when (snapshotStrategy.revertSnapshot(any(SnapshotInfo.class))).thenReturn(true); - when(_volumeDao.update(anyLong(), any(VolumeVO.class))).thenReturn(true); doReturn(DataStoreRole.Image).when(snapshotHelperMock).getDataStoreRole(any()); Snapshot snapshot = _snapshotMgr.revertSnapshot(TEST_SNAPSHOT_ID); Assert.assertNotNull(snapshot); diff --git a/utils/src/test/java/com/cloud/utils/UriUtilsTest.java b/utils/src/test/java/com/cloud/utils/UriUtilsTest.java index 04a74289122e..e0bb461cfdf0 100644 --- a/utils/src/test/java/com/cloud/utils/UriUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/UriUtilsTest.java @@ -276,8 +276,8 @@ public void testIsUrlForCompressedFile() { @Test public void validateUrl() { - Pair url1 = UriUtils.validateUrl("https://www.cloudstack.org"); - Assert.assertEquals(url1.first(), "www.cloudstack.org"); + Pair url1 = UriUtils.validateUrl("https://www.cloudstack.apache.org/"); + Assert.assertEquals(url1.first(), "www.cloudstack.apache.org"); Pair url2 = UriUtils.validateUrl("https://www.apache.org"); Assert.assertEquals(url2.first(), "www.apache.org"); From 1892ee9632bdfa4432eae4069c587e38f7e07ae0 Mon Sep 17 00:00:00 2001 From: Julien Hervot de Mattos Vaz Date: Wed, 5 Mar 2025 13:51:07 -0300 Subject: [PATCH 2/3] Creates new updateVolumeSizeAndPrimaryStorageCount method --- .../storage/snapshot/SnapshotManagerImpl.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index d04eeed4afba..ca2676f8dc4e 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -390,24 +390,27 @@ public Snapshot revertSnapshot(Long snapshotId) { boolean result = snapshotStrategy.revertSnapshot(snapshotInfo); if (result) { - Long differenceBetweenVolumeAndSnapshotSize = new Long(volume.getSize() - snapshot.getSize()); - // update volume size and primary storage count - if (differenceBetweenVolumeAndSnapshotSize != 0) { - if (differenceBetweenVolumeAndSnapshotSize > 0) { - _resourceLimitMgr.decrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize); - } else if (differenceBetweenVolumeAndSnapshotSize < 0) { - _resourceLimitMgr.incrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize * -1L); - } - volume.setSize(snapshot.getSize()); - _volsDao.update(volume.getId(), volume); - UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_RESIZE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), - volume.getDiskOfferingId(), volume.getTemplateId(), volume.getSize(), Volume.class.getName(), volume.getUuid()); - } + updateVolumeSizeAndPrimaryStorageCount(volume, snapshot); return snapshotInfo; } return null; } + public void updateVolumeSizeAndPrimaryStorageCount(VolumeVO volume, SnapshotVO snapshot) { + Long differenceBetweenVolumeAndSnapshotSize = new Long(volume.getSize() - snapshot.getSize()); + if (differenceBetweenVolumeAndSnapshotSize != 0) { + if (differenceBetweenVolumeAndSnapshotSize > 0) { + _resourceLimitMgr.decrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize); + } else if (differenceBetweenVolumeAndSnapshotSize < 0) { + _resourceLimitMgr.incrementResourceCount(snapshot.getAccountId(), ResourceType.primary_storage, differenceBetweenVolumeAndSnapshotSize * -1L); + } + volume.setSize(snapshot.getSize()); + _volsDao.update(volume.getId(), volume); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_RESIZE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName(), + volume.getDiskOfferingId(), volume.getTemplateId(), volume.getSize(), Volume.class.getName(), volume.getUuid()); + } + } + @Override @ActionEvent(eventType = EventTypes.EVENT_SNAPSHOT_POLICY_UPDATE, eventDescription = "updating snapshot policy", async = true) public SnapshotPolicy updateSnapshotPolicy(UpdateSnapshotPolicyCmd cmd) { From 3dd3aecf75ace1c3a8d9e39b662cf115bb07cfdb Mon Sep 17 00:00:00 2001 From: julien-vaz <54545601+julien-vaz@users.noreply.github.com> Date: Wed, 5 Mar 2025 13:53:13 -0300 Subject: [PATCH 3/3] Update utils/src/test/java/com/cloud/utils/UriUtilsTest.java Applies suggestion Co-authored-by: dahn --- utils/src/test/java/com/cloud/utils/UriUtilsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/src/test/java/com/cloud/utils/UriUtilsTest.java b/utils/src/test/java/com/cloud/utils/UriUtilsTest.java index e0bb461cfdf0..47fd389e3aef 100644 --- a/utils/src/test/java/com/cloud/utils/UriUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/UriUtilsTest.java @@ -276,8 +276,8 @@ public void testIsUrlForCompressedFile() { @Test public void validateUrl() { - Pair url1 = UriUtils.validateUrl("https://www.cloudstack.apache.org/"); - Assert.assertEquals(url1.first(), "www.cloudstack.apache.org"); + Pair url1 = UriUtils.validateUrl("https://cloudstack.apache.org/"); + Assert.assertEquals(url1.first(), "cloudstack.apache.org"); Pair url2 = UriUtils.validateUrl("https://www.apache.org"); Assert.assertEquals(url2.first(), "www.apache.org");