diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/Util.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/Util.java index 0612b3794c637b..14843578bc9337 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/Util.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/Util.java @@ -66,7 +66,7 @@ public class Util { private static final long DEFAULT_EXEC_CMD_TIMEOUT_MS = 600000L; private static final String[] ORDINAL_SUFFIX - = new String[] { "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th" }; + = new String[] {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"}; private static final List REGEX_ESCAPES = Lists.newArrayList("\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"); @@ -389,7 +389,7 @@ public static long getLongPropertyOrDefault(String valStr, long defaultVal, Pred } public static double getDoublePropertyOrDefault(String valStr, double defaultVal, Predicate pred, - String hintMsg) throws AnalysisException { + String hintMsg) throws AnalysisException { if (Strings.isNullOrEmpty(valStr)) { return defaultVal; } @@ -498,8 +498,8 @@ public static InputStream getInputStreamFromUrl(String urlStr, String encodedAut public static boolean showHiddenColumns() { return ConnectContext.get() != null && ( - ConnectContext.get().getSessionVariable().showHiddenColumns() - || ConnectContext.get().getSessionVariable().skipStorageEngineMerge()); + ConnectContext.get().getSessionVariable().showHiddenColumns() + || ConnectContext.get().getSessionVariable().skipStorageEngineMerge()); } public static String escapeSingleRegex(String s) { @@ -700,7 +700,12 @@ public static long sha256long(String str) { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(str.getBytes(StandardCharsets.UTF_8)); ByteBuffer buffer = ByteBuffer.wrap(hash); - return buffer.getLong(); + long result = buffer.getLong(); + // Handle Long.MIN_VALUE case to ensure non-negative ID generation + if (result == Long.MIN_VALUE) { + return str.hashCode(); + } + return result; } catch (NoSuchAlgorithmException e) { return str.hashCode(); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/util/UtilTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/util/UtilTest.java index dc8419ddd1f56d..5a67a0ad5c2f50 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/common/util/UtilTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/common/util/UtilTest.java @@ -45,8 +45,8 @@ public void getRootCauseWithSuppressedMessageRootCauseWithMessageWithMultiSuppre rootCause.addSuppressed(new Exception("Suppressed message2")); Assertions.assertEquals( "java.lang.Exception: Root cause message" - + " With suppressed[0]:Suppressed message" - + " With suppressed[1]:Suppressed message2", + + " With suppressed[0]:Suppressed message" + + " With suppressed[1]:Suppressed message2", Util.getRootCauseWithSuppressedMessage(rootCause)); } @@ -90,4 +90,16 @@ public void sha256longEcoding() { String str1 = "东方卫视"; Assertions.assertNotEquals(Util.sha256long(str), Util.sha256long(str1)); } + + @Test + public void sha256longHandlesLongMinValue() { + String testStr = "test_long_min_value_case"; + long result = Util.sha256long(testStr); + + Assertions.assertNotEquals(Long.MIN_VALUE, result, + "sha256long should not return Long.MIN_VALUE"); + + Assertions.assertEquals(result, Util.sha256long(testStr), + "Same input should produce same output"); + } }