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
}