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]

Reply via email to