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 8dd68427001f..12112f1b0851 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 @@ -2599,6 +2599,7 @@ private void deleteInternal(Container container, boolean force) return; } containerLocked.markContainerForDelete(); + containerSet.removeRecoveringContainer(containerId); containerSet.removeContainer(containerId); ContainerLogger.logDeleted(containerLocked.getContainerData(), force); KeyValueContainerUtil.removeContainer(keyValueContainerData, conf); 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 b4f9895a3362..47ae3b297d11 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 @@ -614,6 +614,32 @@ public void testDeleteContainer() throws IOException { } } + @Test + public void testDeleteRecoveringContainer() throws IOException { + HandlerWithVolumeSet handlerCtx = createKeyValueHandler(tempDir); + KeyValueHandler keyValueHandler = handlerCtx.getHandler(); + ContainerSet containerSet = handlerCtx.getContainerSet(); + try { + ContainerCommandRequestProto.Builder request = createContainerRequest(DATANODE_UUID, DUMMY_CONTAINER_ID) + .toBuilder(); + request.getCreateContainerBuilder().setState(State.RECOVERING); + assertThat(keyValueHandler.handleCreateContainer(request.build(), null).getResult()) + .isEqualTo(ContainerProtos.Result.SUCCESS); + Container container = containerSet.getContainer(DUMMY_CONTAINER_ID); + assertThat(container).isNotNull(); + assertThat(container.getContainerState()).isEqualTo(State.RECOVERING); + assertThat(containerSet.getRecoveringContainerMap()).containsKey(DUMMY_CONTAINER_ID); + + keyValueHandler.deleteContainer(container, true); + + assertThat(containerSet.getContainer(DUMMY_CONTAINER_ID)).isNull(); + assertThat(containerSet.getRecoveringContainerMap()).doesNotContainKey(DUMMY_CONTAINER_ID); + } finally { + keyValueHandler.stop(); + handlerCtx.getVolumeSet().getVolumesList().forEach(StorageVolume::shutdown); + } + } + /** * Tests that deleting a container decrements the cached used space of its volume. */