Skip to content

Commit 9aeaa8b

Browse files
committed
bugfix: Process recursive changes in the right order
1 parent 199c9e4 commit 9aeaa8b

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

internal/app/engine/engine.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func (e *Engine) processChanges() {
214214
if !ok {
215215
return
216216
}
217-
e.processChange(change)
217+
e.processChangeList([]*statemachine.Change{change})
218218
case <-e.tickChanProvider():
219219
e.processTick()
220220
}
@@ -232,12 +232,22 @@ func (e *Engine) ResetMatch() {
232232
}
233233
}
234234

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) {
236247
e.mutex.Lock()
237248
defer e.mutex.Unlock()
238249
log.Printf("Engine: Process change '%v'", change.StringJson())
239250

240-
var newChanges []*statemachine.Change
241251
entry := statemachine.StateChange{}
242252
entry.Change = change
243253
entry.StatePre = new(state.State)
@@ -279,11 +289,6 @@ func (e *Engine) processChange(change *statemachine.Change) {
279289

280290
e.postProcessChange(entry)
281291

282-
log.Printf("Enqueue %d new changes", len(newChanges))
283-
for _, newChange := range newChanges {
284-
e.queue <- newChange
285-
}
286-
287292
log.Println("Add entry to state store")
288293
if err := e.stateStore.Add(&entry); err != nil {
289294
log.Println("Could not add new state to store: ", err)
@@ -299,7 +304,9 @@ func (e *Engine) processChange(change *statemachine.Change) {
299304
}
300305
}
301306

307+
log.Printf("Change produced %d new changes", len(newChanges))
302308
log.Printf("Change '%v' processed", change.StringJson())
309+
return
303310
}
304311

305312
// initialStateFromStore gets the current state or returns a new default state

0 commit comments

Comments
 (0)