From da9f42b81963fe1534dff632436d78055e02fc50 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Thu, 15 Jun 2023 01:00:32 +0530 Subject: [PATCH 1/9] HDDS-8447. Datanodes should not process container deletes for failed volumes. --- .../container/common/volume/HddsVolume.java | 6 +++ .../container/keyvalue/KeyValueHandler.java | 27 ++++++++-- .../keyvalue/TestKeyValueHandler.java | 50 +++++++++++++++---- 3 files changed, 67 insertions(+), 16 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java index b440e3fc43d1..b19fa6b791ba 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java @@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; +import com.google.common.annotations.VisibleForTesting; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.hdds.annotation.InterfaceStability; @@ -382,6 +383,11 @@ private String getIdDir() throws IOException { } } + @VisibleForTesting + public void setTmpDirPath(Path tmpDirPath) { + this.tmpDirPath = tmpDirPath; + } + private Path createTmpPath() throws IOException { // HddsVolume root directory path diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java index 18b415bceb8a..2fc68f8773e2 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java @@ -75,6 +75,7 @@ import org.apache.hadoop.ozone.container.common.statemachine.DatanodeConfiguration; import org.apache.hadoop.ozone.container.common.transport.server.ratis.DispatcherContext; import org.apache.hadoop.ozone.container.common.transport.server.ratis.DispatcherContext.WriteChunkStage; +import org.apache.hadoop.ozone.container.common.utils.StorageVolumeUtil; import org.apache.hadoop.ozone.container.common.volume.HddsVolume; import org.apache.hadoop.ozone.container.common.volume.RoundRobinVolumeChoosingPolicy; import org.apache.hadoop.ozone.container.common.volume.VolumeSet; @@ -1300,7 +1301,15 @@ private void deleteInternal(Container container, boolean force) // If the container is not empty, it should not be deleted unless the // container is being forcefully deleted (which happens when // container is unhealthy or over-replicated). - if (container.hasBlocks()) { + boolean containerHasBlocks = false; + try { + containerHasBlocks = container.hasBlocks(); + } catch (IOException ioe){ + LOG.error("Failed to check if container has blocks", ioe); + triggerVolumeScanAndThrowException(container, + "Failed to read chunks directory"); + } + if (containerHasBlocks) { metrics.incContainerDeleteFailedNonEmpty(); LOG.error("Received container deletion command for container {} but" + " the container is not empty with blockCount {}", @@ -1328,10 +1337,10 @@ private void deleteInternal(Container container, boolean force) .moveToTmpDeleteDirectory(keyValueContainerData, hddsVolume); if (!success) { - LOG.error("Failed to move container under " + - hddsVolume.getDeleteServiceDirPath()); - throw new StorageContainerException("Moving container failed", - CONTAINER_INTERNAL_ERROR); + LOG.error("Failed to move container under " + hddsVolume + .getDeleteServiceDirPath()); + triggerVolumeScanAndThrowException(container, + "Failed to move container"); } if (LOG.isDebugEnabled()) { @@ -1363,4 +1372,12 @@ private void deleteInternal(Container container, boolean force) container.getContainerData().setState(State.DELETED); sendICR(container); } + + private void triggerVolumeScanAndThrowException(Container container, + String msg) throws StorageContainerException { + // Trigger a volume scan as exception occurred. + StorageVolumeUtil.onFailure(container.getContainerData().getVolume()); + throw new StorageContainerException(msg, + CONTAINER_INTERNAL_ERROR); + } } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index f8454da88175..7c2b4c88e9fa 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Paths; import java.util.List; import java.util.Collections; import java.util.HashMap; @@ -357,15 +358,17 @@ public void testDeleteContainer() throws IOException { TestKeyValueHandler.class.getSimpleName() + "-" + UUID.randomUUID().toString()); try { + // Case 1 : Regular container delete final long containerID = 1L; final String clusterId = UUID.randomUUID().toString(); final String datanodeId = UUID.randomUUID().toString(); final ConfigurationSource conf = new OzoneConfiguration(); final ContainerSet containerSet = new ContainerSet(1000); - final VolumeSet volumeSet = Mockito.mock(VolumeSet.class); + final MutableVolumeSet volumeSet = Mockito.mock(MutableVolumeSet.class); HddsVolume hddsVolume = new HddsVolume.Builder(testDir).conf(conf) .clusterID(clusterId).datanodeUuid(datanodeId) + .volumeSet(volumeSet) .build(); hddsVolume.format(clusterId); hddsVolume.createWorkingDir(clusterId, null); @@ -388,16 +391,7 @@ public void testDeleteContainer() throws IOException { kvHandler.setClusterID(clusterId); final ContainerCommandRequestProto createContainer = - ContainerCommandRequestProto.newBuilder() - .setCmdType(ContainerProtos.Type.CreateContainer) - .setDatanodeUuid(datanodeId) - .setCreateContainer( - ContainerProtos.CreateContainerRequestProto.newBuilder() - .setContainerType(ContainerType.KeyValueContainer) - .build()) - .setContainerID(containerID) - .setPipelineID(UUID.randomUUID().toString()) - .build(); + createContainerRequest(datanodeId, containerID); kvHandler.handleCreateContainer(createContainer, null); Assert.assertEquals(1, icrReceived.get()); @@ -409,8 +403,42 @@ public void testDeleteContainer() throws IOException { assertFalse(KeyValueContainerUtil.ContainerDeleteDirectory .getDeleteLeftovers(hddsVolume).hasNext()); + + // Case 2 : failed move of container dir to tmp location should trigger + // a volume scan + + final long container2ID = 2L; + + final ContainerCommandRequestProto createContainer2 = + createContainerRequest(datanodeId, container2ID); + + kvHandler.handleCreateContainer(createContainer2, null); + + Assert.assertEquals(3, icrReceived.get()); + Assert.assertNotNull(containerSet.getContainer(container2ID)); + // to simulate failed move + hddsVolume.setTmpDirPath(Paths.get("/dummy/dir/doesnt/exist")); + try { + kvHandler.deleteContainer(containerSet.getContainer(container2ID), + true); + } catch (StorageContainerException sce) { + Assert.assertTrue(sce.getMessage().contains("Moving container failed")); + } + Mockito.verify(volumeSet).checkVolumeAsync(hddsVolume); + } finally { FileUtils.deleteDirectory(new File(testDir)); } } + + private static ContainerCommandRequestProto createContainerRequest( + String datanodeId, long containerID) { + return ContainerCommandRequestProto.newBuilder() + .setCmdType(ContainerProtos.Type.CreateContainer) + .setDatanodeUuid(datanodeId).setCreateContainer( + ContainerProtos.CreateContainerRequestProto.newBuilder() + .setContainerType(ContainerType.KeyValueContainer).build()) + .setContainerID(containerID).setPipelineID(UUID.randomUUID().toString()) + .build(); + } } From 4cb24bf40a64134de788d512bb72112e25e64788 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Thu, 15 Jun 2023 09:02:17 +0530 Subject: [PATCH 2/9] fix findbugs --- .../hadoop/ozone/container/keyvalue/TestKeyValueHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index 7c2b4c88e9fa..69f28f24ecc5 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -91,6 +91,7 @@ public class TestKeyValueHandler { private static final String DATANODE_UUID = UUID.randomUUID().toString(); private static final long DUMMY_CONTAINER_ID = 9999; + private static final String DUMMY_PATH = "/dummy/dir/doesnt/exist"; private final ContainerLayoutVersion layout; @@ -417,7 +418,7 @@ public void testDeleteContainer() throws IOException { Assert.assertEquals(3, icrReceived.get()); Assert.assertNotNull(containerSet.getContainer(container2ID)); // to simulate failed move - hddsVolume.setTmpDirPath(Paths.get("/dummy/dir/doesnt/exist")); + hddsVolume.setTmpDirPath(Paths.get(DUMMY_PATH)); try { kvHandler.deleteContainer(containerSet.getContainer(container2ID), true); From 9a23fffa08f6ddc8e2080ed5a0bf8fedaf4ac3fa Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Thu, 15 Jun 2023 10:11:46 +0530 Subject: [PATCH 3/9] fix findbugs --- .../hadoop/ozone/container/keyvalue/TestKeyValueHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index 69f28f24ecc5..c6c9007b0759 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -27,6 +27,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.StorageUnit; import org.apache.hadoop.fs.FileUtil; @@ -353,6 +354,7 @@ public void testCloseInvalidContainer() throws IOException { ContainerProtos.Result.INVALID_CONTAINER_STATE, response.getResult()); } + @SuppressFBWarnings("DMI_HARDCODED_ABSOLUTE_FILENAME") @Test public void testDeleteContainer() throws IOException { final String testDir = GenericTestUtils.getTempPath( From 4284be6a0937a786e8e4796d7e003bd87b2e2852 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Tue, 20 Jun 2023 12:44:02 +0530 Subject: [PATCH 4/9] rebase and address comment --- .../container/keyvalue/KeyValueHandler.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java index 2fc68f8773e2..a9322d618679 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java @@ -1301,15 +1301,7 @@ private void deleteInternal(Container container, boolean force) // If the container is not empty, it should not be deleted unless the // container is being forcefully deleted (which happens when // container is unhealthy or over-replicated). - boolean containerHasBlocks = false; - try { - containerHasBlocks = container.hasBlocks(); - } catch (IOException ioe){ - LOG.error("Failed to check if container has blocks", ioe); - triggerVolumeScanAndThrowException(container, - "Failed to read chunks directory"); - } - if (containerHasBlocks) { + if (container.hasBlocks()) { metrics.incContainerDeleteFailedNonEmpty(); LOG.error("Received container deletion command for container {} but" + " the container is not empty with blockCount {}", @@ -1339,8 +1331,11 @@ private void deleteInternal(Container container, boolean force) if (!success) { LOG.error("Failed to move container under " + hddsVolume .getDeleteServiceDirPath()); - triggerVolumeScanAndThrowException(container, - "Failed to move container"); + String errorMsg = + "Failed to move container" + container.getContainerData() + .getContainerID(); + triggerVolumeScanAndThrowException(container, errorMsg, + CONTAINER_INTERNAL_ERROR); } if (LOG.isDebugEnabled()) { @@ -1361,9 +1356,11 @@ private void deleteInternal(Container container, boolean force) // empty as a defensive check. LOG.error("Could not determine if the container {} is empty", container.getContainerData().getContainerID(), e); - throw new StorageContainerException("Could not determine if container " - + container.getContainerData().getContainerID() + - " is empty", DELETE_ON_NON_EMPTY_CONTAINER); + String errorMsg = + "Could not determine if the container " + container.getContainerData() + .getContainerID() + "is empty"; + triggerVolumeScanAndThrowException(container, errorMsg, + DELETE_ON_NON_EMPTY_CONTAINER); } finally { container.writeUnlock(); } @@ -1374,10 +1371,10 @@ private void deleteInternal(Container container, boolean force) } private void triggerVolumeScanAndThrowException(Container container, - String msg) throws StorageContainerException { + String msg, ContainerProtos.Result result) + throws StorageContainerException { // Trigger a volume scan as exception occurred. StorageVolumeUtil.onFailure(container.getContainerData().getVolume()); - throw new StorageContainerException(msg, - CONTAINER_INTERNAL_ERROR); + throw new StorageContainerException(msg, result); } } From 0cd361a9d2acf19d124684bb2f7b1b9abb175c2d Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Tue, 20 Jun 2023 14:10:31 +0530 Subject: [PATCH 5/9] fix tests --- .../hadoop/ozone/container/keyvalue/TestKeyValueHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index c6c9007b0759..6695b086ea1b 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -425,7 +425,8 @@ public void testDeleteContainer() throws IOException { kvHandler.deleteContainer(containerSet.getContainer(container2ID), true); } catch (StorageContainerException sce) { - Assert.assertTrue(sce.getMessage().contains("Moving container failed")); + Assert.assertTrue( + sce.getMessage().contains("Failed to move container")); } Mockito.verify(volumeSet).checkVolumeAsync(hddsVolume); From c18fea3bde53fbf26d950e4bf2bfe3d8b740a4f9 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Tue, 20 Jun 2023 16:34:08 +0530 Subject: [PATCH 6/9] fix test --- .../hadoop/ozone/container/keyvalue/TestKeyValueHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index 6695b086ea1b..9b2b639bbbfc 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Collections; @@ -419,6 +420,7 @@ public void testDeleteContainer() throws IOException { Assert.assertEquals(3, icrReceived.get()); Assert.assertNotNull(containerSet.getContainer(container2ID)); + Path tmpDirPath = hddsVolume.getTmpDirPath(); // to simulate failed move hddsVolume.setTmpDirPath(Paths.get(DUMMY_PATH)); try { @@ -429,7 +431,8 @@ public void testDeleteContainer() throws IOException { sce.getMessage().contains("Failed to move container")); } Mockito.verify(volumeSet).checkVolumeAsync(hddsVolume); - + // cleanup + hddsVolume.setTmpDirPath(tmpDirPath); } finally { FileUtils.deleteDirectory(new File(testDir)); } From 971ca377a4fecf1d199016c295c0c24e772626ad Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Fri, 23 Jun 2023 13:44:05 +0530 Subject: [PATCH 7/9] delete container on a failed volumet --- .../container/keyvalue/KeyValueHandler.java | 17 ++++++++++++++++- .../container/keyvalue/TestKeyValueHandler.java | 11 +++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java index a9322d618679..cbcc3e725916 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java @@ -127,7 +127,7 @@ */ public class KeyValueHandler extends Handler { - private static final Logger LOG = LoggerFactory.getLogger( + public static final Logger LOG = LoggerFactory.getLogger( KeyValueHandler.class); private final BlockManager blockManager; @@ -1289,6 +1289,16 @@ private void deleteInternal(Container container, boolean force) throws StorageContainerException { container.writeLock(); try { + if (container.getContainerData().getVolume().isFailed()) { + // if the volume in which the container resides fails + // don't attempt to delete/move it. When a volume fails, + // failedVolumeListener will pick it up and clear the container + // from the container set. + LOG.info("Delete container issued on containerID {} which is in a " + + "failed volume. Skipping", container.getContainerData() + .getContainerID()); + return; + } // If force is false, we check container state. if (!force) { // Check if container is open @@ -1377,4 +1387,9 @@ private void triggerVolumeScanAndThrowException(Container container, StorageVolumeUtil.onFailure(container.getContainerData().getVolume()); throw new StorageContainerException(msg, result); } + + public static Logger getLogger() { + return LOG; + } + } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index 9b2b639bbbfc..ba36773b861e 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -433,6 +433,17 @@ public void testDeleteContainer() throws IOException { Mockito.verify(volumeSet).checkVolumeAsync(hddsVolume); // cleanup hddsVolume.setTmpDirPath(tmpDirPath); + + // Case 3: Delete Container on a failed volume + hddsVolume.failVolume(); + GenericTestUtils.LogCapturer kvHandlerLogs = + GenericTestUtils.LogCapturer.captureLogs(KeyValueHandler.getLogger()); + kvHandler.deleteContainer(containerSet.getContainer(container2ID), true); + String expectedLog = + "Delete container issued on containerID 2 which is " + + "in a failed volume"; + Assert.assertTrue(kvHandlerLogs.getOutput().contains(expectedLog)); + } finally { FileUtils.deleteDirectory(new File(testDir)); } From 60580c494c557e7a098cdebe37aa34107e07298f Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Mon, 26 Jun 2023 11:40:58 +0530 Subject: [PATCH 8/9] address comment --- .../hadoop/ozone/container/keyvalue/KeyValueHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java index cbcc3e725916..db85f408e7de 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java @@ -1367,10 +1367,10 @@ private void deleteInternal(Container container, boolean force) LOG.error("Could not determine if the container {} is empty", container.getContainerData().getContainerID(), e); String errorMsg = - "Could not determine if the container " + container.getContainerData() - .getContainerID() + "is empty"; + "Failed to read container dir" + container.getContainerData() + .getContainerID(); triggerVolumeScanAndThrowException(container, errorMsg, - DELETE_ON_NON_EMPTY_CONTAINER); + CONTAINER_INTERNAL_ERROR); } finally { container.writeUnlock(); } From 55bd1bafd0f76e11e215ef73ebfa43f0786e4705 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Mon, 26 Jun 2023 12:36:07 +0530 Subject: [PATCH 9/9] refactor & address comment --- .../apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java | 2 +- .../hadoop/ozone/container/keyvalue/TestKeyValueHandler.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java index a1962ced5e93..279db24c4b0e 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java @@ -1338,7 +1338,7 @@ private void deleteInternal(Container container, boolean force) try { KeyValueContainerUtil.moveToDeletedContainerDir(keyValueContainerData, hddsVolume); - } catch (IOException ioe){ + } catch (IOException ioe) { LOG.error("Failed to move container under " + hddsVolume .getDeletedContainerDir()); String errorMsg = diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java index dd4419121038..31c9173bd810 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java @@ -20,8 +20,6 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; import java.util.Collections; import java.util.HashMap;