@@ -17,6 +17,7 @@ package db
1717import (
1818 "bufio"
1919 "encoding/json"
20+ "fmt"
2021 "os"
2122 "regexp"
2223 "strconv"
@@ -100,7 +101,18 @@ func getFdb() fdb.Database {
100101 return db
101102}
102103
103- func GetStatus () (* models.FullStatus , error ) {
104+ func IsStatusIncomplete (status * models.FullStatus ) bool {
105+ if status .Cluster == nil ||
106+ status .Cluster .DatabaseLockState == nil ||
107+ status .Cluster .FaultTolerance == nil ||
108+ status .Cluster .Data == nil ||
109+ status .Cluster .DatabaseAvailable == false {
110+ return true
111+ }
112+ return false
113+ }
114+
115+ func getStatusOnce () (* models.FullStatus , error ) {
104116 start := time .Now ()
105117 conn := getFdb ()
106118 var status models.FullStatus
@@ -122,11 +134,7 @@ func GetStatus() (*models.FullStatus, error) {
122134 }
123135
124136 if os .Getenv ("DEBUG_LOG_INCOMPLETE_STATUS" ) == "true" {
125- if status .Cluster == nil ||
126- status .Cluster .DatabaseLockState == nil ||
127- status .Cluster .FaultTolerance == nil ||
128- status .Cluster .Data == nil ||
129- status .Cluster .DatabaseAvailable == false {
137+ if IsStatusIncomplete (& status ) {
130138 statusString := string (statusJson .([]byte ))
131139 log .Debug ().Str ("status_json" , statusString ).Msg ("status json is missing cluster fields" )
132140
@@ -135,13 +143,25 @@ func GetStatus() (*models.FullStatus, error) {
135143 Dur ("took" , d ).
136144 Str ("status_json" , statusString ).
137145 Msg ("status json is missing cluster fields" )
138-
146+ return nil , fmt . Errorf ( "incomplete status" )
139147 }
140148 }
141-
142149 return & status , nil
143150}
144151
152+ func GetStatus () (* models.FullStatus , error ) {
153+ status , err := getStatusOnce ()
154+ if err != nil {
155+ log .Error ().Msg ("failed to get status, retrying" )
156+ time .Sleep (1 * time .Second )
157+ status , err = getStatusOnce ()
158+ if err != nil {
159+ log .Error ().Msg ("failed to get status, retry failed" )
160+ }
161+ }
162+ return status , err
163+ }
164+
145165func isTLSmode (c * string ) bool {
146166 // Find if must run in TLS mode
147167 file , err := os .Open (* c )
0 commit comments