From 83cedb09ba82595521982e0980711075c46bcc5f Mon Sep 17 00:00:00 2001 From: liminyu Date: Wed, 15 May 2024 19:53:43 +0800 Subject: [PATCH 1/3] HDDS-10862. Async set om metirc when om start --- .../apache/hadoop/ozone/om/OzoneManager.java | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 9a67fed1268..55ae1c66bd0 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -47,6 +47,7 @@ import java.util.Timer; import java.util.TimerTask; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -1669,21 +1670,27 @@ public void start() throws IOException { } // Set metrics and start metrics back ground thread - metrics.setNumVolumes(metadataManager.countRowsInTable(metadataManager - .getVolumeTable())); - metrics.setNumBuckets(metadataManager.countRowsInTable(metadataManager - .getBucketTable())); - - if (getMetricsStorageFile().exists()) { - OmMetricsInfo metricsInfo = READER.readValue(getMetricsStorageFile()); - metrics.setNumKeys(metricsInfo.getNumKeys()); - } + CompletableFuture.runAsync(() -> { + try { + metrics.setNumVolumes( + metadataManager.countRowsInTable(metadataManager.getVolumeTable())); + metrics.setNumBuckets( + metadataManager.countRowsInTable(metadataManager.getBucketTable())); + + if (getMetricsStorageFile().exists()) { + OmMetricsInfo metricsInfo = READER.readValue(getMetricsStorageFile()); + metrics.setNumKeys(metricsInfo.getNumKeys()); + } - // FSO(FILE_SYSTEM_OPTIMIZED) - metrics.setNumDirs(metadataManager - .countEstimatedRowsInTable(metadataManager.getDirectoryTable())); - metrics.setNumFiles(metadataManager - .countEstimatedRowsInTable(metadataManager.getFileTable())); + // FSO(FILE_SYSTEM_OPTIMIZED) + metrics.setNumDirs(metadataManager.countEstimatedRowsInTable( + metadataManager.getDirectoryTable())); + metrics.setNumFiles(metadataManager.countEstimatedRowsInTable( + metadataManager.getFileTable())); + } catch (IOException e) { + LOG.warn("Async set om metrics fail.", e); + } + }); // Schedule save metrics long period = configuration.getTimeDuration(OZONE_OM_METRICS_SAVE_INTERVAL, From 11522fe8e5881f011d21c1c0163af8338c6f72fa Mon Sep 17 00:00:00 2001 From: liminyu Date: Thu, 16 May 2024 22:06:13 +0800 Subject: [PATCH 2/3] HDDS-10862. Async set om metirc when om start --- .../apache/hadoop/ozone/om/OzoneManager.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index 55ae1c66bd0..ca2cab7ee9a 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -985,6 +985,15 @@ public void close() throws IOException { * Class which schedule saving metrics to a file. */ private class ScheduleOMMetricsWriteTask extends TimerTask { + + public ScheduleOMMetricsWriteTask() throws IOException { + final File metricsStorageFile = getMetricsStorageFile(); + if (metricsStorageFile.exists()) { + OmMetricsInfo metricsInfo = READER.readValue(metricsStorageFile); + metrics.setNumKeys(metricsInfo.getNumKeys()); + } + } + @Override public void run() { saveOmMetrics(); @@ -1669,7 +1678,7 @@ public void start() throws IOException { versionManager.getMetadataLayoutVersion(), layoutVersionInDB); } - // Set metrics and start metrics back ground thread + // Set metrics and start metrics background thread CompletableFuture.runAsync(() -> { try { metrics.setNumVolumes( @@ -1677,18 +1686,13 @@ public void start() throws IOException { metrics.setNumBuckets( metadataManager.countRowsInTable(metadataManager.getBucketTable())); - if (getMetricsStorageFile().exists()) { - OmMetricsInfo metricsInfo = READER.readValue(getMetricsStorageFile()); - metrics.setNumKeys(metricsInfo.getNumKeys()); - } - // FSO(FILE_SYSTEM_OPTIMIZED) metrics.setNumDirs(metadataManager.countEstimatedRowsInTable( metadataManager.getDirectoryTable())); metrics.setNumFiles(metadataManager.countEstimatedRowsInTable( metadataManager.getFileTable())); } catch (IOException e) { - LOG.warn("Async set om metrics fail.", e); + throw new RuntimeException("Async set om metrics fail", e); } }); From 7ba0dfcfe72632deffe4823c75bf67c17efde005 Mon Sep 17 00:00:00 2001 From: liminyu Date: Thu, 23 May 2024 21:39:19 +0800 Subject: [PATCH 3/3] HDDS-10862. Reduce time spent on initializing metrics during OM start --- .../apache/hadoop/ozone/om/OzoneManager.java | 42 +++++++------------ 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index ca2cab7ee9a..9e12941a55d 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -47,7 +47,6 @@ import java.util.Timer; import java.util.TimerTask; import java.util.UUID; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -985,15 +984,6 @@ public void close() throws IOException { * Class which schedule saving metrics to a file. */ private class ScheduleOMMetricsWriteTask extends TimerTask { - - public ScheduleOMMetricsWriteTask() throws IOException { - final File metricsStorageFile = getMetricsStorageFile(); - if (metricsStorageFile.exists()) { - OmMetricsInfo metricsInfo = READER.readValue(metricsStorageFile); - metrics.setNumKeys(metricsInfo.getNumKeys()); - } - } - @Override public void run() { saveOmMetrics(); @@ -1678,23 +1668,21 @@ public void start() throws IOException { versionManager.getMetadataLayoutVersion(), layoutVersionInDB); } - // Set metrics and start metrics background thread - CompletableFuture.runAsync(() -> { - try { - metrics.setNumVolumes( - metadataManager.countRowsInTable(metadataManager.getVolumeTable())); - metrics.setNumBuckets( - metadataManager.countRowsInTable(metadataManager.getBucketTable())); - - // FSO(FILE_SYSTEM_OPTIMIZED) - metrics.setNumDirs(metadataManager.countEstimatedRowsInTable( - metadataManager.getDirectoryTable())); - metrics.setNumFiles(metadataManager.countEstimatedRowsInTable( - metadataManager.getFileTable())); - } catch (IOException e) { - throw new RuntimeException("Async set om metrics fail", e); - } - }); + metrics.setNumVolumes(metadataManager + .countEstimatedRowsInTable(metadataManager.getVolumeTable())); + metrics.setNumBuckets(metadataManager + .countEstimatedRowsInTable(metadataManager.getBucketTable())); + + if (getMetricsStorageFile().exists()) { + OmMetricsInfo metricsInfo = READER.readValue(getMetricsStorageFile()); + metrics.setNumKeys(metricsInfo.getNumKeys()); + } + + // FSO(FILE_SYSTEM_OPTIMIZED) + metrics.setNumDirs(metadataManager + .countEstimatedRowsInTable(metadataManager.getDirectoryTable())); + metrics.setNumFiles(metadataManager + .countEstimatedRowsInTable(metadataManager.getFileTable())); // Schedule save metrics long period = configuration.getTimeDuration(OZONE_OM_METRICS_SAVE_INTERVAL,