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 45eb9d4ba6 HDDS-8914. Datanode may fail to start due to duplicate 
VolumeInfoMetrics (#4966)
45eb9d4ba6 is described below

commit 45eb9d4ba6124efa4776c48d402ecb268dcaaf9e
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Mon Jun 26 20:38:17 2023 +0200

    HDDS-8914. Datanode may fail to start due to duplicate VolumeInfoMetrics 
(#4966)
---
 .../apache/hadoop/ozone/container/common/volume/DbVolume.java |  4 ++--
 .../ozone/container/common/volume/MutableVolumeSet.java       | 10 +++++++---
 .../hadoop/ozone/container/common/volume/StorageVolume.java   | 11 ++++++++++-
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/DbVolume.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/DbVolume.java
index 0a13069954..2a762b2387 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/DbVolume.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/DbVolume.java
@@ -66,8 +66,8 @@ public class DbVolume extends StorageVolume {
   }
 
   @Override
-  protected void initialize() throws IOException {
-    super.initialize();
+  protected void initializeImpl() throws IOException {
+    super.initializeImpl();
     scanForDbStorePaths();
   }
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
index 02f4c6f101..863f50de52 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
@@ -166,10 +166,11 @@ public class MutableVolumeSet implements VolumeSet {
     }
 
     for (String locationString : rawLocations) {
+      StorageVolume volume = null;
       try {
         StorageLocation location = StorageLocation.parse(locationString);
 
-        StorageVolume volume = volumeFactory.createVolume(
+        volume = volumeFactory.createVolume(
             location.getUri().getPath(), location.getStorageType());
 
         LOG.info("Added Volume : {} to VolumeSet",
@@ -183,8 +184,11 @@ public class MutableVolumeSet implements VolumeSet {
         volumeMap.put(volume.getStorageDir().getPath(), volume);
         volumeStateMap.get(volume.getStorageType()).add(volume);
       } catch (IOException e) {
-        StorageVolume volume =
-            volumeFactory.createFailedVolume(locationString);
+        if (volume != null) {
+          volume.shutdown();
+        }
+
+        volume = volumeFactory.createFailedVolume(locationString);
         failedVolumeMap.put(locationString, volume);
         LOG.error("Failed to parse the storage location: " + locationString, 
e);
       }
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
index bd79c740bd..8141c57055 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
@@ -153,7 +153,16 @@ public abstract class StorageVolume
    * otherwise returns with IOException.
    * @throws IOException
    */
-  protected void initialize() throws IOException {
+  protected final void initialize() throws IOException {
+    try {
+      initializeImpl();
+    } catch (Exception e) {
+      shutdown();
+      throw e;
+    }
+  }
+
+  protected void initializeImpl() throws IOException {
     VolumeState intialVolumeState = analyzeVolumeState();
     switch (intialVolumeState) {
     case NON_EXISTENT:


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

Reply via email to