This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new ffac710ae7 [INLONG-11871][SDK] Fix init crashes when no IP available 
(#11872)
ffac710ae7 is described below

commit ffac710ae7cc981d595c5215aaf55bbec4e06732
Author: Marc Venturini <[email protected]>
AuthorDate: Thu May 29 10:28:32 2025 +0800

    [INLONG-11871][SDK] Fix init crashes when no IP available (#11872)
---
 .../dataproxy-sdk-golang/util/id.go                | 33 +++++++++++++++++-----
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/id.go 
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/id.go
index 443a84548a..6992141a17 100755
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/id.go
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/id.go
@@ -18,6 +18,7 @@ package util
 
 import (
        "log"
+       "sync"
 
        "github.com/bwmarrin/snowflake"
        "github.com/google/uuid"
@@ -25,20 +26,22 @@ import (
 )
 
 var (
+       snowflakeOnce sync.Once
        snowflakeNode *snowflake.Node
+       snowflakeErr  error
 )
 
-func init() {
+func newSnowFlakeNode() (*snowflake.Node, error) {
        ip, err := GetOneIP()
        if err != nil {
-               log.Fatal(err)
+               return nil, err
        }
-
        id := IPtoUInt(ip)
-       snowflakeNode, err = snowflake.NewNode(int64(id % 1024))
+       node, err := snowflake.NewNode(int64(id % 1024))
        if err != nil {
-               log.Fatal(err)
+               return nil, err
        }
+       return node, nil
 }
 
 // UInt64UUID generates an uint64 UUID
@@ -53,7 +56,23 @@ func UInt64UUID() (uint64, error) {
        return cityhash.CityHash64WithSeeds(bytes, uint32(length), 
13329145742295551469, 7926974186468552394), nil
 }
 
-// SnowFlakeID generates a snowflake ID
+// Deprecated: Use SafeSnowFlakeID instead.
+// SnowFlakeID generates a snowflake ID. If an error occurs, it logs it and 
exits.
 func SnowFlakeID() string {
-       return snowflakeNode.Generate().String()
+       id, err := SafeSnowFlakeID()
+       if err != nil {
+               log.Fatal(err)
+       }
+       return id
+}
+
+// SafeSnowFlakeID generates a snowflake ID. If an error occurs it returns it.
+func SafeSnowFlakeID() (string, error) {
+       snowflakeOnce.Do(func() {
+               snowflakeNode, snowflakeErr = newSnowFlakeNode()
+       })
+       if snowflakeErr != nil {
+               return "", snowflakeErr
+       }
+       return snowflakeNode.Generate().String(), nil
 }

Reply via email to