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