From fcf89f66a9edaa505b9774ccb8f254e1f41f090c Mon Sep 17 00:00:00 2001 From: Maxim Patlasov Date: Thu, 15 Dec 2022 19:26:10 -0800 Subject: [PATCH] Fix installDriverToCSINode(): we should not skip CSINode update if Allocatable.Count changed --- pkg/volume/csi/nodeinfomanager/nodeinfomanager.go | 12 +++++++++++- .../csi/nodeinfomanager/nodeinfomanager_test.go | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go b/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go index 50b0bdc2235..9a77fb71566 100644 --- a/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go +++ b/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go @@ -505,6 +505,15 @@ func setMigrationAnnotation(migratedPlugins map[string](func() bool), nodeInfo * return true } +// Returns true if and only if new maxAttachLimit doesn't require CSINode update +func keepAllocatableCount(driverInfoSpec storagev1.CSINodeDriver, maxAttachLimit int64) bool { + if maxAttachLimit == 0 { + return driverInfoSpec.Allocatable == nil || driverInfoSpec.Allocatable.Count == nil + } + + return driverInfoSpec.Allocatable != nil && driverInfoSpec.Allocatable.Count != nil && int64(*driverInfoSpec.Allocatable.Count) == maxAttachLimit +} + func (nim *nodeInfoManager) installDriverToCSINode( nodeInfo *storagev1.CSINode, driverName string, @@ -528,7 +537,8 @@ func (nim *nodeInfoManager) installDriverToCSINode( for _, driverInfoSpec := range nodeInfo.Spec.Drivers { if driverInfoSpec.Name == driverName { if driverInfoSpec.NodeID == driverNodeID && - sets.NewString(driverInfoSpec.TopologyKeys...).Equal(topologyKeys) { + sets.NewString(driverInfoSpec.TopologyKeys...).Equal(topologyKeys) && + keepAllocatableCount(driverInfoSpec, maxAttachLimit) { specModified = false } } else { diff --git a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go index 4961adf40b1..60b4e8c6f69 100644 --- a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go +++ b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go @@ -593,7 +593,7 @@ func TestInstallCSIDriver(t *testing.T) { Name: "com.example.csi.driver1", NodeID: "com.example.csi/csi-node1", TopologyKeys: nil, - Allocatable: generateVolumeLimits(10), + Allocatable: generateVolumeLimits(20), }, }, },