From f3e8eda04dfb9b88ed9624e57dbbe9435e7e923e Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Mon, 24 Sep 2018 14:40:47 +0200 Subject: [PATCH] fixup 4e04f8d3d22f497f098977b199cfffa26ec3a7a6: snapper with separate stopped state for clean shutdown would tight loop in ErrorWait --- daemon/snapper/snapper.go | 13 +++++++++++-- daemon/snapper/state_string.go | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/daemon/snapper/snapper.go b/daemon/snapper/snapper.go index 8a6d811..bfaeb47 100644 --- a/daemon/snapper/snapper.go +++ b/daemon/snapper/snapper.go @@ -75,6 +75,7 @@ const ( Snapshotting Waiting ErrorWait + Stopped ) func (s State) sf() state { @@ -84,6 +85,7 @@ func (s State) sf() state { Snapshotting: snapshot, Waiting: wait, ErrorWait: wait, + Stopped: nil, } return m[s] } @@ -167,6 +169,13 @@ func onErr(err error, u updater) state { }).sf() } +func onMainCtxDone(ctx context.Context, u updater) state { + return u(func(s *Snapper) { + s.err = ctx.Err() + s.state = Stopped + }).sf() +} + func syncUp(a args, u updater) state { fss, err := listFSes(a.fsf) if err != nil { @@ -187,7 +196,7 @@ func syncUp(a args, u updater) state { s.state = Planning }).sf() case <-a.ctx.Done(): - return onErr(err, u) + return onMainCtxDone(a.ctx, u) } } @@ -286,7 +295,7 @@ func wait(a args, u updater) state { snapper.state = Planning }).sf() case <-a.ctx.Done(): - return onErr(a.ctx.Err(), u) + return onMainCtxDone(a.ctx, u) } } diff --git a/daemon/snapper/state_string.go b/daemon/snapper/state_string.go index 136baf5..53796b0 100644 --- a/daemon/snapper/state_string.go +++ b/daemon/snapper/state_string.go @@ -9,6 +9,7 @@ const ( _State_name_1 = "Snapshotting" _State_name_2 = "Waiting" _State_name_3 = "ErrorWait" + _State_name_4 = "Stopped" ) var ( @@ -26,6 +27,8 @@ func (i State) String() string { return _State_name_2 case i == 16: return _State_name_3 + case i == 32: + return _State_name_4 default: return "State(" + strconv.FormatInt(int64(i), 10) + ")" }