@@ -78,7 +78,7 @@ func (s *stateInspector) Log(logger zerolog.Logger) {
7878 defer s .lock .Unlock ()
7979
8080 for m , s := range s .members {
81- if s . IsInvalid () {
81+ if ! s . IsReachable () {
8282 s .Log (logger .Info ()).Str ("member" , m ).Msgf ("Member is in invalid state" )
8383 }
8484 }
@@ -95,22 +95,9 @@ func (s *stateInspector) RefreshState(ctx context.Context, members api.Deploymen
9595
9696 members .ForEach (func (id int ) {
9797 if members [id ].Group .IsArangosync () {
98- return
99- }
100-
101- results [id ] = State {}
102-
103- c , err := s .client .GetServerClient (nctx , members [id ].Group , members [id ].Member .ID )
104- if err != nil {
105- results [id ].Reachable = err
106- return
107- }
108-
109- if v , err := c .Version (nctx ); err != nil {
110- results [id ].Reachable = err
111- return
98+ results [id ] = s .fetchArangosyncMemberState (nctx , members [id ])
11299 } else {
113- results [id ]. Version = v
100+ results [id ] = s . fetchServerMemberState ( nctx , members [ id ])
114101 }
115102 })
116103
@@ -122,11 +109,11 @@ func (s *stateInspector) RefreshState(ctx context.Context, members api.Deploymen
122109
123110 c , err := s .client .GetDatabaseClient (ctx )
124111 if err != nil {
125- cs .Reachable = err
112+ cs .NotReachableErr = err
126113 } else {
127114 v , err := c .Version (gctx )
128115 if err != nil {
129- cs .Reachable = err
116+ cs .NotReachableErr = err
130117 } else {
131118 cs .Version = v
132119 }
@@ -155,6 +142,46 @@ func (s *stateInspector) RefreshState(ctx context.Context, members api.Deploymen
155142 s .health = h
156143}
157144
145+ func (s * stateInspector ) fetchArangosyncMemberState (ctx context.Context , m api.DeploymentStatusMemberElement ) State {
146+ var state State
147+ c , err := s .client .GetSyncServerClient (ctx , m .Group , m .Member .ID )
148+ if err != nil {
149+ state .NotReachableErr = err
150+ return state
151+ }
152+
153+ if v , err := c .Version (ctx ); err != nil {
154+ state .NotReachableErr = err
155+ } else {
156+ // convert arangosync VersionInfo to go-driver VersionInfo for simplicity:
157+ state .Version = driver.VersionInfo {
158+ Server : m .Group .AsRole (),
159+ Version : driver .Version (v .Version ),
160+ License : GetImageLicense (m .Member .Image ),
161+ Details : map [string ]interface {}{
162+ "arangosync-build" : v .Build ,
163+ },
164+ }
165+ }
166+ return state
167+ }
168+
169+ func (s * stateInspector ) fetchServerMemberState (ctx context.Context , m api.DeploymentStatusMemberElement ) State {
170+ var state State
171+ c , err := s .client .GetServerClient (ctx , m .Group , m .Member .ID )
172+ if err != nil {
173+ state .NotReachableErr = err
174+ return state
175+ }
176+
177+ if v , err := c .Version (ctx ); err != nil {
178+ state .NotReachableErr = err
179+ } else {
180+ state .Version = v
181+ }
182+ return state
183+ }
184+
158185func (s * stateInspector ) MemberState (id string ) (State , bool ) {
159186 s .lock .Lock ()
160187 defer s .lock .Unlock ()
@@ -175,24 +202,15 @@ type Health struct {
175202}
176203
177204type State struct {
178- Reachable error
205+ NotReachableErr error
179206
180207 Version driver.VersionInfo
181208}
182209
183210func (s State ) IsReachable () bool {
184- return s .Reachable == nil
211+ return s .NotReachableErr == nil
185212}
186213
187214func (s State ) Log (event * zerolog.Event ) * zerolog.Event {
188- if ! s .IsReachable () {
189- event = event .Bool ("reachable" , false ).AnErr ("reachableError" , s .Reachable )
190- } else {
191- event = event .Bool ("reachable" , false )
192- }
193- return event
194- }
195-
196- func (s State ) IsInvalid () bool {
197- return ! s .IsReachable ()
215+ return event .Bool ("reachable" , s .IsReachable ()).AnErr ("reachableError" , s .NotReachableErr )
198216}
0 commit comments