@@ -32,14 +32,14 @@ import (
32
32
33
33
csi "github.com/container-storage-interface/spec/lib/go/csi"
34
34
35
- "k8s.io/client-go/kubernetes"
36
- "k8s.io/client-go/rest"
37
35
"k8s.io/klog/v2"
38
36
"k8s.io/mount-utils"
39
37
40
38
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
41
39
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
42
40
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
41
+ "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/k8sclient"
42
+ "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/linkcache"
43
43
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/metrics"
44
44
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
45
45
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs"
@@ -80,6 +80,8 @@ type GCENodeServer struct {
80
80
csi.UnimplementedNodeServer
81
81
82
82
metricsManager * metrics.MetricsManager
83
+ // A cache of the device paths for the volumes that are attached to the node.
84
+ DeviceCache * linkcache.DeviceCache
83
85
}
84
86
85
87
type NodeServerArgs struct {
@@ -97,6 +99,7 @@ type NodeServerArgs struct {
97
99
SysfsPath string
98
100
99
101
MetricsManager * metrics.MetricsManager
102
+ DeviceCache * linkcache.DeviceCache
100
103
}
101
104
102
105
var _ csi.NodeServer = & GCENodeServer {}
@@ -534,6 +537,11 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
534
537
}
535
538
}
536
539
540
+ err = ns .DeviceCache .AddVolume (volumeID )
541
+ if err != nil {
542
+ klog .Warningf ("Error adding volume %s to cache: %v" , volumeID , err )
543
+ }
544
+
537
545
klog .V (4 ).Infof ("NodeStageVolume succeeded on %v to %s" , volumeID , stagingTargetPath )
538
546
return & csi.NodeStageVolumeResponse {}, nil
539
547
}
@@ -652,6 +660,9 @@ func (ns *GCENodeServer) NodeUnstageVolume(ctx context.Context, req *csi.NodeUns
652
660
return nil , status .Errorf (codes .DataLoss , "Failed to cleanup cache for volume %s: %v" , volumeID , err )
653
661
}
654
662
}
663
+
664
+ ns .DeviceCache .RemoveVolume (volumeID )
665
+
655
666
klog .V (4 ).Infof ("NodeUnstageVolume succeeded on %v from %s" , volumeID , stagingTargetPath )
656
667
return & csi.NodeUnstageVolumeResponse {}, nil
657
668
}
@@ -929,15 +940,7 @@ func (ns *GCENodeServer) GetVolumeLimits(ctx context.Context) (int64, error) {
929
940
}
930
941
931
942
func GetAttachLimitsOverrideFromNodeLabel (ctx context.Context , nodeName string ) (int64 , error ) {
932
- cfg , err := rest .InClusterConfig ()
933
- if err != nil {
934
- return 0 , err
935
- }
936
- kubeClient , err := kubernetes .NewForConfig (cfg )
937
- if err != nil {
938
- return 0 , err
939
- }
940
- node , err := getNodeWithRetry (ctx , kubeClient , nodeName )
943
+ node , err := k8sclient .GetNodeWithRetry (ctx , nodeName )
941
944
if err != nil {
942
945
return 0 , err
943
946
}
0 commit comments