@@ -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 {}
@@ -516,6 +519,11 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
516
519
}
517
520
}
518
521
522
+ err = ns .DeviceCache .AddVolume (volumeID )
523
+ if err != nil {
524
+ klog .Warningf ("Error adding volume %s to cache: %v" , volumeID , err )
525
+ }
526
+
519
527
klog .V (4 ).Infof ("NodeStageVolume succeeded on %v to %s" , volumeID , stagingTargetPath )
520
528
return & csi.NodeStageVolumeResponse {}, nil
521
529
}
@@ -630,6 +638,9 @@ func (ns *GCENodeServer) NodeUnstageVolume(ctx context.Context, req *csi.NodeUns
630
638
return nil , status .Errorf (codes .DataLoss , "Failed to cleanup cache for volume %s: %v" , volumeID , err )
631
639
}
632
640
}
641
+
642
+ ns .DeviceCache .RemoveVolume (volumeID )
643
+
633
644
klog .V (4 ).Infof ("NodeUnstageVolume succeeded on %v from %s" , volumeID , stagingTargetPath )
634
645
return & csi.NodeUnstageVolumeResponse {}, nil
635
646
}
@@ -907,15 +918,7 @@ func (ns *GCENodeServer) GetVolumeLimits(ctx context.Context) (int64, error) {
907
918
}
908
919
909
920
func GetAttachLimitsOverrideFromNodeLabel (ctx context.Context , nodeName string ) (int64 , error ) {
910
- cfg , err := rest .InClusterConfig ()
911
- if err != nil {
912
- return 0 , err
913
- }
914
- kubeClient , err := kubernetes .NewForConfig (cfg )
915
- if err != nil {
916
- return 0 , err
917
- }
918
- node , err := getNodeWithRetry (ctx , kubeClient , nodeName )
921
+ node , err := k8sclient .GetNodeWithRetry (ctx , nodeName )
919
922
if err != nil {
920
923
return 0 , err
921
924
}
0 commit comments