This is an automated email from the ASF dual-hosted git repository.

adoroszlai 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 c374087497 HDDS-8734. OM DB cache metrics creation should be 
idempotent (#4805)
c374087497 is described below

commit c374087497d7fd81cbd9396375a70c03e51c512c
Author: devmadhuu <[email protected]>
AuthorDate: Thu Jun 1 15:01:55 2023 +0530

    HDDS-8734. OM DB cache metrics creation should be idempotent (#4805)
---
 .../hadoop/ozone/om/OmMetadataManagerImpl.java     | 13 +++----
 .../impl/TestOzoneManagerServiceProviderImpl.java  | 42 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
index a59d6f7e1b..70b318f72d 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
@@ -25,7 +25,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -294,7 +293,8 @@ public class OmMetadataManagerImpl implements 
OMMetadataManager,
   private final long omEpoch;
 
   private Map<String, Table> tableMap = new HashMap<>();
-  private List<TableCacheMetrics> tableCacheMetrics = new LinkedList<>();
+  private final Map<String, TableCacheMetrics> tableCacheMetricsMap =
+      new HashMap<>();
   private SnapshotChainManager snapshotChainManager;
 
   public OmMetadataManagerImpl(OzoneConfiguration conf) throws IOException {
@@ -463,7 +463,10 @@ public class OmMetadataManagerImpl implements 
OMMetadataManager,
     }
     this.tableMap.put(name, table);
     if (addCacheMetrics) {
-      tableCacheMetrics.add(table.createCacheMetrics());
+      if (tableCacheMetricsMap.containsKey(name)) {
+        tableCacheMetricsMap.get(name).unregister();
+      }
+      tableCacheMetricsMap.put(name, table.createCacheMetrics());
     }
   }
 
@@ -713,9 +716,7 @@ public class OmMetadataManagerImpl implements 
OMMetadataManager,
       store.close();
       store = null;
     }
-    for (TableCacheMetrics metrics : tableCacheMetrics) {
-      metrics.unregister();
-    }
+    tableCacheMetricsMap.values().forEach(TableCacheMetrics::unregister);
     // OzoneManagerLock cleanup
     lock.cleanup();
   }
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestOzoneManagerServiceProviderImpl.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestOzoneManagerServiceProviderImpl.java
index 25c7d9c407..03badcdb17 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestOzoneManagerServiceProviderImpl.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/spi/impl/TestOzoneManagerServiceProviderImpl.java
@@ -147,6 +147,48 @@ public class TestOzoneManagerServiceProviderImpl {
         .get("/sampleVol/bucketOne/key_two"));
   }
 
+  @Test
+  public void testReconOmDBCloseAndOpenNewSnapshotDb() throws Exception {
+    OMMetadataManager omMetadataManager =
+        initializeNewOmMetadataManager(temporaryFolder.newFolder());
+    ReconOMMetadataManager reconOMMetadataManager =
+        getTestReconOmMetadataManager(omMetadataManager,
+            temporaryFolder.newFolder());
+
+    writeDataToOm(omMetadataManager, "key_one");
+    writeDataToOm(omMetadataManager, "key_two");
+
+    DBCheckpoint checkpoint = omMetadataManager.getStore()
+        .getCheckpoint(true);
+    File tarFile1 = createTarFile(checkpoint.getCheckpointLocation());
+    File tarFile2 = createTarFile(checkpoint.getCheckpointLocation());
+    InputStream inputStream1 = new FileInputStream(tarFile1);
+    InputStream inputStream2 = new FileInputStream(tarFile2);
+    ReconUtils reconUtilsMock = getMockReconUtils();
+    HttpURLConnection httpURLConnectionMock1 = mock(HttpURLConnection.class);
+    when(httpURLConnectionMock1.getInputStream()).thenReturn(inputStream1);
+    when(reconUtilsMock.makeHttpCall(any(), anyString(), anyBoolean()))
+        .thenReturn(httpURLConnectionMock1);
+
+    ReconTaskController reconTaskController = getMockTaskController();
+
+    OzoneManagerServiceProviderImpl ozoneManagerServiceProvider1 =
+        new OzoneManagerServiceProviderImpl(configuration,
+            reconOMMetadataManager, reconTaskController, reconUtilsMock,
+            ozoneManagerProtocol);
+    assertTrue(ozoneManagerServiceProvider1.updateReconOmDBWithNewSnapshot());
+
+    HttpURLConnection httpURLConnectionMock2 = mock(HttpURLConnection.class);
+    when(httpURLConnectionMock2.getInputStream()).thenReturn(inputStream2);
+    when(reconUtilsMock.makeHttpCall(any(), anyString(), anyBoolean()))
+        .thenReturn(httpURLConnectionMock2);
+    OzoneManagerServiceProviderImpl ozoneManagerServiceProvider2 =
+        new OzoneManagerServiceProviderImpl(configuration,
+            reconOMMetadataManager, reconTaskController, reconUtilsMock,
+            ozoneManagerProtocol);
+    assertTrue(ozoneManagerServiceProvider2.updateReconOmDBWithNewSnapshot());
+  }
+
   @Test
   public void testGetOzoneManagerDBSnapshot() throws Exception {
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to