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]

Reply via email to