77 "io"
88 "net"
99 "os"
10+ "time"
1011
1112 "google.golang.org/grpc"
1213)
@@ -16,35 +17,103 @@ type analysisServer struct {
1617}
1718
1819func main () {
19- filePath , err := utils .MkdirJoin (plugins .WorkDir , "sockets" )
20- if err != nil {
21- _ = catcher .Error ("cannot create socket directory" , err , nil )
22- os .Exit (1 )
20+ // Retry logic for initialization
21+ maxRetries := 3
22+ retryDelay := 2 * time .Second
23+
24+ // Initialize with retry logic instead of exiting
25+ var filePath utils.Folder
26+ var err error
27+ var socketPath string
28+ var unixAddress * net.UnixAddr
29+ var listener * net.UnixListener
30+
31+ // Retry loop for creating socket directory
32+ for retry := 0 ; retry < maxRetries ; retry ++ {
33+ filePath , err = utils .MkdirJoin (plugins .WorkDir , "sockets" )
34+ if err == nil {
35+ break
36+ }
37+
38+ _ = catcher .Error ("cannot create socket directory, retrying" , err , map [string ]any {
39+ "retry" : retry + 1 ,
40+ "maxRetries" : maxRetries ,
41+ })
42+
43+ if retry < maxRetries - 1 {
44+ time .Sleep (retryDelay )
45+ // Increase delay for next retry
46+ retryDelay *= 2
47+ } else {
48+ // If all retries failed, log the error and return
49+ _ = catcher .Error ("all retries failed when creating socket directory" , err , nil )
50+ return
51+ }
2352 }
2453
25- socketPath : = filePath .FileJoin ("com.utmstack.events_analysis.sock" )
54+ socketPath = filePath .FileJoin ("com.utmstack.events_analysis.sock" )
2655 _ = os .Remove (socketPath )
2756
28- unixAddress , err := net .ResolveUnixAddr ("unix" , socketPath )
29- if err != nil {
30- _ = catcher .Error ("cannot resolve unix address" , err , nil )
31- os .Exit (1 )
57+ // Retry loop for resolving unix address
58+ retryDelay = 2 * time .Second
59+ for retry := 0 ; retry < maxRetries ; retry ++ {
60+ unixAddress , err = net .ResolveUnixAddr ("unix" , socketPath )
61+ if err == nil {
62+ break
63+ }
64+
65+ _ = catcher .Error ("cannot resolve unix address, retrying" , err , map [string ]any {
66+ "retry" : retry + 1 ,
67+ "maxRetries" : maxRetries ,
68+ })
69+
70+ if retry < maxRetries - 1 {
71+ time .Sleep (retryDelay )
72+ // Increase delay for next retry
73+ retryDelay *= 2
74+ } else {
75+ // If all retries failed, log the error and return
76+ _ = catcher .Error ("all retries failed when resolving unix address" , err , nil )
77+ return
78+ }
3279 }
3380
3481 startQueue ()
3582
36- listener , err := net .ListenUnix ("unix" , unixAddress )
37- if err != nil {
38- _ = catcher .Error ("cannot listen to unix socket" , err , nil )
39- os .Exit (1 )
83+ // Retry loop for listening to unix socket
84+ retryDelay = 2 * time .Second
85+ for retry := 0 ; retry < maxRetries ; retry ++ {
86+ listener , err = net .ListenUnix ("unix" , unixAddress )
87+ if err == nil {
88+ break
89+ }
90+
91+ _ = catcher .Error ("cannot listen to unix socket, retrying" , err , map [string ]any {
92+ "retry" : retry + 1 ,
93+ "maxRetries" : maxRetries ,
94+ })
95+
96+ if retry < maxRetries - 1 {
97+ time .Sleep (retryDelay )
98+ // Increase delay for next retry
99+ retryDelay *= 2
100+ } else {
101+ // If all retries failed, log the error and return
102+ _ = catcher .Error ("all retries failed when listening to unix socket" , err , nil )
103+ return
104+ }
40105 }
41106
42107 grpcServer := grpc .NewServer ()
43108 plugins .RegisterAnalysisServer (grpcServer , & analysisServer {})
44109
110+ // Serve with error handling
45111 if err := grpcServer .Serve (listener ); err != nil {
46112 _ = catcher .Error ("cannot serve grpc" , err , nil )
47- os .Exit (1 )
113+ // Instead of exiting, restart the main function
114+ time .Sleep (5 * time .Second )
115+ go main ()
116+ return
48117 }
49118}
50119
0 commit comments