From 280a77d163435bf0e34be870efb7c45544ed8b93 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Wed, 31 Jul 2024 13:59:05 -0700 Subject: [PATCH 1/6] HDDS-11259. [hsync] DataNode should verify HBASE_SUPPORT layout version for every PutBlock. Change-Id: I7aab81d99238dad92d94a354f87b607c686c8735 --- .../keyvalue/impl/BlockManagerImpl.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java index 9ca0aa89843d..9bd391860208 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.conf.ConfigurationSource; @@ -65,7 +66,7 @@ public class BlockManagerImpl implements BlockManager { // Default Read Buffer capacity when Checksum is not present private final int defaultReadBufferCapacity; private final int readMappedBufferThreshold; - private boolean incrementalEnabled; + private final AtomicBoolean incrementalEnabled; /** * Constructs a Block Manager. @@ -81,15 +82,9 @@ public BlockManagerImpl(ConfigurationSource conf) { this.readMappedBufferThreshold = config.getBufferSize( ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_KEY, ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_DEFAULT); - incrementalEnabled = + incrementalEnabled = new AtomicBoolean( config.getBoolean(OZONE_CHUNK_LIST_INCREMENTAL, - OZONE_CHUNK_LIST_INCREMENTAL_DEFAULT); - if (incrementalEnabled && !VersionedDatanodeFeatures.isFinalized( - HDDSLayoutFeature.HBASE_SUPPORT)) { - LOG.warn("DataNode has not finalized upgrading to a version that " + - "supports incremental chunk list. Fallback to full chunk list"); - incrementalEnabled = false; - } + OZONE_CHUNK_LIST_INCREMENTAL_DEFAULT)); } @Override @@ -162,7 +157,13 @@ public long persistPutBlock(KeyValueContainer container, } } - db.getStore().putBlockByID(batch, incrementalEnabled, localID, data, + if (incrementalEnabled.get() && !VersionedDatanodeFeatures.isFinalized( + HDDSLayoutFeature.HBASE_SUPPORT)) { + LOG.warn("DataNode has not finalized upgrading to a version that " + + "supports incremental chunk list. Fallback to full chunk list"); + incrementalEnabled.set(false); + } + db.getStore().putBlockByID(batch, incrementalEnabled.get(), localID, data, containerData, endOfBlock); if (bcsId != 0) { db.getStore().getMetadataTable().putWithBatch( @@ -258,7 +259,7 @@ private void mergeLastChunkForBlockFinalization(BlockID blockId, DBHandle db, if (blockData.getMetadata().containsKey(INCREMENTAL_CHUNK_LIST)) { BlockData emptyBlockData = new BlockData(blockId); emptyBlockData.addMetadata(INCREMENTAL_CHUNK_LIST, ""); - db.getStore().putBlockByID(batch, incrementalEnabled, localID, + db.getStore().putBlockByID(batch, incrementalEnabled.get(), localID, emptyBlockData, kvContainer.getContainerData(), true); } } From 99b6274b0124ad0f961ebf42c63a946ed061fe61 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Thu, 1 Aug 2024 16:05:53 -0700 Subject: [PATCH 2/6] Address review comments. 1. reject finalizeBlock if upgrade is not finalized. 2. Remove DataNode-side ozone.incremental.chunk.list configuration. 3. Reject client if it attempts to send chunks in incremental chunk list format before upgrade finalizes. Change-Id: I51cfd922937ab8fb1d49b55615b09291a8f7c71f --- .../apache/hadoop/hdds/scm/ScmConfigKeys.java | 4 --- .../keyvalue/impl/BlockManagerImpl.java | 31 ++++++++++--------- .../keyvalue/impl/TestBlockManagerImpl.java | 2 -- ...tBlockOutputStreamIncrementalPutBlock.java | 3 -- .../org/apache/hadoop/fs/ozone/TestHSync.java | 2 -- 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java index dbbfa9923e8a..593764ee09cf 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java @@ -145,10 +145,6 @@ public final class ScmConfigKeys { public static final String OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_DEFAULT = "32KB"; - public static final String OZONE_CHUNK_LIST_INCREMENTAL = - "ozone.incremental.chunk.list"; - public static final boolean OZONE_CHUNK_LIST_INCREMENTAL_DEFAULT = true; - public static final String OZONE_SCM_CONTAINER_LAYOUT_KEY = "ozone.scm.container.layout"; diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java index 9bd391860208..84da3a57f08c 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.conf.ConfigurationSource; @@ -42,8 +41,6 @@ import com.google.common.base.Preconditions; import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.BCSID_MISMATCH; -import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_CHUNK_LIST_INCREMENTAL; -import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_CHUNK_LIST_INCREMENTAL_DEFAULT; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,7 +63,6 @@ public class BlockManagerImpl implements BlockManager { // Default Read Buffer capacity when Checksum is not present private final int defaultReadBufferCapacity; private final int readMappedBufferThreshold; - private final AtomicBoolean incrementalEnabled; /** * Constructs a Block Manager. @@ -82,9 +78,6 @@ public BlockManagerImpl(ConfigurationSource conf) { this.readMappedBufferThreshold = config.getBufferSize( ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_KEY, ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_DEFAULT); - incrementalEnabled = new AtomicBoolean( - config.getBoolean(OZONE_CHUNK_LIST_INCREMENTAL, - OZONE_CHUNK_LIST_INCREMENTAL_DEFAULT)); } @Override @@ -157,13 +150,15 @@ public long persistPutBlock(KeyValueContainer container, } } - if (incrementalEnabled.get() && !VersionedDatanodeFeatures.isFinalized( - HDDSLayoutFeature.HBASE_SUPPORT)) { - LOG.warn("DataNode has not finalized upgrading to a version that " + - "supports incremental chunk list. Fallback to full chunk list"); - incrementalEnabled.set(false); + boolean incrementalEnabled = true; + if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { + if (isPartialChunkList(data)) { + throw new UnsupportedOperationException("DataNode has not finalized " + + "upgrading to a version that supports incremental chunk list."); + } + incrementalEnabled = false; } - db.getStore().putBlockByID(batch, incrementalEnabled.get(), localID, data, + db.getStore().putBlockByID(batch, incrementalEnabled, localID, data, containerData, endOfBlock); if (bcsId != 0) { db.getStore().getMetadataTable().putWithBatch( @@ -227,6 +222,10 @@ public void finalizeBlock(Container container, BlockID blockId) "be null for finalizeBlock operation."); Preconditions.checkState(blockId.getContainerID() >= 0, "Container Id cannot be negative"); + if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { + throw new UnsupportedOperationException("DataNode has not finalized " + + "upgrading to a version that supports block finalization."); + } KeyValueContainer kvContainer = (KeyValueContainer)container; long localID = blockId.getLocalID(); @@ -259,7 +258,7 @@ private void mergeLastChunkForBlockFinalization(BlockID blockId, DBHandle db, if (blockData.getMetadata().containsKey(INCREMENTAL_CHUNK_LIST)) { BlockData emptyBlockData = new BlockData(blockId); emptyBlockData.addMetadata(INCREMENTAL_CHUNK_LIST, ""); - db.getStore().putBlockByID(batch, incrementalEnabled.get(), localID, + db.getStore().putBlockByID(batch, true, localID, emptyBlockData, kvContainer.getContainerData(), true); } } @@ -369,4 +368,8 @@ private BlockData getBlockByID(DBHandle db, BlockID blockID, String blockKey = containerData.getBlockKey(blockID.getLocalID()); return db.getStore().getBlockByID(blockID, blockKey); } + + private static boolean isPartialChunkList(BlockData data) { + return data.getMetadata().containsKey(INCREMENTAL_CHUNK_LIST); + } } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java index 26d959e88600..38a01e46900d 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestBlockManagerImpl.java @@ -45,7 +45,6 @@ import java.util.List; import java.util.UUID; -import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_CHUNK_LIST_INCREMENTAL; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.apache.hadoop.ozone.container.keyvalue.helpers.KeyValueContainerUtil.isSameSchemaVersion; @@ -84,7 +83,6 @@ private void initTest(ContainerTestVersionInfo versionInfo) this.schemaVersion = versionInfo.getSchemaVersion(); this.config = new OzoneConfiguration(); ContainerTestVersionInfo.setTestSchemaVersion(schemaVersion, config); - config.setBoolean(OZONE_CHUNK_LIST_INCREMENTAL, true); initilaze(); } diff --git a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestBlockOutputStreamIncrementalPutBlock.java b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestBlockOutputStreamIncrementalPutBlock.java index 1014b943a2a2..5f2b80bdef6c 100644 --- a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestBlockOutputStreamIncrementalPutBlock.java +++ b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestBlockOutputStreamIncrementalPutBlock.java @@ -44,7 +44,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_CHUNK_LIST_INCREMENTAL; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -74,8 +73,6 @@ private void init(boolean incrementalChunkList) throws IOException { ((InMemoryConfiguration) config).setBoolean( OzoneConfigKeys.OZONE_FS_HSYNC_ENABLED, true); - ((InMemoryConfiguration) config).setBoolean( - OZONE_CHUNK_LIST_INCREMENTAL, incrementalChunkList); RpcClient rpcClient = new RpcClient(config, null) { diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java index 56d38f9f0264..98d7388310b3 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java @@ -110,7 +110,6 @@ import org.slf4j.event.Level; import static java.nio.charset.StandardCharsets.UTF_8; -import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_CHUNK_LIST_INCREMENTAL; import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_RATIS_PIPELINE_LIMIT; import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_INTERVAL; import static org.apache.hadoop.ozone.OzoneConsts.OZONE_OFS_URI_SCHEME; @@ -176,7 +175,6 @@ public static void init() throws Exception { CONF.setTimeDuration(OZONE_DIR_DELETING_SERVICE_INTERVAL, 100, TimeUnit.MILLISECONDS); CONF.setBoolean("ozone.client.incremental.chunk.list", true); CONF.setBoolean("ozone.client.stream.putblock.piggybacking", true); - CONF.setBoolean(OZONE_CHUNK_LIST_INCREMENTAL, true); CONF.setTimeDuration(OZONE_OM_OPEN_KEY_CLEANUP_SERVICE_INTERVAL, SERVICE_INTERVAL, TimeUnit.MILLISECONDS); CONF.setTimeDuration(OZONE_OM_OPEN_KEY_EXPIRE_THRESHOLD, From 038380cb1f94e96c67dfdbd72f2961dd5eb650a4 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Thu, 1 Aug 2024 22:55:34 -0700 Subject: [PATCH 3/6] Remove ozone.incremental.chunk.list from ozone-default.xml Change-Id: Ia5e0871d5eec9a80a2f3d59b00a9f2b31d202ca1 --- .../common/src/main/resources/ozone-default.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml index 8be6526c194f..ce990d43a8eb 100644 --- a/hadoop-hdds/common/src/main/resources/ozone-default.xml +++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml @@ -851,17 +851,6 @@ The default read threshold to use memory mapped buffers. - - ozone.incremental.chunk.list - true - OZONE, CLIENT, DATANODE, PERFORMANCE - - By default, a writer client sends full chunk list of a block when it - sends PutBlock requests. Changing this configuration to true will send - only incremental chunk list which reduces metadata overhead and improves - hsync performance. - - ozone.scm.container.layout FILE_PER_BLOCK From 7c5b9c25a7890b54a6e94bb3f3fdaafc48454689 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Fri, 2 Aug 2024 09:56:54 -0700 Subject: [PATCH 4/6] Replace UnsupportOperationException with StorageContainerException in BlockManagerImpl. Change-Id: I1aed656fbef1a3c3db7a2d5db9b11bf541a23a81 --- .../ozone/container/keyvalue/impl/BlockManagerImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java index 84da3a57f08c..e7106dd90563 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java @@ -41,6 +41,7 @@ import com.google.common.base.Preconditions; import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.BCSID_MISMATCH; +import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.UNSUPPORTED_REQUEST; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -153,8 +154,8 @@ public long persistPutBlock(KeyValueContainer container, boolean incrementalEnabled = true; if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { if (isPartialChunkList(data)) { - throw new UnsupportedOperationException("DataNode has not finalized " + - "upgrading to a version that supports incremental chunk list."); + throw new StorageContainerException("DataNode has not finalized " + + "upgrading to a version that supports incremental chunk list.", UNSUPPORTED_REQUEST); } incrementalEnabled = false; } @@ -223,8 +224,8 @@ public void finalizeBlock(Container container, BlockID blockId) Preconditions.checkState(blockId.getContainerID() >= 0, "Container Id cannot be negative"); if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { - throw new UnsupportedOperationException("DataNode has not finalized " + - "upgrading to a version that supports block finalization."); + throw new StorageContainerException("DataNode has not finalized " + + "upgrading to a version that supports block finalization.", UNSUPPORTED_REQUEST); } KeyValueContainer kvContainer = (KeyValueContainer)container; From 9b94f0e0f73092502d6e4500fc29d29b4dcb7186 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Fri, 2 Aug 2024 12:17:34 -0700 Subject: [PATCH 5/6] Do not mark a container unhealthy if client sends unsupported request. It's client's fault. Change-Id: I180d72cac58e400e0b62d30cc404a45ff49936ed --- .../hadoop/ozone/container/common/impl/HddsDispatcher.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java index 740dfa4e4135..5d309d0e633e 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java @@ -173,6 +173,7 @@ private boolean canIgnoreException(Result result) { case CONTAINER_UNHEALTHY: case CLOSED_CONTAINER_IO: case DELETE_ON_OPEN_CONTAINER: + case UNSUPPORTED_REQUEST: // Blame client for sending unsupported request. return true; default: return false; From e36387f1f7dea04ae7893d17af88442ec3ee6e0e Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Fri, 2 Aug 2024 12:26:43 -0700 Subject: [PATCH 6/6] Move layout version check earlier to KeyValueHandler for finalizeBlock. Change-Id: If4be0008dbb4429bd4329a68f239c5851c8dd6f4 --- .../hadoop/ozone/container/keyvalue/KeyValueHandler.java | 7 +++++++ .../ozone/container/keyvalue/impl/BlockManagerImpl.java | 4 ---- 2 files changed, 7 insertions(+), 4 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 c83b93e412a3..402e1be4cd0f 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 @@ -53,6 +53,7 @@ import org.apache.hadoop.hdds.scm.ByteStringConversion; import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.hadoop.hdds.scm.container.common.helpers.StorageContainerException; +import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature; import org.apache.hadoop.hdds.utils.FaultInjector; import org.apache.hadoop.hdds.utils.HddsServerUtil; import org.apache.hadoop.ozone.OzoneConfigKeys; @@ -101,6 +102,7 @@ import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.INVALID_CONTAINER_STATE; import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.IO_EXCEPTION; import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.PUT_SMALL_FILE_ERROR; +import static org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.UNSUPPORTED_REQUEST; import static org.apache.hadoop.hdds.scm.protocolPB.ContainerCommandResponseBuilders.getBlockDataResponse; import static org.apache.hadoop.hdds.scm.protocolPB.ContainerCommandResponseBuilders.getBlockLengthResponse; import static org.apache.hadoop.hdds.scm.protocolPB.ContainerCommandResponseBuilders.getEchoResponse; @@ -590,6 +592,11 @@ ContainerCommandResponseProto handleFinalizeBlock( ContainerProtos.BlockData responseData; try { + if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { + throw new StorageContainerException("DataNode has not finalized " + + "upgrading to a version that supports block finalization.", UNSUPPORTED_REQUEST); + } + checkContainerOpen(kvContainer); BlockID blockID = BlockID.getFromProtobuf( request.getFinalizeBlock().getBlockID()); diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java index e7106dd90563..7adc95a7e627 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/impl/BlockManagerImpl.java @@ -223,10 +223,6 @@ public void finalizeBlock(Container container, BlockID blockId) "be null for finalizeBlock operation."); Preconditions.checkState(blockId.getContainerID() >= 0, "Container Id cannot be negative"); - if (!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) { - throw new StorageContainerException("DataNode has not finalized " + - "upgrading to a version that supports block finalization.", UNSUPPORTED_REQUEST); - } KeyValueContainer kvContainer = (KeyValueContainer)container; long localID = blockId.getLocalID();