This is an automated email from the ASF dual-hosted git repository.
duong 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 b6f953bf70 HDDS-10671. Wrong size of response data in om-echo. (#6504)
b6f953bf70 is described below
commit b6f953bf707a63766ca3d3c4ff81d84f7825e607
Author: Duong Nguyen <[email protected]>
AuthorDate: Tue Apr 16 09:04:29 2024 -0700
HDDS-10671. Wrong size of response data in om-echo. (#6504)
---
...OzoneManagerProtocolClientSideTranslatorPB.java | 4 +--
.../apache/hadoop/ozone/util}/PayloadUtils.java | 32 ++++++++++++++--------
.../hadoop/ozone/util/TestPayloadUtils.java} | 32 ++++++++--------------
.../om/request/util/OMEchoRPCWriteRequest.java | 4 +--
.../protocolPB/OzoneManagerRequestHandler.java | 4 +--
.../hadoop/ozone/freon/OmRPCLoadGenerator.java | 20 ++++----------
6 files changed, 44 insertions(+), 52 deletions(-)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
index 08fa029833..3c6b6647a6 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
@@ -2491,12 +2491,12 @@ public final class
OzoneManagerProtocolClientSideTranslatorPB
}
@Override
- public EchoRPCResponse echoRPCReq(byte[] payloadReq, int payloadSizeResp,
+ public EchoRPCResponse echoRPCReq(byte[] payloadReq, int
payloadSizeRespBytes,
boolean writeToRatis) throws IOException {
EchoRPCRequest echoRPCRequest =
EchoRPCRequest.newBuilder()
.setPayloadReq(ByteString.copyFrom(payloadReq))
- .setPayloadSizeResp(payloadSizeResp)
+ .setPayloadSizeResp(payloadSizeRespBytes)
.setReadOnly(!writeToRatis)
.build();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/util/PayloadUtils.java
similarity index 55%
copy from
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
copy to
hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/util/PayloadUtils.java
index d198bfcbfc..6ca827832d 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/util/PayloadUtils.java
@@ -15,30 +15,40 @@
* the License.
*/
-package org.apache.hadoop.ozone.common;
+package org.apache.hadoop.ozone.util;
-import org.apache.commons.lang3.RandomUtils;
+import org.apache.ratis.util.Preconditions;
+
+import java.util.Random;
/**
* Utility class for payload operations.
*/
public final class PayloadUtils {
+ private static final int MAX_SIZE = 2097151 * 1024;
+ private static final byte[] SEED = new byte[1024];
- private static final int RPC_PAYLOAD_MULTIPLICATION_FACTOR = 1024;
- private static final int MAX_SIZE_KB = 2097151;
+ static {
+ new Random().nextBytes(SEED);
+ }
private PayloadUtils() {
}
- public static byte[] generatePayloadBytes(int payloadSize) {
+ public static byte[] generatePayload(int payloadSizeBytes) {
+ byte[] result = new byte[Math.min(payloadSizeBytes, MAX_SIZE)];
- byte[] payloadBytes = new byte[0];
- int payloadRespSize =
- Math.min(payloadSize * RPC_PAYLOAD_MULTIPLICATION_FACTOR, MAX_SIZE_KB);
- if (payloadRespSize > 0) {
- payloadBytes = RandomUtils.nextBytes(payloadRespSize);
+ // duplicate SEED to create the required payload.
+ int curIdx = 0;
+ while (curIdx < result.length) {
+ int remaining = result.length - curIdx;
+ int copySize = Math.min(SEED.length, remaining);
+ System.arraycopy(SEED, 0, result, curIdx, copySize);
+ curIdx += copySize;
}
- return payloadBytes;
+ Preconditions.assertTrue(curIdx == result.length);
+
+ return result;
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/util/TestPayloadUtils.java
similarity index 56%
rename from
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
rename to
hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/util/TestPayloadUtils.java
index d198bfcbfc..221a0ce6a9 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/common/PayloadUtils.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/util/TestPayloadUtils.java
@@ -14,31 +14,21 @@
* License for the specific language governing permissions and limitations
under
* the License.
*/
+package org.apache.hadoop.ozone.util;
-package org.apache.hadoop.ozone.common;
-
-import org.apache.commons.lang3.RandomUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
/**
- * Utility class for payload operations.
+ * Tests {@link PayloadUtils}.
*/
-public final class PayloadUtils {
-
- private static final int RPC_PAYLOAD_MULTIPLICATION_FACTOR = 1024;
- private static final int MAX_SIZE_KB = 2097151;
-
- private PayloadUtils() {
- }
-
- public static byte[] generatePayloadBytes(int payloadSize) {
-
- byte[] payloadBytes = new byte[0];
- int payloadRespSize =
- Math.min(payloadSize * RPC_PAYLOAD_MULTIPLICATION_FACTOR, MAX_SIZE_KB);
- if (payloadRespSize > 0) {
- payloadBytes = RandomUtils.nextBytes(payloadRespSize);
- }
+public class TestPayloadUtils {
- return payloadBytes;
+ @ParameterizedTest
+ @ValueSource(ints = {0, 1, 1023, 1024, 1025, 2048})
+ public void testGeneratePayload(int payload) {
+ byte[] generated = PayloadUtils.generatePayload(payload);
+ Assertions.assertEquals(payload, generated.length);
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMEchoRPCWriteRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMEchoRPCWriteRequest.java
index aba8f6f6fc..62de1601be 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMEchoRPCWriteRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMEchoRPCWriteRequest.java
@@ -20,7 +20,7 @@ package org.apache.hadoop.ozone.om.request.util;
import com.google.protobuf.ByteString;
import org.apache.ratis.server.protocol.TermIndex;
-import org.apache.hadoop.ozone.common.PayloadUtils;
+import org.apache.hadoop.ozone.util.PayloadUtils;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.request.OMClientRequest;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -45,7 +45,7 @@ public class OMEchoRPCWriteRequest extends OMClientRequest {
EchoRPCRequest echoRPCRequest = getOmRequest().getEchoRPCRequest();
byte[] payloadBytes =
- PayloadUtils.generatePayloadBytes(echoRPCRequest.getPayloadSizeResp());
+ PayloadUtils.generatePayload(echoRPCRequest.getPayloadSizeResp());
EchoRPCResponse echoRPCResponse = EchoRPCResponse.newBuilder()
.setPayload(ByteString.copyFrom(payloadBytes))
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index 5acb9f3651..29b30fd4ea 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -41,7 +41,7 @@ import org.apache.hadoop.hdds.client.ReplicationConfig;
import org.apache.hadoop.hdds.scm.protocolPB.OzonePBHelper;
import org.apache.hadoop.hdds.utils.FaultInjector;
import org.apache.hadoop.ozone.OzoneAcl;
-import org.apache.hadoop.ozone.common.PayloadUtils;
+import org.apache.hadoop.ozone.util.PayloadUtils;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.OzoneManagerPrepareState;
import org.apache.hadoop.ozone.om.exceptions.OMException;
@@ -1431,7 +1431,7 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
private EchoRPCResponse echoRPC(EchoRPCRequest req) {
EchoRPCResponse.Builder builder = EchoRPCResponse.newBuilder();
byte[] payloadBytes =
- PayloadUtils.generatePayloadBytes(req.getPayloadSizeResp());
+ PayloadUtils.generatePayload(req.getPayloadSizeResp());
builder.setPayload(ByteString.copyFrom(payloadBytes));
return builder.build();
}
diff --git
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OmRPCLoadGenerator.java
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OmRPCLoadGenerator.java
index 958df4c11a..1912185297 100644
---
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OmRPCLoadGenerator.java
+++
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/OmRPCLoadGenerator.java
@@ -19,11 +19,12 @@ package org.apache.hadoop.ozone.freon;
import com.codahale.metrics.Timer;
import com.google.common.base.Preconditions;
-import org.apache.commons.lang3.RandomUtils;
import org.apache.hadoop.hdds.cli.HddsVersionProvider;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import
org.apache.hadoop.ozone.om.protocolPB.OzoneManagerProtocolClientSideTranslatorPB;
import java.util.concurrent.Callable;
+
+import org.apache.hadoop.ozone.util.PayloadUtils;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@@ -42,8 +43,6 @@ import picocli.CommandLine.Option;
public class OmRPCLoadGenerator extends BaseFreonGenerator
implements Callable<Void> {
- private static final int RPC_PAYLOAD_MULTIPLICATION_FACTOR = 1024;
- private static final int MAX_SIZE_KB = 2097151;
private Timer timer;
private OzoneConfiguration configuration;
private OzoneManagerProtocolClientSideTranslatorPB[] clients;
@@ -88,9 +87,8 @@ public class OmRPCLoadGenerator extends BaseFreonGenerator
}
init();
- payloadReqBytes = RandomUtils.nextBytes(
- calculateMaxPayloadSize(payloadReqSizeKB));
- payloadRespSize = calculateMaxPayloadSize(payloadRespSizeKB);
+ payloadReqBytes =
PayloadUtils.generatePayload(payloadSizeInBytes(payloadReqSizeKB));
+ payloadRespSize = payloadSizeInBytes(payloadRespSizeKB);
timer = getMetrics().timer("rpc-payload");
try {
runTests(this::sendRPCReq);
@@ -104,14 +102,8 @@ public class OmRPCLoadGenerator extends BaseFreonGenerator
return null;
}
- private int calculateMaxPayloadSize(int payloadSizeKB) {
- if (payloadSizeKB > 0) {
- return Math.min(
- Math.toIntExact((long)payloadSizeKB *
- RPC_PAYLOAD_MULTIPLICATION_FACTOR),
- MAX_SIZE_KB);
- }
- return 0;
+ private int payloadSizeInBytes(int payloadSizeKB) {
+ return payloadSizeKB > 0 ? payloadSizeKB * 1024 : 0;
}
private void sendRPCReq(long l) throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]