X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/91b39ff3fbba69e54a330a7949c9ed4bbb3117ff..514fb685c9d835441e0911d9b9499952b6787095:/lib/dispatchcloud/scheduler/run_queue_test.go diff --git a/lib/dispatchcloud/scheduler/run_queue_test.go b/lib/dispatchcloud/scheduler/run_queue_test.go index 4296a1364c..c683b704d4 100644 --- a/lib/dispatchcloud/scheduler/run_queue_test.go +++ b/lib/dispatchcloud/scheduler/run_queue_test.go @@ -77,10 +77,13 @@ func (p *stubPool) Create(it arvados.InstanceType) bool { p.unalloc[it]++ return true } -func (p *stubPool) KillContainer(uuid string) { +func (p *stubPool) ForgetContainer(uuid string) { +} +func (p *stubPool) KillContainer(uuid, reason string) bool { p.Lock() defer p.Unlock() delete(p.running, uuid) + return true } func (p *stubPool) Shutdown(arvados.InstanceType) bool { p.shutdowns++ @@ -335,3 +338,40 @@ func (*SchedulerSuite) TestStartWhileCreating(c *check.C) { } c.Check(running, check.DeepEquals, map[string]bool{uuids[3]: false, uuids[6]: false}) } + +func (*SchedulerSuite) TestKillNonexistentContainer(c *check.C) { + ctx := ctxlog.Context(context.Background(), ctxlog.TestLogger(c)) + pool := stubPool{ + unalloc: map[arvados.InstanceType]int{ + test.InstanceType(2): 0, + }, + idle: map[arvados.InstanceType]int{ + test.InstanceType(2): 0, + }, + running: map[string]time.Time{ + test.ContainerUUID(2): time.Time{}, + }, + } + queue := test.Queue{ + ChooseType: chooseType, + Containers: []arvados.Container{ + { + // create a new worker + UUID: test.ContainerUUID(1), + Priority: 1, + State: arvados.ContainerStateLocked, + RuntimeConstraints: arvados.RuntimeConstraints{ + VCPUs: 1, + RAM: 1 << 30, + }, + }, + }, + } + queue.Update() + sch := New(ctx, &queue, &pool, time.Millisecond, time.Millisecond) + c.Check(pool.running, check.HasLen, 1) + sch.sync() + for deadline := time.Now().Add(time.Second); len(pool.Running()) > 0 && time.Now().Before(deadline); time.Sleep(time.Millisecond) { + } + c.Check(pool.Running(), check.HasLen, 0) +}