This is an automated email from the ASF dual-hosted git repository.
weichiu pushed a commit to branch HDDS-7593
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-7593 by this push:
new 9e5da198a8 HDDS-11259. [hsync] DataNode should verify HBASE_SUPPORT
layout version for every PutBlock. (#7012)
9e5da198a8 is described below
commit 9e5da198a84b5ef5cf2fc7a9150efedf416cf21e
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Fri Aug 2 14:27:03 2024 -0700
HDDS-11259. [hsync] DataNode should verify HBASE_SUPPORT layout version for
every PutBlock. (#7012)
---
.../org/apache/hadoop/hdds/scm/ScmConfigKeys.java | 4 ----
.../common/src/main/resources/ozone-default.xml | 11 ---------
.../container/common/impl/HddsDispatcher.java | 1 +
.../ozone/container/keyvalue/KeyValueHandler.java | 7 ++++++
.../container/keyvalue/impl/BlockManagerImpl.java | 27 +++++++++++-----------
.../keyvalue/impl/TestBlockManagerImpl.java | 2 --
.../TestBlockOutputStreamIncrementalPutBlock.java | 3 ---
.../java/org/apache/hadoop/fs/ozone/TestHSync.java | 2 --
8 files changed, 22 insertions(+), 35 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 dbbfa9923e..593764ee09 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/common/src/main/resources/ozone-default.xml
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 8be6526c19..ce990d43a8 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.
</description>
</property>
- <property>
- <name>ozone.incremental.chunk.list</name>
- <value>true</value>
- <tag>OZONE, CLIENT, DATANODE, PERFORMANCE</tag>
- <description>
- 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.
- </description>
- </property>
<property>
<name>ozone.scm.container.layout</name>
<value>FILE_PER_BLOCK</value>
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 740dfa4e41..5d309d0e63 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 @@ public class HddsDispatcher implements ContainerDispatcher,
Auditor {
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;
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 c83b93e412..402e1be4cd 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.protocol.datanode.proto.ContainerProtos.WriteChunk
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.Res
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 @@ public class KeyValueHandler extends Handler {
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 9ca0aa8984..7adc95a7e6 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,8 +41,7 @@ import
org.apache.hadoop.ozone.container.upgrade.VersionedDatanodeFeatures;
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 static
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Result.UNSUPPORTED_REQUEST;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,7 +64,6 @@ 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;
/**
* Constructs a Block Manager.
@@ -81,15 +79,6 @@ public class BlockManagerImpl implements BlockManager {
this.readMappedBufferThreshold = config.getBufferSize(
ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_KEY,
ScmConfigKeys.OZONE_CHUNK_READ_MAPPED_BUFFER_THRESHOLD_DEFAULT);
- incrementalEnabled =
- 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;
- }
}
@Override
@@ -162,6 +151,14 @@ public class BlockManagerImpl implements BlockManager {
}
}
+ boolean incrementalEnabled = true;
+ if
(!VersionedDatanodeFeatures.isFinalized(HDDSLayoutFeature.HBASE_SUPPORT)) {
+ if (isPartialChunkList(data)) {
+ throw new StorageContainerException("DataNode has not finalized " +
+ "upgrading to a version that supports incremental chunk
list.", UNSUPPORTED_REQUEST);
+ }
+ incrementalEnabled = false;
+ }
db.getStore().putBlockByID(batch, incrementalEnabled, localID, data,
containerData, endOfBlock);
if (bcsId != 0) {
@@ -258,7 +255,7 @@ public class BlockManagerImpl implements BlockManager {
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, true, localID,
emptyBlockData, kvContainer.getContainerData(), true);
}
}
@@ -368,4 +365,8 @@ public class BlockManagerImpl implements BlockManager {
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 26d959e886..38a01e4690 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.ArrayList;
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 @@ public class TestBlockManagerImpl {
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 1014b943a2..5f2b80bdef 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.api.AfterEach;
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 @@ public class TestBlockOutputStreamIncrementalPutBlock {
((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 ca19d90f37..466490290b 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
@@ -113,7 +113,6 @@ import org.slf4j.LoggerFactory;
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;
@@ -187,7 +186,6 @@ public class TestHSync {
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,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]