This is an automated email from the ASF dual-hosted git repository.
hemant 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 7559e1f6b9 HDDS-10524. [Snapshot] Invalidate the cache entry from
snapshotInfoTable cache in OMSnapshotPurgeRequest (#6443)
7559e1f6b9 is described below
commit 7559e1f6b906a4939e3d17bed357146d7ce56a99
Author: Hemant Kumar <[email protected]>
AuthorDate: Wed Mar 27 12:18:15 2024 -0700
HDDS-10524. [Snapshot] Invalidate the cache entry from snapshotInfoTable
cache in OMSnapshotPurgeRequest (#6443)
---
.../hadoop/ozone/om/helpers/SnapshotInfo.java | 2 +-
.../request/snapshot/OMSnapshotPurgeRequest.java | 4 +++
.../response/snapshot/OMSnapshotPurgeResponse.java | 6 ++--
.../TestOMSnapshotPurgeRequestAndResponse.java | 33 +++++++++++++++-------
4 files changed, 31 insertions(+), 14 deletions(-)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/SnapshotInfo.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/SnapshotInfo.java
index fd84ffe066..5a1ecee26f 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/SnapshotInfo.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/SnapshotInfo.java
@@ -718,7 +718,7 @@ public final class SnapshotInfo implements Auditable,
CopyObject<SnapshotInfo> {
@Override
public String toString() {
return "SnapshotInfo{" +
- ", snapshotId: '" + snapshotId + '\'' +
+ "snapshotId: '" + snapshotId + '\'' +
", name: '" + name + "'," +
", volumeName: '" + volumeName + '\'' +
", bucketName: '" + bucketName + '\'' +
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 3f4d746adb..02c44e0084 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
@@ -102,7 +102,11 @@ public class OMSnapshotPurgeRequest extends
OMClientRequest {
trxnLogIndex, updatedSnapInfos);
updateSnapshotChainAndCache(omMetadataManager, fromSnapshot,
trxnLogIndex, updatedPathPreviousAndGlobalSnapshots);
+ // Remove and close snapshot's RocksDB instance from SnapshotCache.
ozoneManager.getOmSnapshotManager().invalidateCacheEntry(fromSnapshot.getSnapshotId());
+ // Update SnapshotInfoTable cache.
+ ozoneManager.getMetadataManager().getSnapshotInfoTable()
+ .addCacheEntry(new CacheKey<>(fromSnapshot.getTableKey()),
CacheValue.get(trxnLogIndex));
}
omClientResponse = new OMSnapshotPurgeResponse(omResponse.build(),
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java
index b8db58d7fd..16411baa96 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java
@@ -84,8 +84,9 @@ public class OMSnapshotPurgeResponse extends OMClientResponse
{
updateSnapInfo(metadataManager, batchOperation,
updatedPreviousAndGlobalSnapInfos);
for (String dbKey: snapshotDbKeys) {
+ // Skip the cache here because snapshot is purged from cache in
OMSnapshotPurgeRequest.
SnapshotInfo snapshotInfo = omMetadataManager
- .getSnapshotInfoTable().get(dbKey);
+ .getSnapshotInfoTable().getSkipCache(dbKey);
// Even though snapshot existed when SnapshotDeletingService
// was running. It might be deleted in the previous run and
// the DB might not have been updated yet. So snapshotInfo
@@ -96,8 +97,7 @@ public class OMSnapshotPurgeResponse extends OMClientResponse
{
// Delete Snapshot checkpoint directory.
deleteCheckpointDirectory(omMetadataManager, snapshotInfo);
- omMetadataManager.getSnapshotInfoTable().deleteWithBatch(batchOperation,
- dbKey);
+ omMetadataManager.getSnapshotInfoTable().deleteWithBatch(batchOperation,
dbKey);
}
}
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 71882c3423..7c0a5c4ff8 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
@@ -67,6 +67,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
@@ -77,8 +78,6 @@ import static org.mockito.Mockito.when;
* Tests OMSnapshotPurgeRequest class.
*/
public class TestOMSnapshotPurgeRequestAndResponse {
-
- private BatchOperation batchOperation;
private List<Path> checkpointPaths = new ArrayList<>();
private OzoneManager ozoneManager;
@@ -177,7 +176,6 @@ public class TestOMSnapshotPurgeRequestAndResponse {
private void createSnapshotCheckpoint(String volume,
String bucket,
String snapshotName) throws Exception {
- batchOperation = omMetadataManager.getStore().initBatchOperation();
OMRequest omRequest = OMRequestTestUtils
.createSnapshotRequest(volume, bucket, snapshotName);
// Pre-Execute OMSnapshotCreateRequest.
@@ -188,9 +186,10 @@ public class TestOMSnapshotPurgeRequestAndResponse {
OMSnapshotCreateResponse omClientResponse = (OMSnapshotCreateResponse)
omSnapshotCreateRequest.validateAndUpdateCache(ozoneManager, 1);
// Add to batch and commit to DB.
- omClientResponse.addToDBBatch(omMetadataManager, batchOperation);
- omMetadataManager.getStore().commitBatchOperation(batchOperation);
- batchOperation.close();
+ try (BatchOperation batchOperation =
omMetadataManager.getStore().initBatchOperation()) {
+ omClientResponse.addToDBBatch(omMetadataManager, batchOperation);
+ omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ }
String key = SnapshotInfo.getTableKey(volume, bucket, snapshotName);
SnapshotInfo snapshotInfo =
@@ -226,9 +225,10 @@ public class TestOMSnapshotPurgeRequestAndResponse {
omSnapshotPurgeRequest.validateAndUpdateCache(ozoneManager, 200L);
// Commit to DB.
- batchOperation = omMetadataManager.getStore().initBatchOperation();
- omSnapshotPurgeResponse.checkAndUpdateDB(omMetadataManager,
batchOperation);
- omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ try (BatchOperation batchOperation =
omMetadataManager.getStore().initBatchOperation()) {
+ omSnapshotPurgeResponse.checkAndUpdateDB(omMetadataManager,
batchOperation);
+ omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ }
}
@Test
@@ -238,7 +238,20 @@ public class TestOMSnapshotPurgeRequestAndResponse {
assertFalse(omMetadataManager.getSnapshotInfoTable().isEmpty());
OMRequest snapshotPurgeRequest = createPurgeKeysRequest(
snapshotDbKeysToPurge);
- purgeSnapshots(snapshotPurgeRequest);
+
+ OMSnapshotPurgeRequest omSnapshotPurgeRequest =
preExecute(snapshotPurgeRequest);
+
+ OMSnapshotPurgeResponse omSnapshotPurgeResponse = (OMSnapshotPurgeResponse)
+ omSnapshotPurgeRequest.validateAndUpdateCache(ozoneManager, 200L);
+
+ for (String snapshotTableKey: snapshotDbKeysToPurge) {
+
assertNull(omMetadataManager.getSnapshotInfoTable().get(snapshotTableKey));
+ }
+
+ try (BatchOperation batchOperation =
omMetadataManager.getStore().initBatchOperation()) {
+ omSnapshotPurgeResponse.checkAndUpdateDB(omMetadataManager,
batchOperation);
+ omMetadataManager.getStore().commitBatchOperation(batchOperation);
+ }
// Check if the entries are deleted.
assertTrue(omMetadataManager.getSnapshotInfoTable().isEmpty());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]