44 "context"
55 "net"
66 "os"
7+ "time"
78
89 "github.com/threatwinds/go-sdk/catcher"
910 "github.com/threatwinds/go-sdk/plugins"
@@ -24,41 +25,117 @@ func main() {
2425
2526 go configurations .UpdateGPTConfigurations ()
2627
27- socketsFolder , err := twutil .MkdirJoin (plugins .WorkDir , "sockets" )
28- if err != nil {
29- utils .Logger .ErrorF ("cannot create socket directory: %v" , err )
30- _ = catcher .Error ("cannot create socket directory" , err , nil )
31- os .Exit (1 )
28+ // Retry logic for creating socket directory
29+ maxRetries := 3
30+ retryDelay := 2 * time .Second
31+ var socketsFolder twutil.Folder
32+ var err error
33+
34+ for retry := 0 ; retry < maxRetries ; retry ++ {
35+ socketsFolder , err = twutil .MkdirJoin (plugins .WorkDir , "sockets" )
36+ if err == nil {
37+ utils .Logger .LogF (100 , "Socket directory %s created" , socketsFolder )
38+ break
39+ }
40+
41+ _ = catcher .Error ("cannot create socket directory, retrying" , err , map [string ]any {
42+ "retry" : retry + 1 ,
43+ "maxRetries" : maxRetries ,
44+ })
45+
46+ if retry < maxRetries - 1 {
47+ time .Sleep (retryDelay )
48+ // Increase delay for next retry
49+ retryDelay *= 2
50+ } else {
51+ // If all retries failed, log the error and return
52+ _ = catcher .Error ("all retries failed when creating socket directory" , err , nil )
53+ return
54+ }
3255 }
33- utils .Logger .LogF (100 , "Socket directory %s created" , socketsFolder )
3456
3557 socketFile := socketsFolder .FileJoin ("com.utmstack.soc-ai_correlation.sock" )
3658 _ = os .Remove (socketFile )
3759
38- unixAddress , err := net .ResolveUnixAddr ("unix" , socketFile )
39- if err != nil {
40- utils .Logger .ErrorF ("cannot resolve unix address: %v" , err )
41- _ = catcher .Error ("cannot resolve unix address" , err , nil )
42- os .Exit (1 )
60+ // Retry logic for resolving unix address
61+ retryDelay = 2 * time .Second
62+ var unixAddress * net.UnixAddr
63+
64+ for retry := 0 ; retry < maxRetries ; retry ++ {
65+ unixAddress , err = net .ResolveUnixAddr ("unix" , socketFile )
66+ if err == nil {
67+ utils .Logger .LogF (100 , "Socket file %s created" , socketFile )
68+ break
69+ }
70+
71+ _ = catcher .Error ("cannot resolve unix address, retrying" , err , map [string ]any {
72+ "retry" : retry + 1 ,
73+ "maxRetries" : maxRetries ,
74+ })
75+
76+ if retry < maxRetries - 1 {
77+ time .Sleep (retryDelay )
78+ // Increase delay for next retry
79+ retryDelay *= 2
80+ } else {
81+ // If all retries failed, log the error and return
82+ _ = catcher .Error ("all retries failed when resolving unix address" , err , nil )
83+ return
84+ }
4385 }
44- utils .Logger .LogF (100 , "Socket file %s created" , socketFile )
4586
46- listener , err := net .ListenUnix ("unix" , unixAddress )
47- if err != nil {
48- utils .Logger .ErrorF ("cannot listen to unix socket: %v" , err )
49- _ = catcher .Error ("cannot listen to unix socket" , err , nil )
50- os .Exit (1 )
87+ // Retry logic for listening to unix socket
88+ retryDelay = 2 * time .Second
89+ var listener * net.UnixListener
90+
91+ for retry := 0 ; retry < maxRetries ; retry ++ {
92+ listener , err = net .ListenUnix ("unix" , unixAddress )
93+ if err == nil {
94+ utils .Logger .LogF (100 , "Listening on %s" , socketFile )
95+ break
96+ }
97+
98+ _ = catcher .Error ("cannot listen to unix socket, retrying" , err , map [string ]any {
99+ "retry" : retry + 1 ,
100+ "maxRetries" : maxRetries ,
101+ })
102+
103+ if retry < maxRetries - 1 {
104+ time .Sleep (retryDelay )
105+ // Increase delay for next retry
106+ retryDelay *= 2
107+ } else {
108+ // If all retries failed, log the error and return
109+ _ = catcher .Error ("all retries failed when listening to unix socket" , err , nil )
110+ return
111+ }
51112 }
52- utils .Logger .LogF (100 , "Listening on %s" , socketFile )
53113
54114 grpcServer := grpc .NewServer ()
55115 plugins .RegisterCorrelationServer (grpcServer , & socAiServer {})
56116
57- utils .Logger .LogF (100 , "Server started successfully" )
58- if err := grpcServer .Serve (listener ); err != nil {
59- utils .Logger .ErrorF ("cannot serve grpc: %v" , err )
60- _ = catcher .Error ("cannot serve grpc" , err , nil )
61- os .Exit (1 )
117+ // Serve with error handling and retry logic
118+ retryDelay = 2 * time .Second
119+ for retry := 0 ; retry < maxRetries ; retry ++ {
120+ err := grpcServer .Serve (listener )
121+ if err == nil {
122+ break
123+ }
124+
125+ _ = catcher .Error ("cannot serve grpc, retrying" , err , map [string ]any {
126+ "retry" : retry + 1 ,
127+ "maxRetries" : maxRetries ,
128+ })
129+
130+ if retry < maxRetries - 1 {
131+ time .Sleep (retryDelay )
132+ // Increase delay for next retry
133+ retryDelay *= 2
134+ } else {
135+ // If all retries failed, log the error and return
136+ _ = catcher .Error ("all retries failed when listening to unix socket" , err , nil )
137+ return
138+ }
62139 }
63140}
64141
0 commit comments