This is an automated email from the ASF dual-hosted git repository.
smengcl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 14ba2dd396d HDDS-15426. Include snapshot IDs in OM snapshot lifecycle
logs (#10386)
14ba2dd396d is described below
commit 14ba2dd396d58ef82414998b76fbfa54846902af
Author: Siyao Meng <[email protected]>
AuthorDate: Wed Jun 17 14:49:51 2026 -0700
HDDS-15426. Include snapshot IDs in OM snapshot lifecycle logs (#10386)
---
.../request/snapshot/OMSnapshotCreateRequest.java | 4 +-
.../request/snapshot/OMSnapshotDeleteRequest.java | 8 +-
.../request/snapshot/OMSnapshotPurgeRequest.java | 11 +-
.../ozone/om/service/SnapshotDeletingService.java | 14 ++-
.../snapshot/TestOMSnapshotCreateRequest.java | 7 ++
.../snapshot/TestOMSnapshotDeleteRequest.java | 5 +
.../TestOMSnapshotPurgeRequestAndResponse.java | 7 ++
.../om/service/TestSnapshotDeletingService.java | 119 ++++++++++++++++++++-
8 files changed, 159 insertions(+), 16 deletions(-)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
index 77858c0a50b..ae65be2ad6e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotCreateRequest.java
@@ -220,12 +220,12 @@ public OMClientResponse
validateAndUpdateCache(OzoneManager ozoneManager, Execut
snapshotInfo.toAuditMap(), exception, userInfo));
if (exception == null) {
- LOG.info("Created snapshot: '{}' with snapshotId: '{}' under path '{}'",
+ LOG.info("Created snapshot '{}' (snapshotId='{}') under path '{}'",
snapshotName, snapshotInfo.getSnapshotId(), snapshotPath);
omMetrics.incNumSnapshotActive();
} else {
omMetrics.incNumSnapshotCreateFails();
- LOG.error("Failed to create snapshot '{}' with snapshotId: '{}' under " +
+ LOG.error("Failed to create snapshot '{}' (snapshotId='{}') under " +
"path '{}'",
snapshotName, snapshotInfo.getSnapshotId(), snapshotPath);
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
index 9313bc815d9..03f3aa0b5cb 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotDeleteRequest.java
@@ -228,12 +228,12 @@ public OMClientResponse
validateAndUpdateCache(OzoneManager ozoneManager, Execut
if (exception == null) {
omMetrics.decNumSnapshotActive();
omMetrics.incNumSnapshotDeleted();
- LOG.info("Deleted snapshot '{}' under path '{}'",
- snapshotName, snapshotPath);
+ LOG.info("Deleted snapshot '{}' (snapshotId='{}') under path '{}'",
+ snapshotName, snapshotInfo.getSnapshotId(), snapshotPath);
} else {
omMetrics.incNumSnapshotDeleteFails();
- LOG.error("Failed to delete snapshot '{}' under path '{}'",
- snapshotName, snapshotPath);
+ LOG.error("Failed to delete snapshot '{}' (snapshotId='{}') under path
'{}'",
+ snapshotName, snapshotInfo.getSnapshotId(), snapshotPath);
}
return omClientResponse;
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotPurgeRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotPurgeRequest.java
index a1a1d306c23..338b871a5c3 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotPurgeRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/snapshot/OMSnapshotPurgeRequest.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.ozone.om.request.snapshot;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -93,6 +94,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager
ozoneManager, Execut
.getSnapshotDBKeysList();
TransactionInfo transactionInfo =
TransactionInfo.valueOf(context.getTermIndex());
try {
+ List<String> purgedSnapshotsForLog = new ArrayList<>();
// Each snapshot purge operation does three things:
// 1. Update the deep clean flag for the next active snapshot (So that
it can be
@@ -109,6 +111,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager
ozoneManager, Execut
"Snapshot purge request.", snapTableKey);
continue;
}
+ purgedSnapshotsForLog.add(formatSnapshotForLog(fromSnapshot));
SnapshotInfo nextSnapshot =
SnapshotUtils.getNextSnapshot(ozoneManager, snapshotChainManager, fromSnapshot);
SnapshotInfo nextToNextSnapshot = nextSnapshot == null ? null :
SnapshotUtils.getNextSnapshot(ozoneManager,
snapshotChainManager, nextSnapshot);
@@ -133,8 +136,8 @@ public OMClientResponse validateAndUpdateCache(OzoneManager
ozoneManager, Execut
transactionInfo);
omSnapshotIntMetrics.incNumSnapshotPurges();
- LOG.info("Successfully executed snapshotPurgeRequest: {{}} along with
updating snapshots:{}.",
- snapshotPurgeRequest, updatedSnapshotInfos);
+ LOG.info("Successfully executed snapshotPurgeRequest for snapshots: {}
along with updating snapshots: {}.",
+ purgedSnapshotsForLog, updatedSnapshotInfos);
if (LOG.isDebugEnabled()) {
Map<String, String> auditParams = new LinkedHashMap<>();
auditParams.put(AUDIT_PARAM_SNAPSHOT_DB_KEYS,
snapshotDbKeys.toString());
@@ -255,4 +258,8 @@ private SnapshotInfo getUpdatedSnapshotInfo(String
snapshotTableKey, OMMetadataM
}
return snapshotInfo;
}
+
+ private static String formatSnapshotForLog(SnapshotInfo snapshotInfo) {
+ return snapshotInfo.getTableKey() + " (snapshotId='" +
snapshotInfo.getSnapshotId() + "')";
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
index d7db018e0f5..51b26d6eeef 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
@@ -140,25 +140,25 @@ public BackgroundTaskResult call() throws
InterruptedException {
SnapshotInfo snapInfo = SnapshotUtils.getSnapshotInfo(ozoneManager,
chainManager, iterator.next());
if (shouldIgnoreSnapshot(snapInfo)) {
LOG.debug("Skipping Snapshot Deletion processing because " +
- "the snapshot is active or DB changes are not flushed: {}",
snapInfo.getTableKey());
+ "the snapshot is active or DB changes are not flushed: {}",
formatSnapshotForLog(snapInfo));
continue;
}
- LOG.info("Started Snapshot Deletion Processing for snapshot : {}",
snapInfo.getTableKey());
+ LOG.info("Started Snapshot Deletion Processing for snapshot : {}",
formatSnapshotForLog(snapInfo));
SnapshotInfo nextSnapshot =
SnapshotUtils.getNextSnapshot(ozoneManager, chainManager, snapInfo);
// Continue if the next snapshot is not active. This is to avoid
unnecessary copies from one snapshot to
// another.
if (nextSnapshot != null &&
nextSnapshot.getSnapshotStatus() !=
SnapshotInfo.SnapshotStatus.SNAPSHOT_ACTIVE) {
LOG.info("Skipping Snapshot Deletion processing for : {} because
the next snapshot is DELETED.",
- snapInfo.getTableKey());
+ formatSnapshotForLog(snapInfo));
continue;
}
// nextSnapshot = null means entries would be moved to AOS.
if (nextSnapshot == null) {
- LOG.info("Snapshot: {} entries will be moved to AOS.",
snapInfo.getTableKey());
+ LOG.info("Snapshot: {} entries will be moved to AOS.",
formatSnapshotForLog(snapInfo));
} else {
LOG.info("Snapshot: {} entries will be moved to next active
snapshot: {}",
- snapInfo.getTableKey(), nextSnapshot.getTableKey());
+ formatSnapshotForLog(snapInfo),
formatSnapshotForLog(nextSnapshot));
}
lockIds.clear();
lockIds.add(snapInfo.getSnapshotId());
@@ -459,4 +459,8 @@ public DeletingServiceTaskQueue getTasks() {
public long getSuccessfulRunCount() {
return successRunCount.get();
}
+
+ private static String formatSnapshotForLog(SnapshotInfo snapshotInfo) {
+ return snapshotInfo.getTableKey() + " (snapshotId='" +
snapshotInfo.getSnapshotId() + "')";
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
index 80cfba97bb8..051d4518383 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotCreateRequest.java
@@ -24,6 +24,7 @@
import static
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.createSnapshotRequest;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.OK;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type.CreateSnapshot;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -57,6 +58,7 @@
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
+import org.apache.ozone.test.GenericTestUtils.LogCapturer;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -178,6 +180,7 @@ public void testValidateAndUpdateCache() throws Exception {
assertNull(getOmMetadataManager().getSnapshotInfoTable().get(key));
// Run validateAndUpdateCache.
+ LogCapturer logCapturer =
LogCapturer.captureLogs(OMSnapshotCreateRequest.class);
OMClientResponse omClientResponse =
omSnapshotCreateRequest.validateAndUpdateCache(getOzoneManager(), 1);
@@ -211,6 +214,10 @@ public void testValidateAndUpdateCache() throws Exception {
assertEquals(0, getOmMetrics().getNumSnapshotCreateFails());
assertEquals(1, getOmMetrics().getNumSnapshotActive());
assertEquals(1, getOmMetrics().getNumSnapshotCreates());
+ assertThat(logCapturer.getOutput()).contains(String.format(
+ "Created snapshot '%s' (snapshotId='%s') under path '%s'",
+ snapshotName1, snapshotInfoInCache.getSnapshotId(),
+ snapshotInfoInCache.getSnapshotPath()));
}
@Test
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotDeleteRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotDeleteRequest.java
index d007b1ae29e..7a6f41be0f0 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotDeleteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotDeleteRequest.java
@@ -47,6 +47,7 @@
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
import org.apache.hadoop.util.Time;
+import org.apache.ozone.test.GenericTestUtils.LogCapturer;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -160,6 +161,7 @@ public void testValidateAndUpdateCache() throws Exception {
new CacheKey<>(key),
CacheValue.get(1L, snapshotInfo));
+ LogCapturer logCapturer =
LogCapturer.captureLogs(OMSnapshotDeleteRequest.class);
// Trigger validateAndUpdateCache
OMClientResponse omClientResponse =
omSnapshotDeleteRequest.validateAndUpdateCache(getOzoneManager(), 2L);
@@ -180,6 +182,9 @@ public void testValidateAndUpdateCache() throws Exception {
assertEquals(-1, getOmMetrics().getNumSnapshotActive());
assertEquals(1, getOmMetrics().getNumSnapshotDeleted());
assertEquals(0, getOmMetrics().getNumSnapshotDeleteFails());
+ assertThat(logCapturer.getOutput()).contains(String.format(
+ "Deleted snapshot '%s' (snapshotId='%s') under path '%s'",
+ snapshotName, snapshotInfo.getSnapshotId(),
snapshotInfo.getSnapshotPath()));
}
/**
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java
index b78975ef081..b5a969b4f6c 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.ozone.om.request.snapshot;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.INTERNAL_ERROR;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -57,6 +58,7 @@
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SnapshotPurgeRequest;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
+import org.apache.ozone.test.GenericTestUtils.LogCapturer;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -177,6 +179,7 @@ public void testValidateAndUpdateCache() throws Exception {
OMSnapshotPurgeRequest omSnapshotPurgeRequest =
preExecute(snapshotPurgeRequest);
TransactionInfo transactionInfo =
TransactionInfo.valueOf(TransactionInfo.getTermIndex(200L));
+ LogCapturer logCapturer =
LogCapturer.captureLogs(OMSnapshotPurgeRequest.class);
OMSnapshotPurgeResponse omSnapshotPurgeResponse = (OMSnapshotPurgeResponse)
omSnapshotPurgeRequest.validateAndUpdateCache(getOzoneManager(),
transactionInfo.getTransactionIndex());
@@ -203,7 +206,11 @@ public void testValidateAndUpdateCache() throws Exception {
snapshotLocalDataManager.getOmSnapshotLocalData(snapshotInfo)) {
assertEquals(transactionInfo,
snapProvider.getSnapshotLocalData().getTransactionInfo());
}
+ assertThat(logCapturer.getOutput()).contains(
+ snapshotInfo.getTableKey() + " (snapshotId='" +
snapshotInfo.getSnapshotId() + "')");
}
+ assertThat(logCapturer.getOutput()).contains(
+ "along with updating snapshots: {");
assertEquals(initialSnapshotPurgeCount + 1,
getOmSnapshotIntMetrics().getNumSnapshotPurges());
assertEquals(initialSnapshotPurgeFailCount,
getOmSnapshotIntMetrics().getNumSnapshotPurgeFails());
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDeletingService.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDeletingService.java
index c14596f891c..80d5e056ede 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDeletingService.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestSnapshotDeletingService.java
@@ -17,12 +17,15 @@
package org.apache.hadoop.ozone.om.service;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mockStatic;
import java.io.IOException;
import java.time.Duration;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -42,15 +45,20 @@
import org.apache.hadoop.ozone.om.SnapshotChainManager;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
+import org.apache.hadoop.ozone.om.lock.IOzoneManagerLock;
+import org.apache.hadoop.ozone.om.lock.OMLockDetails;
+import org.apache.hadoop.ozone.om.snapshot.SnapshotUtils;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.SnapshotMoveKeyInfos;
+import org.apache.ozone.test.GenericTestUtils.LogCapturer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.Mock;
+import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -179,13 +187,13 @@ public void testSnapshotMoveKeysRequestBatching() throws
Exception {
"All entries should be submitted");
// Verify multiple batches were created (since data should exceed buffer)
- assertTrue(capturedRequests.size() > 1);
+ assertThat(capturedRequests).hasSizeGreaterThan(1);
for (OMRequest omRequest : capturedRequests) {
assertEquals(OzoneManagerProtocolProtos.Type.SnapshotMoveTableKeys,
omRequest.getCmdType());
int requestSize = omRequest.getSerializedSize();
- assertTrue(requestSize <= ratisBufferLimit);
+ assertThat(requestSize).isLessThanOrEqualTo(ratisBufferLimit);
}
int totalDeletedKeysProcessed = capturedRequests.stream()
@@ -206,6 +214,111 @@ public void testSnapshotMoveKeysRequestBatching() throws
Exception {
assertEquals(totalExpected, totalDeletedKeysProcessed +
totalRenamedKeysProcessed + totalDeletedDirsProcessed);
}
+ @Test
+ public void testSnapshotDeletingTaskLogsSnapshotId() throws Exception {
+ IOzoneManagerLock lock = Mockito.mock(IOzoneManagerLock.class);
+ UUID snapshotId = UUID.randomUUID();
+ SnapshotInfo snapshotInfo = SnapshotInfo.newBuilder()
+ .setSnapshotId(snapshotId)
+ .setVolumeName("vol1")
+ .setBucketName("bucket1")
+ .setName("snap1")
+ .setSnapshotStatus(SnapshotInfo.SnapshotStatus.SNAPSHOT_DELETED)
+ .setLastTransactionInfo(TransactionInfo.valueOf(1, 1).toByteString())
+ .build();
+
+
Mockito.when(omMetadataManager.getSnapshotChainManager()).thenReturn(chainManager);
+ Mockito.when(omMetadataManager.getLock()).thenReturn(lock);
+
Mockito.when(ozoneManager.getOmSnapshotManager()).thenReturn(omSnapshotManager);
+
Mockito.when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
+ Mockito.when(ozoneManager.getConfiguration()).thenReturn(conf);
+ Mockito.when(ozoneManager.isLeaderReady()).thenReturn(true);
+ Mockito.when(chainManager.iterator(true)).thenReturn(
+ Collections.singletonList(snapshotId).iterator());
+ Mockito.when(lock.acquireWriteLocks(any(), any()))
+ .thenReturn(OMLockDetails.EMPTY_DETAILS_LOCK_NOT_ACQUIRED);
+
+ SnapshotDeletingService service = new
SnapshotDeletingService(sdsRunInterval, sdsServiceTimeout, ozoneManager);
+ LogCapturer logCapturer =
LogCapturer.captureLogs(SnapshotDeletingService.class);
+
+ try (MockedStatic<SnapshotUtils> snapshotUtils =
mockStatic(SnapshotUtils.class);
+ MockedStatic<OmSnapshotManager> omSnapshotManagerStatic =
mockStatic(OmSnapshotManager.class)) {
+ snapshotUtils.when(() -> SnapshotUtils.getSnapshotInfo(ozoneManager,
chainManager, snapshotId))
+ .thenReturn(snapshotInfo);
+ snapshotUtils.when(() -> SnapshotUtils.getNextSnapshot(ozoneManager,
chainManager, snapshotInfo))
+ .thenReturn(null);
+ omSnapshotManagerStatic.when(() ->
OmSnapshotManager.areSnapshotChangesFlushedToDB(omMetadataManager,
+ snapshotInfo)).thenReturn(true);
+
+ service.new SnapshotDeletingTask().call();
+ }
+
+ String expectedLogLabel = snapshotInfo.getTableKey() + " (snapshotId='" +
snapshotInfo.getSnapshotId() + "')";
+ assertThat(logCapturer.getOutput()).contains(
+ "Started Snapshot Deletion Processing for snapshot : " +
expectedLogLabel);
+ assertThat(logCapturer.getOutput()).contains(
+ "Snapshot: " + expectedLogLabel + " entries will be moved to AOS.");
+ }
+
+ @Test
+ public void testSnapshotDeletingTaskLogsNextActiveSnapshotId()
+ throws Exception {
+ IOzoneManagerLock lock = Mockito.mock(IOzoneManagerLock.class);
+ UUID snapshotId = UUID.randomUUID();
+ SnapshotInfo snapshotInfo = SnapshotInfo.newBuilder()
+ .setSnapshotId(snapshotId)
+ .setVolumeName("vol1")
+ .setBucketName("bucket1")
+ .setName("snap1")
+ .setSnapshotStatus(SnapshotInfo.SnapshotStatus.SNAPSHOT_DELETED)
+ .setLastTransactionInfo(TransactionInfo.valueOf(1, 1).toByteString())
+ .build();
+ SnapshotInfo nextSnapshotInfo = SnapshotInfo.newBuilder()
+ .setSnapshotId(UUID.randomUUID())
+ .setVolumeName("vol1")
+ .setBucketName("bucket1")
+ .setName("snap2")
+ .setSnapshotStatus(SnapshotInfo.SnapshotStatus.SNAPSHOT_ACTIVE)
+ .setLastTransactionInfo(TransactionInfo.valueOf(1, 1).toByteString())
+ .build();
+
+
Mockito.when(omMetadataManager.getSnapshotChainManager()).thenReturn(chainManager);
+ Mockito.when(omMetadataManager.getLock()).thenReturn(lock);
+
Mockito.when(ozoneManager.getOmSnapshotManager()).thenReturn(omSnapshotManager);
+
Mockito.when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
+ Mockito.when(ozoneManager.getConfiguration()).thenReturn(conf);
+ Mockito.when(ozoneManager.isLeaderReady()).thenReturn(true);
+ Mockito.when(chainManager.iterator(true)).thenReturn(
+ Collections.singletonList(snapshotId).iterator());
+ Mockito.when(lock.acquireWriteLocks(any(), any()))
+ .thenReturn(OMLockDetails.EMPTY_DETAILS_LOCK_NOT_ACQUIRED);
+
+ SnapshotDeletingService service =
+ new SnapshotDeletingService(sdsRunInterval, sdsServiceTimeout,
ozoneManager);
+ LogCapturer logCapturer =
LogCapturer.captureLogs(SnapshotDeletingService.class);
+
+ try (MockedStatic<SnapshotUtils> snapshotUtils =
mockStatic(SnapshotUtils.class);
+ MockedStatic<OmSnapshotManager> omSnapshotManagerStatic =
mockStatic(OmSnapshotManager.class)) {
+ snapshotUtils.when(() -> SnapshotUtils.getSnapshotInfo(ozoneManager,
chainManager, snapshotId))
+ .thenReturn(snapshotInfo);
+ snapshotUtils.when(() -> SnapshotUtils.getNextSnapshot(ozoneManager,
chainManager, snapshotInfo))
+ .thenReturn(nextSnapshotInfo);
+ omSnapshotManagerStatic.when(() ->
OmSnapshotManager.areSnapshotChangesFlushedToDB(
+ omMetadataManager, snapshotInfo)).thenReturn(true);
+
+ service.new SnapshotDeletingTask().call();
+ }
+
+ String expectedLogLabel = snapshotInfo.getTableKey() + " (snapshotId='"
+ + snapshotInfo.getSnapshotId() + "')";
+ String expectedNextSnapshotLogLabel = nextSnapshotInfo.getTableKey()
+ + " (snapshotId='" + nextSnapshotInfo.getSnapshotId() + "')";
+ assertThat(logCapturer.getOutput()).contains(
+ "Snapshot: " + expectedLogLabel
+ + " entries will be moved to next active snapshot: "
+ + expectedNextSnapshotLogLabel);
+ }
+
/**
* Helper method to create large deleted keys that will contribute to buffer
size.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]