@@ -27,12 +27,8 @@ import (
27
27
"strings"
28
28
"time"
29
29
30
- "k8s.io/client-go/kubernetes"
31
- "k8s.io/client-go/rest"
32
30
"k8s.io/klog/v2"
33
31
"k8s.io/utils/strings/slices"
34
-
35
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36
32
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
37
33
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
38
34
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
102
98
)
103
99
104
100
const (
105
- driverName = "pd.csi.storage.gke.io"
106
- dataCacheLabel = "datacache-storage-gke-io"
107
- dataCacheLabelValue = "enabled"
101
+ driverName = "pd.csi.storage.gke.io"
108
102
)
109
103
110
104
func init () {
@@ -350,29 +344,74 @@ func urlFlag(target **url.URL, name string, usage string) {
350
344
})
351
345
}
352
346
347
+ func fetchLssdsForRaiding (lssdCount int ) ([]string , error ) {
348
+ allLssds , err := driver .FetchAllLssds ()
349
+ if err != nil {
350
+ return nil , fmt .Errorf ("Error listing all LSSDs %v" , err )
351
+ }
352
+
353
+ raidedLssds , err := driver .FetchRaidedLssds ()
354
+ if err != nil {
355
+ return nil , fmt .Errorf ("Error listing RAIDed LSSDs %v" , err )
356
+ }
357
+
358
+ unRaidedLssds := []string {}
359
+ for _ , l := range allLssds {
360
+ if ! slices .Contains (raidedLssds , l ) {
361
+ unRaidedLssds = append (unRaidedLssds , l )
362
+ }
363
+ if len (unRaidedLssds ) == lssdCount {
364
+ break
365
+ }
366
+ }
367
+
368
+ LSSDsWithEmptyMountPoint , err := driver .FetchLSSDsWihtEmptyMountPoint ()
369
+ if err != nil {
370
+ return nil , fmt .Errorf ("Error listing LSSDs with empty mountpoint: %v" , err )
371
+ }
372
+
373
+ // We need to ensure the disks to be used for Datacache are both unRAIDed & not containing mountpoints for ephemeral storage already
374
+ availableLssds := slices .Filter (nil , unRaidedLssds , func (e string ) bool {
375
+ return slices .Contains (LSSDsWithEmptyMountPoint , e )
376
+ })
377
+
378
+ if len (availableLssds ) == 0 {
379
+ return nil , fmt .Errorf ("No LSSDs available to set up caching" )
380
+ }
381
+
382
+ if len (availableLssds ) < lssdCount {
383
+ return nil , fmt .Errorf ("Not enough LSSDs available to set up caching. Available LSSDs: %v, wanted LSSDs: %v" , len (availableLssds ), lssdCount )
384
+ }
385
+ return availableLssds , nil
386
+ }
387
+
353
388
func setupDataCache (ctx context.Context , nodeName string ) error {
354
- klog .V (2 ).Infof ("Setting up data cache for node %s" , nodeName )
389
+ isAlreadyRaided , err := driver .IsRaided ()
390
+ if err != nil {
391
+ klog .V (2 ).Infof ("Errored while scanning for available LocalSSDs err:%v; continuing Raiding" , err )
392
+ } else if isAlreadyRaided {
393
+ klog .V (2 ).Infof ("Local SSDs are already RAIDed. Skipping Datacache setup." )
394
+ return nil
395
+ }
396
+
397
+ lssdCount := common .LocalSSDCountForDataCache
355
398
if nodeName != common .TestNode {
356
- cfg , err := rest .InClusterConfig ()
357
- if err != nil {
358
- return err
359
- }
360
- kubeClient , err := kubernetes .NewForConfig (cfg )
361
- if err != nil {
362
- return err
399
+ var err error
400
+ lssdCount , err = driver .GetDataCacheCountFromNodeLabel (ctx , nodeName )
401
+ if lssdCount == 0 {
402
+ klog .Infof ("Datacache is not enabled on node %v" , nodeName )
403
+ return nil
363
404
}
364
- node , err := kubeClient .CoreV1 ().Nodes ().Get (ctx , nodeName , metav1.GetOptions {})
365
405
if err != nil {
366
- // We could retry, but this error will also crashloop the driver which may be as good a way to retry as any.
367
406
return err
368
407
}
369
- if val , found := node .GetLabels ()[dataCacheLabel ]; ! found || val != dataCacheLabelValue {
370
- klog .V (2 ).Infof ("Datacache not enabled for node %s; node label %s=%s and not %s" , nodeName , dataCacheLabel , val , dataCacheLabelValue )
371
- return nil
372
- }
373
408
}
374
- klog .V (2 ).Info ("Raiding local ssds to setup data cache" )
375
- if err := driver .RaidLocalSsds (); err != nil {
409
+ lssdNames , err := fetchLssdsForRaiding (lssdCount )
410
+ if err != nil {
411
+ klog .Fatalf ("Failed to get sufficient SSDs for Datacache's caching setup: %v" , err )
412
+ }
413
+ klog .V (2 ).Infof ("Raiding local ssds to setup data cache: %v" , lssdNames )
414
+ if err := driver .RaidLocalSsds (lssdNames ); err != nil {
376
415
return fmt .Errorf ("Failed to Raid local SSDs, unable to setup data caching, got error %v" , err )
377
416
}
378
417
0 commit comments