This is an automated email from the ASF dual-hosted git repository.
adoroszlai 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 fb0c7d001d4 HDDS-14788. Avoid using guava Ints/Longs to convert byte
arrays (#9927)
fb0c7d001d4 is described below
commit fb0c7d001d481aa293a87f61af054bebe3ecfb2e
Author: Russole <[email protected]>
AuthorDate: Wed Mar 18 21:35:11 2026 +0800
HDDS-14788. Avoid using guava Ints/Longs to convert byte arrays (#9927)
---
.../apache/hadoop/hdds/utils/db/IntegerCodec.java | 14 +++++++++++---
.../org/apache/hadoop/hdds/utils/db/LongCodec.java | 21 +++++++++++----------
.../org/apache/hadoop/ozone/common/Checksum.java | 4 ++--
.../metadata/DatanodeSchemaThreeDBDefinition.java | 6 +++---
.../hdds/utils/db/TestFixedLengthStringCodec.java | 7 +++----
.../apache/hadoop/hdds/scm/ha/io/ScmEnumCodec.java | 6 +++---
.../hadoop/hdds/scm/ha/io/ScmIntegerCodec.java | 8 ++++----
.../apache/hadoop/hdds/scm/ha/io/ScmLongCodec.java | 8 ++++----
.../recon/spi/impl/ContainerKeyPrefixCodec.java | 9 ++++-----
.../recon/spi/impl/KeyPrefixContainerCodec.java | 16 ++++++++--------
10 files changed, 53 insertions(+), 46 deletions(-)
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
index bcd8875df87..c9080c5bbeb 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/IntegerCodec.java
@@ -58,12 +58,20 @@ public Integer fromCodecBuffer(@Nonnull CodecBuffer buffer)
{
@Override
public byte[] toPersistedFormat(Integer object) {
- return ByteBuffer.wrap(new byte[Integer.BYTES]).putInt(object).array();
+ return object != null ? toByteArray(object) : null;
+ }
+
+ public byte[] toByteArray(int value) {
+ return ByteBuffer.wrap(new byte[Integer.BYTES]).putInt(value).array();
}
@Override
- public Integer fromPersistedFormat(byte[] rawData) {
- return ByteBuffer.wrap(rawData).getInt();
+ public Integer fromPersistedFormat(byte[] bytes) {
+ return bytes != null ? fromByteArray(bytes) : null;
+ }
+
+ public int fromByteArray(byte[] bytes) {
+ return ByteBuffer.wrap(bytes).getInt();
}
@Override
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/LongCodec.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/LongCodec.java
index 3d4044bfb40..0abb256b4ee 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/LongCodec.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/db/LongCodec.java
@@ -55,19 +55,20 @@ public Long fromCodecBuffer(@Nonnull CodecBuffer buffer) {
@Override
public byte[] toPersistedFormat(Long object) {
- if (object == null) {
- return null;
- }
- return ByteBuffer.wrap(new byte[Long.BYTES]).putLong(object).array();
+ return object != null ? toByteArray(object) : null;
+ }
+
+ public byte[] toByteArray(long value) {
+ return ByteBuffer.wrap(new byte[Long.BYTES]).putLong(value).array();
}
@Override
- public Long fromPersistedFormat(byte[] rawData) {
- if (rawData != null) {
- return ByteBuffer.wrap(rawData).getLong();
- } else {
- return null;
- }
+ public Long fromPersistedFormat(byte[] bytes) {
+ return bytes != null ? fromByteArray(bytes) : null;
+ }
+
+ public long fromByteArray(byte[] bytes) {
+ return ByteBuffer.wrap(bytes).getLong();
}
@Override
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/Checksum.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/Checksum.java
index e911e1cb7a8..ffdab4cde16 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/Checksum.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/Checksum.java
@@ -18,7 +18,6 @@
package org.apache.hadoop.ozone.common;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.primitives.Ints;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -29,6 +28,7 @@
import java.util.function.Supplier;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos;
import
org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.ChecksumType;
+import org.apache.hadoop.hdds.utils.db.IntegerCodec;
import org.apache.hadoop.ozone.common.utils.BufferUtils;
import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
@@ -70,7 +70,7 @@ private static Function<ByteBuffer, ByteString>
newMessageDigestFunction(
}
public static ByteString int2ByteString(int n) {
- return UnsafeByteOperations.unsafeWrap(Ints.toByteArray(n));
+ return UnsafeByteOperations.unsafeWrap(IntegerCodec.get().toByteArray(n));
}
private static Function<ByteBuffer, ByteString>
newChecksumByteBufferFunction(
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
index 7030bd5bdf8..2b1d64c92bd 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeSchemaThreeDBDefinition.java
@@ -20,7 +20,6 @@
import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_DB_PROFILE;
import static
org.apache.hadoop.hdds.utils.db.DBStoreBuilder.HDDS_DEFAULT_DB_PROFILE;
-import com.google.common.primitives.Longs;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
@@ -165,7 +164,8 @@ public static int getContainerKeyPrefixLength() {
public static String getContainerKeyPrefix(long containerID) {
// NOTE: Rocksdb normally needs a fixed length prefix.
- return FixedLengthStringCodec.bytes2String(Longs.toByteArray(containerID))
+ return FixedLengthStringCodec.bytes2String(
+ LongCodec.get().toByteArray(containerID))
+ separator;
}
@@ -187,7 +187,7 @@ public static String getKeyWithoutPrefix(String
keyWithPrefix) {
public static long getContainerId(String key) {
int index = getContainerKeyPrefixLength();
String cid = key.substring(0, index);
- return Longs.fromByteArray(FixedLengthStringCodec.string2Bytes(cid));
+ return
LongCodec.get().fromByteArray(FixedLengthStringCodec.string2Bytes(cid));
}
private void setSeparator(String keySeparator) {
diff --git
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestFixedLengthStringCodec.java
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestFixedLengthStringCodec.java
index 57b596d29d2..ae43f0f6d45 100644
---
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestFixedLengthStringCodec.java
+++
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/db/TestFixedLengthStringCodec.java
@@ -19,7 +19,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
-import com.google.common.primitives.Longs;
import org.junit.jupiter.api.Test;
/**
@@ -36,9 +35,9 @@ public void testStringEncodeAndDecode() {
for (long containerID : testContainerIDs) {
String containerPrefix = FixedLengthStringCodec.bytes2String(
- Longs.toByteArray(containerID));
- long decodedContainerID = Longs.fromByteArray(
- FixedLengthStringCodec.string2Bytes(containerPrefix));
+ LongCodec.get().toByteArray(containerID));
+ long decodedContainerID = LongCodec.get().
+ fromByteArray(FixedLengthStringCodec.string2Bytes(containerPrefix));
assertEquals(containerID, decodedContainerID);
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmEnumCodec.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmEnumCodec.java
index 33849f3783b..e91ac4d9e10 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmEnumCodec.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmEnumCodec.java
@@ -17,10 +17,10 @@
package org.apache.hadoop.hdds.scm.ha.io;
-import com.google.common.primitives.Ints;
import com.google.protobuf.ProtocolMessageEnum;
import java.util.function.IntFunction;
import org.apache.hadoop.hdds.StringUtils;
+import org.apache.hadoop.hdds.utils.db.IntegerCodec;
import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import
org.apache.ratis.thirdparty.com.google.protobuf.InvalidProtocolBufferException;
import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
@@ -46,14 +46,14 @@ class ScmEnumCodec<T extends Enum<T> & ProtocolMessageEnum>
implements ScmCodec<
@Override
public ByteString serialize(T object) {
- return
UnsafeByteOperations.unsafeWrap(Ints.toByteArray(object.getNumber()));
+ return
UnsafeByteOperations.unsafeWrap(IntegerCodec.get().toByteArray(object.getNumber()));
}
@Override
public T deserialize(Class<?> type, ByteString value) throws
InvalidProtocolBufferException {
final int n;
try {
- n = Ints.fromByteArray(value.toByteArray());
+ n = IntegerCodec.get().fromByteArray(value.toByteArray());
} catch (Exception e) {
throw new InvalidProtocolBufferException(
"Failed to deserialize enum " + enumClass + ": "
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmIntegerCodec.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmIntegerCodec.java
index 117606c7260..45639a31bb2 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmIntegerCodec.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmIntegerCodec.java
@@ -17,22 +17,22 @@
package org.apache.hadoop.hdds.scm.ha.io;
-import com.google.common.primitives.Ints;
+import org.apache.hadoop.hdds.utils.db.IntegerCodec;
import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
/**
* Encodes/decodes an integer to a byte string.
*/
-public class ScmIntegerCodec implements ScmCodec<Integer> {
+class ScmIntegerCodec implements ScmCodec<Integer> {
@Override
public ByteString serialize(Integer object) {
// toByteArray returns a new array
- return UnsafeByteOperations.unsafeWrap(Ints.toByteArray(object));
+ return
UnsafeByteOperations.unsafeWrap(IntegerCodec.get().toByteArray(object));
}
@Override
public Integer deserialize(Class<?> type, ByteString value) {
- return Ints.fromByteArray(value.toByteArray());
+ return IntegerCodec.get().fromByteArray(value.toByteArray());
}
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmLongCodec.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmLongCodec.java
index 6d24b2827a8..04780170592 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmLongCodec.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/io/ScmLongCodec.java
@@ -17,24 +17,24 @@
package org.apache.hadoop.hdds.scm.ha.io;
-import com.google.common.primitives.Longs;
+import org.apache.hadoop.hdds.utils.db.LongCodec;
import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.thirdparty.com.google.protobuf.UnsafeByteOperations;
/**
* {@link ScmCodec} for {@code Long} objects.
*/
-public class ScmLongCodec implements ScmCodec<Long> {
+class ScmLongCodec implements ScmCodec<Long> {
@Override
public ByteString serialize(Long object) {
// toByteArray returns a new array
- return UnsafeByteOperations.unsafeWrap(Longs.toByteArray(object));
+ return
UnsafeByteOperations.unsafeWrap(LongCodec.get().toByteArray(object));
}
@Override
public Long deserialize(Class<?> type, ByteString value) {
- return Longs.fromByteArray(value.toByteArray());
+ return LongCodec.get().fromByteArray(value.toByteArray());
}
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
index 935611d70d2..d8add6e5375 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ContainerKeyPrefixCodec.java
@@ -19,12 +19,12 @@
import static java.nio.charset.StandardCharsets.UTF_8;
-import com.google.common.primitives.Longs;
import java.nio.ByteBuffer;
import java.util.Objects;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hdds.utils.db.Codec;
+import org.apache.hadoop.hdds.utils.db.LongCodec;
import org.apache.hadoop.ozone.recon.api.types.ContainerKeyPrefix;
/**
@@ -55,8 +55,7 @@ public Class<ContainerKeyPrefix> getTypeClass() {
public byte[] toPersistedFormat(ContainerKeyPrefix containerKeyPrefix) {
Objects.requireNonNull(containerKeyPrefix,
"Null object can't be converted to byte array.");
- byte[] containerIdBytes = Longs.toByteArray(containerKeyPrefix
- .getContainerId());
+ byte[] containerIdBytes =
LongCodec.get().toByteArray(containerKeyPrefix.getContainerId());
//Prefix seek can be done only with containerId. In that case, we can
// expect the key and version to be undefined.
@@ -69,8 +68,8 @@ public byte[] toPersistedFormat(ContainerKeyPrefix
containerKeyPrefix) {
if (containerKeyPrefix.getKeyVersion() != -1) {
containerIdBytes = ArrayUtils.addAll(containerIdBytes, KEY_DELIMITER
.getBytes(UTF_8));
- containerIdBytes = ArrayUtils.addAll(containerIdBytes, Longs.toByteArray(
- containerKeyPrefix.getKeyVersion()));
+ containerIdBytes = ArrayUtils.addAll(containerIdBytes,
+ LongCodec.get().toByteArray(containerKeyPrefix.getKeyVersion()));
}
return containerIdBytes;
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
index 119e1b53325..d16e802598f 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/KeyPrefixContainerCodec.java
@@ -19,7 +19,6 @@
import static java.nio.charset.StandardCharsets.UTF_8;
-import com.google.common.primitives.Longs;
import jakarta.annotation.Nonnull;
import java.nio.ByteBuffer;
import java.util.Objects;
@@ -27,6 +26,7 @@
import org.apache.hadoop.hdds.utils.db.Codec;
import org.apache.hadoop.hdds.utils.db.CodecBuffer;
import org.apache.hadoop.hdds.utils.db.CodecException;
+import org.apache.hadoop.hdds.utils.db.LongCodec;
import org.apache.hadoop.ozone.recon.api.types.KeyPrefixContainer;
/**
@@ -112,15 +112,15 @@ public KeyPrefixContainer fromCodecBuffer(@Nonnull
CodecBuffer buffer) throws Co
int secondLastDelimiter = findLastDelimiter(data, lastDelimiter - 1);
if (secondLastDelimiter == -1) {
String keyPrefix = new String(data, 0, lastDelimiter, UTF_8);
- long version = Longs.fromByteArray(ArrayUtils.subarray(data,
+ long version = LongCodec.get().fromByteArray(ArrayUtils.subarray(data,
lastDelimiter + 1, lastDelimiter + 1 + Long.BYTES));
return KeyPrefixContainer.get(keyPrefix, version);
}
String keyPrefix = new String(data, 0, secondLastDelimiter, UTF_8);
- long version = Longs.fromByteArray(ArrayUtils.subarray(data,
+ long version = LongCodec.get().fromByteArray(ArrayUtils.subarray(data,
secondLastDelimiter + 1, secondLastDelimiter + 1 + Long.BYTES));
- long containerId = Longs.fromByteArray(ArrayUtils.subarray(data,
+ long containerId = LongCodec.get().fromByteArray(ArrayUtils.subarray(data,
lastDelimiter + 1, lastDelimiter + 1 + Long.BYTES));
return KeyPrefixContainer.get(keyPrefix, version, containerId);
@@ -149,12 +149,12 @@ public byte[] toPersistedFormat(KeyPrefixContainer
keyPrefixContainer) {
// expect the version and the containerId to be undefined.
if (keyPrefixContainer.getKeyVersion() != -1) {
keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes, KEY_DELIMITER_BYTES);
- keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes, Longs.toByteArray(
- keyPrefixContainer.getKeyVersion()));
+ keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes,
+ LongCodec.get().toByteArray(keyPrefixContainer.getKeyVersion()));
if (keyPrefixContainer.getContainerId() != -1) {
keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes,
KEY_DELIMITER_BYTES);
- keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes, Longs.toByteArray(
- keyPrefixContainer.getContainerId()));
+ keyPrefixBytes = ArrayUtils.addAll(keyPrefixBytes,
+ LongCodec.get().toByteArray(keyPrefixContainer.getContainerId()));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]