@@ -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 {}
@@ -509,6 +512,11 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
509
512
}
510
513
}
511
514
515
+ err = ns .DeviceCache .AddVolume (volumeID )
516
+ if err != nil {
517
+ klog .Warningf ("Error adding volume %s to cache: %v" , volumeID , err )
518
+ }
519
+
512
520
klog .V (4 ).Infof ("NodeStageVolume succeeded on %v to %s" , volumeID , stagingTargetPath )
513
521
return & csi.NodeStageVolumeResponse {}, nil
514
522
}
@@ -622,6 +630,9 @@ func (ns *GCENodeServer) NodeUnstageVolume(ctx context.Context, req *csi.NodeUns
622
630
return nil , status .Errorf (codes .DataLoss , "Failed to cleanup cache for volume %s: %v" , volumeID , err )
623
631
}
624
632
}
633
+
634
+ ns .DeviceCache .RemoveVolume (volumeID )
635
+
625
636
klog .V (4 ).Infof ("NodeUnstageVolume succeeded on %v from %s" , volumeID , stagingTargetPath )
626
637
return & csi.NodeUnstageVolumeResponse {}, nil
627
638
}
@@ -899,15 +910,7 @@ func (ns *GCENodeServer) GetVolumeLimits(ctx context.Context) (int64, error) {
899
910
}
900
911
901
912
func GetAttachLimitsOverrideFromNodeLabel (ctx context.Context , nodeName string ) (int64 , error ) {
902
- cfg , err := rest .InClusterConfig ()
903
- if err != nil {
904
- return 0 , err
905
- }
906
- kubeClient , err := kubernetes .NewForConfig (cfg )
907
- if err != nil {
908
- return 0 , err
909
- }
910
- node , err := getNodeWithRetry (ctx , kubeClient , nodeName )
913
+ node , err := k8sclient .GetNodeWithRetry (ctx , nodeName )
911
914
if err != nil {
912
915
return 0 , err
913
916
}
0 commit comments