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]