From 59f0a99909db5aa2b6dab81a3debad4e449bfd63 Mon Sep 17 00:00:00 2001 From: Jonathan Basseri Date: Wed, 24 Jan 2018 17:02:12 -0800 Subject: [PATCH] Fix equiv. cache invalidation of Node condition. Equivalence cache for CheckNodeConditionPred becomes invalid when Node.Spec.Unschedulable changes. This can happen even if Node.Status.Conditions does not change, so move the logic around. This logic is covered by integration test "test/integration/scheduler".TestUnschedulableNodes but equivalence cache is currently skipped when test pods have no OwnerReference. --- pkg/scheduler/factory/factory.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/scheduler/factory/factory.go b/pkg/scheduler/factory/factory.go index c9426297b9c..dfc5d6c3db8 100644 --- a/pkg/scheduler/factory/factory.go +++ b/pkg/scheduler/factory/factory.go @@ -781,11 +781,13 @@ func (c *configFactory) invalidateCachedPredicatesOnNodeUpdate(newNode *v1.Node, } if oldConditions[v1.NodeReady] != newConditions[v1.NodeReady] || oldConditions[v1.NodeOutOfDisk] != newConditions[v1.NodeOutOfDisk] || - oldConditions[v1.NodeNetworkUnavailable] != newConditions[v1.NodeNetworkUnavailable] || - newNode.Spec.Unschedulable != oldNode.Spec.Unschedulable { + oldConditions[v1.NodeNetworkUnavailable] != newConditions[v1.NodeNetworkUnavailable] { invalidPredicates.Insert("CheckNodeCondition") } } + if newNode.Spec.Unschedulable != oldNode.Spec.Unschedulable { + invalidPredicates.Insert("CheckNodeCondition") + } c.equivalencePodCache.InvalidateCachedPredicateItem(newNode.GetName(), invalidPredicates) } }