From 13ad776aab0dd499ecf311c2f081ffcb504c6c11 Mon Sep 17 00:00:00 2001 From: luoyajun10 Date: Tue, 28 Jun 2022 18:53:03 +0800 Subject: [PATCH] fix record key with binary type --- .../org/apache/hudi/common/util/StringUtils.java | 6 +++++- .../apache/hudi/common/util/TestStringUtils.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hudi-common/src/main/java/org/apache/hudi/common/util/StringUtils.java b/hudi-common/src/main/java/org/apache/hudi/common/util/StringUtils.java index 3e1a1a9cc7f5e..a18c3b20eb856 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/util/StringUtils.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/util/StringUtils.java @@ -19,6 +19,7 @@ package org.apache.hudi.common.util; import javax.annotation.Nullable; +import java.nio.ByteBuffer; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -88,7 +89,10 @@ public static String nullToEmpty(@Nullable String string) { } public static String objToString(@Nullable Object obj) { - return obj == null ? null : obj.toString(); + if (obj == null) { + return null; + } + return obj instanceof ByteBuffer ? toHexString(((ByteBuffer) obj).array()) : obj.toString(); } /** diff --git a/hudi-common/src/test/java/org/apache/hudi/common/util/TestStringUtils.java b/hudi-common/src/test/java/org/apache/hudi/common/util/TestStringUtils.java index 5f1bcd3c066ef..a98e22ccbcb1e 100644 --- a/hudi-common/src/test/java/org/apache/hudi/common/util/TestStringUtils.java +++ b/hudi-common/src/test/java/org/apache/hudi/common/util/TestStringUtils.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; @@ -51,6 +52,20 @@ public void testStringNullToEmpty() { assertEquals("", StringUtils.nullToEmpty(null)); } + @Test + public void testStringObjToString() { + assertNull(StringUtils.objToString(null)); + assertEquals("Test String", StringUtils.objToString("Test String")); + + // assert byte buffer + ByteBuffer byteBuffer1 = ByteBuffer.wrap("1234".getBytes()); + ByteBuffer byteBuffer2 = ByteBuffer.wrap("5678".getBytes()); + // assert equal because ByteBuffer has overwritten the toString to return a summary string + assertEquals(byteBuffer1.toString(), byteBuffer2.toString()); + // assert not equal + assertNotEquals(StringUtils.objToString(byteBuffer1), StringUtils.objToString(byteBuffer2)); + } + @Test public void testStringEmptyToNull() { assertNull(StringUtils.emptyToNull(""));