@@ -102,7 +102,10 @@ func newComponentState(comp *component.Component) (s ComponentState) {
102
102
s .expectedFeaturesIdx = 1
103
103
s .expectedComponentIdx = 1
104
104
105
- s .syncComponent (comp )
105
+ // Merge initial component state.
106
+ s .syncExpected (comp )
107
+ s .syncUnits (comp )
108
+
106
109
return s
107
110
}
108
111
@@ -131,15 +134,6 @@ func (s *ComponentState) Copy() (c ComponentState) {
131
134
return c
132
135
}
133
136
134
- func (s * ComponentState ) syncComponent (comp * component.Component ) bool {
135
- changed := s .syncExpected (comp )
136
- s .syncUnits (comp )
137
- if changed {
138
- return true
139
- }
140
- return s .unsettled ()
141
- }
142
-
143
137
func (s * ComponentState ) syncExpected (comp * component.Component ) bool {
144
138
changed := false
145
139
touched := make (map [ComponentUnitKey ]bool )
@@ -151,34 +145,34 @@ func (s *ComponentState) syncExpected(comp *component.Component) bool {
151
145
}
152
146
153
147
touched [key ] = true
154
- existing , ok := s .expectedUnits [key ]
148
+ expected , ok := s .expectedUnits [key ]
155
149
if ok {
156
- if existing .logLevel != unit .LogLevel {
157
- existing .logLevel = unit .LogLevel
150
+ if expected .logLevel != unit .LogLevel {
151
+ expected .logLevel = unit .LogLevel
158
152
changed = true
159
153
}
160
- if ! gproto .Equal (existing .config , unit .Config ) {
161
- existing .config = unit .Config
162
- existing .configStateIdx ++
154
+ if ! gproto .Equal (expected .config , unit .Config ) {
155
+ expected .config = unit .Config
156
+ expected .configStateIdx ++
163
157
changed = true
164
158
}
165
159
} else {
166
- existing .state = client .UnitStateHealthy
167
- existing .logLevel = unit .LogLevel
168
- existing .config = unit .Config
169
- existing .configStateIdx = 1
160
+ expected .state = client .UnitStateHealthy
161
+ expected .logLevel = unit .LogLevel
162
+ expected .config = unit .Config
163
+ expected .configStateIdx = 1
170
164
changed = true
171
165
}
172
166
173
- if ! errors .Is (existing .err , unit .Err ) {
174
- existing .err = unit .Err
175
- if existing .err != nil {
176
- existing .state = client .UnitStateFailed
167
+ if ! errors .Is (expected .err , unit .Err ) {
168
+ expected .err = unit .Err
169
+ if expected .err != nil {
170
+ expected .state = client .UnitStateFailed
177
171
}
178
172
changed = true
179
173
}
180
174
181
- s .expectedUnits [key ] = existing
175
+ s .expectedUnits [key ] = expected
182
176
}
183
177
184
178
for key , unit := range s .expectedUnits {
@@ -320,27 +314,28 @@ func (s *ComponentState) syncCheckin(checkin *proto.CheckinObserved) bool {
320
314
}
321
315
322
316
for key , unit := range s .Units {
323
- _ , ok := touched [key ]
324
- if ! ok {
325
- unit .unitState = client .UnitStateStarting
326
- unit .unitMessage = ""
327
- unit .unitPayload = nil
328
- unit .configStateIdx = 0
329
- if unit .err != nil {
330
- errMsg := unit .err .Error ()
331
- if unit .State != client .UnitStateFailed || unit .Message != errMsg || diffPayload (unit .Payload , nil ) {
332
- changed = true
333
- unit .State = client .UnitStateFailed
334
- unit .Message = errMsg
335
- unit .Payload = nil
336
- }
337
- } else if unit .State != client .UnitStateStarting && unit .State != client .UnitStateStopped {
338
- if unit .State != client .UnitStateFailed || unit .Message != missingMsg || diffPayload (unit .Payload , nil ) {
339
- changed = true
340
- unit .State = client .UnitStateFailed
341
- unit .Message = missingMsg
342
- unit .Payload = nil
343
- }
317
+ // Look for units that weren't in the checkin.
318
+ if _ , ok := touched [key ]; ok {
319
+ continue
320
+ }
321
+ unit .unitState = client .UnitStateStarting
322
+ unit .unitMessage = ""
323
+ unit .unitPayload = nil
324
+ unit .configStateIdx = 0
325
+ if unit .err != nil {
326
+ errMsg := unit .err .Error ()
327
+ if unit .State != client .UnitStateFailed || unit .Message != errMsg || diffPayload (unit .Payload , nil ) {
328
+ changed = true
329
+ unit .State = client .UnitStateFailed
330
+ unit .Message = errMsg
331
+ unit .Payload = nil
332
+ }
333
+ } else if unit .State != client .UnitStateStarting && unit .State != client .UnitStateStopped {
334
+ if unit .State != client .UnitStateFailed || unit .Message != missingMsg || diffPayload (unit .Payload , nil ) {
335
+ changed = true
336
+ unit .State = client .UnitStateFailed
337
+ unit .Message = missingMsg
338
+ unit .Payload = nil
344
339
}
345
340
}
346
341
0 commit comments