You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by do...@apache.org on 2025/05/29 02:28:37 UTC

(inlong) branch master updated: [INLONG-11871][SDK] Fix init crashes when no IP available (#11872)

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 <ma...@gmail.com>
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
 }