This is an automated email from the ASF dual-hosted git repository.
swamirishi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 81bc179d1c HDDS-11013. Ensure version is always set in
ContainerCommandRequestProto (#6812)
81bc179d1c is described below
commit 81bc179d1c2b1afe3f127d607690671d9c8cc1f5
Author: Swaminathan Balachandran <[email protected]>
AuthorDate: Mon Jun 17 13:50:02 2024 -0700
HDDS-11013. Ensure version is always set in ContainerCommandRequestProto
(#6812)
---
.../apache/hadoop/hdds/scm/XceiverClientGrpc.java | 25 ++++++++++++++++------
.../storage/TestBlockOutputStreamCorrectness.java | 10 ++++++---
.../hdds/ratis/ContainerCommandRequestMessage.java | 4 ++++
.../ratis/TestContainerCommandRequestMessage.java | 3 +++
.../ozone/container/ContainerTestHelper.java | 11 ++++++++--
.../impl/TestKeyValueStreamDataChannel.java | 4 +++-
6 files changed, 44 insertions(+), 13 deletions(-)
diff --git
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
index 2b5854ca20..4fb661cbff 100644
---
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
+++
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
@@ -52,6 +52,7 @@ import org.apache.hadoop.hdds.security.SecurityConfig;
import org.apache.hadoop.hdds.security.exception.SCMSecurityException;
import org.apache.hadoop.hdds.tracing.GrpcClientInterceptor;
import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.ozone.OzoneConsts;
import java.util.concurrent.TimeoutException;
@@ -277,6 +278,11 @@ public class XceiverClientGrpc extends XceiverClientSpi {
List<DatanodeDetails> datanodeList = pipeline.getNodes();
HashMap<DatanodeDetails, CompletableFuture<ContainerCommandResponseProto>>
futureHashMap = new HashMap<>();
+ if (!request.hasVersion()) {
+ ContainerCommandRequestProto.Builder builder =
ContainerCommandRequestProto.newBuilder(request);
+ builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+ request = builder.build();
+ }
for (DatanodeDetails dn : datanodeList) {
try {
futureHashMap.put(dn, sendCommandAsync(request, dn).getResponse());
@@ -337,10 +343,13 @@ public class XceiverClientGrpc extends XceiverClientSpi {
return TracingUtil.executeInNewSpan(spanName,
() -> {
- ContainerCommandRequestProto finalPayload =
+ ContainerCommandRequestProto.Builder builder =
ContainerCommandRequestProto.newBuilder(request)
- .setTraceID(TracingUtil.exportCurrentSpan()).build();
- return sendCommandWithRetry(finalPayload, validators);
+ .setTraceID(TracingUtil.exportCurrentSpan());
+ if (!request.hasVersion()) {
+ builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+ }
+ return sendCommandWithRetry(builder.build(), validators);
});
}
@@ -490,12 +499,14 @@ public class XceiverClientGrpc extends XceiverClientSpi {
try (Scope ignored = GlobalTracer.get().activateSpan(span)) {
- ContainerCommandRequestProto finalPayload =
+ ContainerCommandRequestProto.Builder builder =
ContainerCommandRequestProto.newBuilder(request)
- .setTraceID(TracingUtil.exportCurrentSpan())
- .build();
+ .setTraceID(TracingUtil.exportCurrentSpan());
+ if (!request.hasVersion()) {
+ builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+ }
XceiverClientReply asyncReply =
- sendCommandAsync(finalPayload, pipeline.getFirstNode());
+ sendCommandAsync(builder.build(), pipeline.getFirstNode());
if (shouldBlockAndWaitAsyncReply(request)) {
asyncReply.getResponse().get();
}
diff --git
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
index bf4830c6fc..df55b5bf57 100644
---
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
+++
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
@@ -47,6 +47,7 @@ import org.apache.hadoop.hdds.scm.XceiverClientSpi;
import org.apache.hadoop.hdds.scm.pipeline.MockPipeline;
import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
+import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.container.common.helpers.BlockData;
import org.apache.hadoop.ozone.container.common.helpers.ChunkInfo;
@@ -228,9 +229,12 @@ class TestBlockOutputStreamCorrectness {
}
@Override
- public XceiverClientReply sendCommandAsync(
- ContainerCommandRequestProto request
- ) {
+ public XceiverClientReply sendCommandAsync(ContainerCommandRequestProto
request) {
+
+ if (!request.hasVersion()) {
+ request = ContainerCommandRequestProto.newBuilder(request)
+ .setVersion(ClientVersion.CURRENT.toProtoValue()).build();
+ }
final ContainerCommandResponseProto.Builder builder =
ContainerCommandResponseProto.newBuilder()
.setResult(Result.SUCCESS)
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
index e1ebde2519..7ae6e78590 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
@@ -24,6 +24,7 @@ import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ContainerC
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutSmallFileRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Type;
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.WriteChunkRequestProto;
+import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.common.Checksum;
import org.apache.ratis.protocol.Message;
@@ -44,6 +45,9 @@ public final class ContainerCommandRequestMessage implements
Message {
if (traceId != null) {
b.setTraceID(traceId);
}
+ if (!request.hasVersion()) {
+ b.setVersion(ClientVersion.CURRENT.toProtoValue());
+ }
ByteString data = ByteString.EMPTY;
if (request.getCmdType() == Type.WriteChunk) {
diff --git
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
index ef65335a6c..05fc9cb40b 100644
---
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
+++
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
@@ -31,6 +31,7 @@ import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutBlockRe
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutSmallFileRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Type;
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.WriteChunkRequestProto;
+import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.common.Checksum;
import org.apache.hadoop.ozone.common.ChecksumData;
import org.apache.hadoop.ozone.common.OzoneChecksumException;
@@ -91,6 +92,7 @@ public class TestContainerCommandRequestMessage {
.setContainerID(blockID.getContainerID())
.setDatanodeUuid(UUID.randomUUID().toString())
.setPutSmallFile(putSmallFileRequest)
+ .setVersion(ClientVersion.CURRENT.toProtoValue())
.build();
}
@@ -113,6 +115,7 @@ public class TestContainerCommandRequestMessage {
.setContainerID(blockID.getContainerID())
.setDatanodeUuid(UUID.randomUUID().toString())
.setWriteChunk(writeChunkRequest)
+ .setVersion(ClientVersion.CURRENT.toProtoValue())
.build();
}
diff --git
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
index 7ade596add..cf96b2145d 100644
---
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
+++
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
@@ -38,6 +38,7 @@ import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.KeyValue;
import org.apache.hadoop.hdds.scm.pipeline.MockPipeline;
import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
import org.apache.hadoop.hdds.utils.UniqueId;
+import org.apache.hadoop.ozone.ClientVersion;
import org.apache.hadoop.ozone.common.Checksum;
import org.apache.hadoop.ozone.common.ChunkBuffer;
import org.apache.hadoop.ozone.common.OzoneChecksumException;
@@ -540,6 +541,11 @@ public final class ContainerTestHelper {
return data;
}
+ public static ContainerCommandRequestProto getDummyCommandRequestProto(
+ ContainerProtos.Type cmdType) {
+ return getDummyCommandRequestProto(ClientVersion.CURRENT, cmdType, 0);
+ }
+
/**
* Construct fake protobuf messages for various types of requests.
* This is tedious, however necessary to test. Protobuf classes are final
@@ -549,16 +555,17 @@ public final class ContainerTestHelper {
* @return
*/
public static ContainerCommandRequestProto getDummyCommandRequestProto(
- ContainerProtos.Type cmdType) {
+ ClientVersion clientVersion, ContainerProtos.Type cmdType, int
replicaIndex) {
final Builder builder =
ContainerCommandRequestProto.newBuilder()
+ .setVersion(clientVersion.toProtoValue())
.setCmdType(cmdType)
.setContainerID(DUMMY_CONTAINER_ID)
.setDatanodeUuid(DATANODE_UUID);
final DatanodeBlockID fakeBlockId =
DatanodeBlockID.newBuilder()
- .setContainerID(DUMMY_CONTAINER_ID).setLocalID(1)
+
.setContainerID(DUMMY_CONTAINER_ID).setLocalID(1).setReplicaIndex(replicaIndex)
.setBlockCommitSequenceId(101).build();
final ContainerProtos.ChunkInfo fakeChunkInfo =
diff --git
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
index c97040d1b3..63045f7613 100644
---
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
@@ -24,6 +24,7 @@ import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.DatanodeBl
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.PutBlockRequestProto;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Type;
import org.apache.hadoop.hdds.ratis.ContainerCommandRequestMessage;
+import org.apache.hadoop.ozone.ClientVersion;
import
org.apache.hadoop.ozone.container.keyvalue.impl.KeyValueStreamDataChannel.Buffers;
import
org.apache.hadoop.ozone.container.keyvalue.impl.KeyValueStreamDataChannel.WriteMethod;
import org.apache.ratis.client.api.DataStreamOutput;
@@ -70,7 +71,7 @@ public class TestKeyValueStreamDataChannel {
public static final Logger LOG =
LoggerFactory.getLogger(TestKeyValueStreamDataChannel.class);
- static final ContainerCommandRequestProto PUT_BLOCK_PROTO
+ private static final ContainerCommandRequestProto PUT_BLOCK_PROTO
= ContainerCommandRequestProto.newBuilder()
.setCmdType(Type.PutBlock)
.setPutBlock(PutBlockRequestProto.newBuilder().setBlockData(
@@ -78,6 +79,7 @@ public class TestKeyValueStreamDataChannel {
.setContainerID(222).setLocalID(333).build()).build()))
.setDatanodeUuid("datanodeId")
.setContainerID(111L)
+ .setVersion(ClientVersion.CURRENT.toProtoValue())
.build();
static final int PUT_BLOCK_PROTO_SIZE =
PUT_BLOCK_PROTO.toByteString().size();
static {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]