@@ -343,17 +343,38 @@ func (r *ReclaimSpaceJobReconciler) getTargetDetails(
343
343
return & details , nil
344
344
}
345
345
346
- // getRSClientWithCap returns ReclaimSpaceClient given driverName, nodeID and capabilityType.
347
- func (r * ReclaimSpaceJobReconciler ) getRSClientWithCap (
348
- driverName , nodeID string ,
349
- capType identity.Capability_ReclaimSpace_Type ) (string , proto.ReclaimSpaceClient ) {
346
+ // getLeadingRSClient returns ReclaimSpaceClient that holds the lease given driverName.
347
+ func (r * ReclaimSpaceJobReconciler ) getLeadingRSClient (
348
+ ctx context.Context ,
349
+ client client.Client ,
350
+ driverName string ) (proto.ReclaimSpaceClient , error ) {
351
+ conn , err := r .ConnPool .GetLeaderByDriver (ctx , r .Client , driverName )
352
+ if err != nil {
353
+ return nil , err
354
+ }
355
+
356
+ for _ , cap := range conn .Capabilities {
357
+ if cap .GetReclaimSpace () == nil {
358
+ continue
359
+ }
360
+ if cap .GetReclaimSpace ().Type == identity .Capability_ReclaimSpace_OFFLINE {
361
+ return proto .NewReclaimSpaceClient (conn .Client ), nil
362
+ }
363
+ }
364
+
365
+ return nil , fmt .Errorf ("leading controller for driver %q does not support ReclaimSpace_OFFLINE" , driverName )
366
+ }
367
+
368
+ // getRSClientByNode returns ReclaimSpaceClient given driverName and nodeID.
369
+ func (r * ReclaimSpaceJobReconciler ) getRSClientByNode (
370
+ driverName , nodeID string ) (string , proto.ReclaimSpaceClient ) {
350
371
conns := r .ConnPool .GetByNodeID (driverName , nodeID )
351
372
for k , v := range conns {
352
373
for _ , cap := range v .Capabilities {
353
374
if cap .GetReclaimSpace () == nil {
354
375
continue
355
376
}
356
- if cap .GetReclaimSpace ().Type == capType {
377
+ if cap .GetReclaimSpace ().Type == identity . Capability_ReclaimSpace_ONLINE {
357
378
return k , proto .NewReclaimSpaceClient (v .Client )
358
379
}
359
380
}
@@ -372,12 +393,11 @@ func (r *ReclaimSpaceJobReconciler) controllerReclaimSpace(
372
393
ctx context.Context ,
373
394
logger * logr.Logger ,
374
395
target * targetDetails ) (bool , * int64 , error ) {
375
- clientName , controllerClient := r .getRSClientWithCap ( target . driverName , "" , identity . Capability_ReclaimSpace_OFFLINE )
376
- if controllerClient = = nil {
377
- logger .Info ("Controller Client not found" )
378
- return false , nil , nil
396
+ controllerClient , err := r .getLeadingRSClient ( ctx , r . Client , target . driverName )
397
+ if err ! = nil {
398
+ logger .Info ("Controller Client not found: %v" , err )
399
+ return false , nil , err
379
400
}
380
- * logger = logger .WithValues ("controllerClient" , clientName )
381
401
382
402
logger .Info ("Making controller reclaim space request" )
383
403
req := & proto.ReclaimSpaceRequest {
@@ -407,10 +427,9 @@ func (r *ReclaimSpaceJobReconciler) nodeReclaimSpace(
407
427
ctx context.Context ,
408
428
logger * logr.Logger ,
409
429
target * targetDetails ) (* int64 , error ) {
410
- clientName , nodeClient := r .getRSClientWithCap (
430
+ clientName , nodeClient := r .getRSClientByNode (
411
431
target .driverName ,
412
- target .nodeID ,
413
- identity .Capability_ReclaimSpace_ONLINE )
432
+ target .nodeID )
414
433
if nodeClient == nil {
415
434
return nil , fmt .Errorf ("node Client not found for %q nodeID" , target .nodeID )
416
435
}
0 commit comments