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 0a13069954dd..2a762b23874d 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 @@ protected DbVolume(Builder b) throws IOException { } @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 a78735286a97..24fe89f711f6 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 @@ private void initializeVolumeSet() throws IOException { } 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 @@ private void initializeVolumeSet() throws IOException { 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 1b514056a467..a5cc86ddcc27 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 @@ -148,7 +148,16 @@ public void format(String cid) throws IOException { * 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: