From 69e44ebf0754ab248ad81b2c5d271e695db2fe3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Fri, 30 Oct 2020 18:32:59 +0100 Subject: [PATCH] sched: re-register worker windows after re-enabling correctly --- extern/sector-storage/manager_test.go | 18 ++++++++++++++++++ extern/sector-storage/sched_worker.go | 15 +++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/extern/sector-storage/manager_test.go b/extern/sector-storage/manager_test.go index ff5561a644a..f69d62b17c0 100644 --- a/extern/sector-storage/manager_test.go +++ b/extern/sector-storage/manager_test.go @@ -409,6 +409,9 @@ func TestReenableWorker(t *testing.T) { time.Sleep(time.Millisecond * 100) + i, _ := m.sched.Info(ctx) + require.Len(t, i.(SchedDiagInfo).OpenWindows, 2) + // disable atomic.StoreInt64(&w.testDisable, 1) @@ -421,6 +424,9 @@ func TestReenableWorker(t *testing.T) { } require.False(t, m.WorkerStats()[w.session].Enabled) + i, _ = m.sched.Info(ctx) + require.Len(t, i.(SchedDiagInfo).OpenWindows, 0) + // reenable atomic.StoreInt64(&w.testDisable, 0) @@ -432,4 +438,16 @@ func TestReenableWorker(t *testing.T) { time.Sleep(time.Millisecond * 3) } require.True(t, m.WorkerStats()[w.session].Enabled) + + for i := 0; i < 100; i++ { + info, _ := m.sched.Info(ctx) + if len(info.(SchedDiagInfo).OpenWindows) != 0 { + break + } + + time.Sleep(time.Millisecond * 3) + } + + i, _ = m.sched.Info(ctx) + require.Len(t, i.(SchedDiagInfo).OpenWindows, 2) } diff --git a/extern/sector-storage/sched_worker.go b/extern/sector-storage/sched_worker.go index 450c7088ef3..e56e9056d56 100644 --- a/extern/sector-storage/sched_worker.go +++ b/extern/sector-storage/sched_worker.go @@ -125,10 +125,17 @@ func (sw *schedWorker) handleWorker() { } // session looks good - sched.workersLk.Lock() - worker.enabled = true - // we'll send window requests on the next loop - sched.workersLk.Unlock() + { + sched.workersLk.Lock() + enabled := worker.enabled + worker.enabled = true + sched.workersLk.Unlock() + + if !enabled { + // go send window requests + break + } + } // wait for more tasks to be assigned by the main scheduler or for the worker // to finish precessing a task