@@ -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 {}
@@ -507,6 +510,11 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
507
510
}
508
511
}
509
512
513
+ err = ns .DeviceCache .AddVolume (volumeID )
514
+ if err != nil {
515
+ klog .Warningf ("Error adding volume %s to cache: %v" , volumeID , err )
516
+ }
517
+
510
518
klog .V (4 ).Infof ("NodeStageVolume succeeded on %v to %s" , volumeID , stagingTargetPath )
511
519
return & csi.NodeStageVolumeResponse {}, nil
512
520
}
@@ -620,6 +628,9 @@ func (ns *GCENodeServer) NodeUnstageVolume(ctx context.Context, req *csi.NodeUns
620
628
return nil , status .Errorf (codes .DataLoss , "Failed to cleanup cache for volume %s: %v" , volumeID , err )
621
629
}
622
630
}
631
+
632
+ ns .DeviceCache .RemoveVolume (volumeID )
633
+
623
634
klog .V (4 ).Infof ("NodeUnstageVolume succeeded on %v from %s" , volumeID , stagingTargetPath )
624
635
return & csi.NodeUnstageVolumeResponse {}, nil
625
636
}
@@ -875,15 +886,7 @@ func (ns *GCENodeServer) GetVolumeLimits(ctx context.Context) (int64, error) {
875
886
}
876
887
877
888
func GetAttachLimitsOverrideFromNodeLabel (ctx context.Context , nodeName string ) (int64 , error ) {
878
- cfg , err := rest .InClusterConfig ()
879
- if err != nil {
880
- return 0 , err
881
- }
882
- kubeClient , err := kubernetes .NewForConfig (cfg )
883
- if err != nil {
884
- return 0 , err
885
- }
886
- node , err := getNodeWithRetry (ctx , kubeClient , nodeName )
889
+ node , err := k8sclient .GetNodeWithRetry (ctx , nodeName )
887
890
if err != nil {
888
891
return 0 , err
889
892
}
0 commit comments