From 874d48f88e9ae2279e28df86a0312dc5385bf79c Mon Sep 17 00:00:00 2001 From: Manuel Kieweg <manuel.kieweg@h-da.de> Date: Sat, 10 Jul 2021 15:26:08 +0000 Subject: [PATCH] move ticker creation to commit --- nucleus/change.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/nucleus/change.go b/nucleus/change.go index 3fd4d7c0c..f64a99eab 100644 --- a/nucleus/change.go +++ b/nucleus/change.go @@ -117,26 +117,27 @@ func stateManager(ch *Change, timeout time.Duration) (chan<- ppb.Change_State, < stateOut := make(chan ppb.Change_State) stateRequest := make(chan bool) errChan := make(chan error) - ticker := time.NewTicker(timeout) + // create ticker and make it wait for 1 week + // workaround for delayed ticker start and ugly housekeeping + ticker := time.NewTicker(time.Hour * 7 * 24) go func() { state := ppb.Change_PENDING for { select { case <-ticker.C: - // only roll back committed changes - if state == ppb.Change_COMMITTED { - err := ch.callback(ch.intendedState, ch.previousState) - if err != nil { - state = ppb.Change_INCONSISTENT - errChan <- err - } - errChan <- fmt.Errorf("change %v timed out", ch.cuid) - break + err := ch.callback(ch.intendedState, ch.previousState) + if err != nil { + state = ppb.Change_INCONSISTENT + errChan <- err } + errChan <- fmt.Errorf("change %v timed out", ch.cuid) + break case s := <-stateIn: switch s { case ppb.Change_COMMITTED: + // reset ticker to enable activate the change timeout + ticker.Reset(timeout) err := ch.callback(ch.previousState, ch.intendedState) if err != nil { state = ppb.Change_INCONSISTENT -- GitLab