From be28d2c63bb9101a3525c1102ae1a8e91f1668c9 Mon Sep 17 00:00:00 2001 From: JinYong Li <42576980+JinyLeeChina@users.noreply.github.com> Date: Tue, 9 Nov 2021 10:59:16 +0800 Subject: [PATCH] [Bug][SnowFlakeUtils] fix snowFlake bug (#6744) * fix snowFlake bug * fix hash machine --- .../dolphinscheduler/common/utils/SnowFlakeUtils.java | 10 +++++----- .../common/utils/SnowFlakeUtilsTest.java | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtils.java index 9bb360e02a..6393e19b8c 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtils.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtils.java @@ -24,13 +24,13 @@ import java.util.Objects; public class SnowFlakeUtils { // start timestamp private static final long START_TIMESTAMP = 1609430400000L; //2021-01-01 00:00:00 - // Number of digits - private static final long SEQUENCE_BIT = 13; + // Each machine generates 32 in the same millisecond + private static final long SEQUENCE_BIT = 5; private static final long MACHINE_BIT = 2; private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT); // The displacement to the left - private static final long MACHINE_LEFT = SEQUENCE_BIT; - private static final long TIMESTAMP_LEFT = SEQUENCE_BIT + MACHINE_BIT; + private static final long MACHINE_LEFT = SEQUENCE_BIT + MACHINE_BIT; + private static final long TIMESTAMP_LEFT = SEQUENCE_BIT + MACHINE_BIT + MACHINE_LEFT; private final int machineId; private long sequence = 0L; private long lastTimestamp = -1L; @@ -40,7 +40,7 @@ public class SnowFlakeUtils { private SnowFlakeUtils() throws SnowFlakeException { try { - this.machineId = Math.abs(Objects.hash(InetAddress.getLocalHost().getHostName())) % 32; + this.machineId = Math.abs(Objects.hash(InetAddress.getLocalHost().getHostName())) % 4; } catch (UnknownHostException e) { throw new SnowFlakeException(e.getMessage()); } diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtilsTest.java index 4f4c6673ea..bdf7096ba6 100644 --- a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtilsTest.java +++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SnowFlakeUtilsTest.java @@ -23,7 +23,8 @@ public class SnowFlakeUtilsTest { @Test public void testNextId() { try { - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 100; i++) { + Thread.sleep(1); System.out.println(SnowFlakeUtils.getInstance().nextId()); } } catch (Exception e) {