From 9608c63711181bff3a33c71f763aedde2d3596ec Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Thu, 5 Oct 2017 10:27:38 -0400 Subject: [PATCH] Don't filter nodes if logdriver==none The "none" driver is a special keyword to disable logging, so don't filter nodes if the "none" driver is not listed on the nodes, since it's not really a driver and doesn't exist. Signed-off-by: Brian Goff --- manager/scheduler/filter.go | 2 +- manager/scheduler/scheduler_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/manager/scheduler/filter.go b/manager/scheduler/filter.go index 36b601c4b4..3b1c73fe2d 100644 --- a/manager/scheduler/filter.go +++ b/manager/scheduler/filter.go @@ -169,7 +169,7 @@ func (f *PluginFilter) Check(n *NodeInfo) bool { } } - if f.t.Spec.LogDriver != nil { + if f.t.Spec.LogDriver != nil && f.t.Spec.LogDriver.Name != "none" { // If there are no log driver types in the list at all, most likely this is // an older daemon that did not report this information. In this case don't filter if typeFound, exists := f.pluginExistsOnNode("Log", f.t.Spec.LogDriver.Name, nodePlugins); !exists && typeFound { diff --git a/manager/scheduler/scheduler_test.go b/manager/scheduler/scheduler_test.go index d264167de8..5a994e9276 100644 --- a/manager/scheduler/scheduler_test.go +++ b/manager/scheduler/scheduler_test.go @@ -2565,6 +2565,24 @@ func TestSchedulerPluginConstraint(t *testing.T) { }, } + // no logging + t6 := &api.Task{ + ID: "task6_ID", + DesiredState: api.TaskStateRunning, + Spec: api.TaskSpec{ + Runtime: &api.TaskSpec_Container{ + Container: &api.ContainerSpec{}, + }, + LogDriver: &api.Driver{Name: "none"}, + }, + ServiceAnnotations: api.Annotations{ + Name: "task6", + }, + Status: api.TaskStatus{ + State: api.TaskStatePending, + }, + } + s := store.NewMemoryStore(nil) assert.NotNil(t, s) defer s.Close() @@ -2668,6 +2686,15 @@ func TestSchedulerPluginConstraint(t *testing.T) { assignment4 := watchAssignment(t, watch) assert.Equal(t, assignment4.ID, "task5_ID") assert.Equal(t, assignment4.NodeID, "node4_ID") + + err = s.Update(func(tx store.Tx) error { + assert.NoError(t, store.CreateTask(tx, t6)) + return nil + }) + assert.NoError(t, err) + assignment5 := watchAssignment(t, watch) + assert.Equal(t, assignment5.ID, "task6_ID") + assert.NotEqual(t, assignment5.NodeID, "") } func BenchmarkScheduler1kNodes1kTasks(b *testing.B) {