@@ -214,7 +214,7 @@ func (e *Engine) processChanges() {
214
214
if ! ok {
215
215
return
216
216
}
217
- e .processChange ( change )
217
+ e .processChangeList ([] * statemachine. Change { change } )
218
218
case <- e .tickChanProvider ():
219
219
e .processTick ()
220
220
}
@@ -232,12 +232,22 @@ func (e *Engine) ResetMatch() {
232
232
}
233
233
}
234
234
235
- func (e * Engine ) processChange (change * statemachine.Change ) {
235
+ func (e * Engine ) processChangeList (changes []* statemachine.Change ) {
236
+ var newChanges []* statemachine.Change
237
+ for _ , change := range changes {
238
+ newChanges = append (newChanges , e .processChange (change )... )
239
+ }
240
+ if len (newChanges ) > 0 {
241
+ e .processChangeList (newChanges )
242
+ }
243
+ return
244
+ }
245
+
246
+ func (e * Engine ) processChange (change * statemachine.Change ) (newChanges []* statemachine.Change ) {
236
247
e .mutex .Lock ()
237
248
defer e .mutex .Unlock ()
238
249
log .Printf ("Engine: Process change '%v'" , change .StringJson ())
239
250
240
- var newChanges []* statemachine.Change
241
251
entry := statemachine.StateChange {}
242
252
entry .Change = change
243
253
entry .StatePre = new (state.State )
@@ -279,11 +289,6 @@ func (e *Engine) processChange(change *statemachine.Change) {
279
289
280
290
e .postProcessChange (entry )
281
291
282
- log .Printf ("Enqueue %d new changes" , len (newChanges ))
283
- for _ , newChange := range newChanges {
284
- e .queue <- newChange
285
- }
286
-
287
292
log .Println ("Add entry to state store" )
288
293
if err := e .stateStore .Add (& entry ); err != nil {
289
294
log .Println ("Could not add new state to store: " , err )
@@ -299,7 +304,9 @@ func (e *Engine) processChange(change *statemachine.Change) {
299
304
}
300
305
}
301
306
307
+ log .Printf ("Change produced %d new changes" , len (newChanges ))
302
308
log .Printf ("Change '%v' processed" , change .StringJson ())
309
+ return
303
310
}
304
311
305
312
// initialStateFromStore gets the current state or returns a new default state
0 commit comments