@@ -30,7 +30,6 @@ import (
30
30
31
31
"cloud.google.com/go/storage"
32
32
"github.com/google/uuid"
33
- "go.uber.org/multierr"
34
33
"google.golang.org/api/googleapi"
35
34
"google.golang.org/api/iterator"
36
35
"google.golang.org/api/option"
@@ -443,32 +442,33 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
443
442
var allObjs []* storage.ObjectAttrs
444
443
it := g .client .Bucket (g .metadata .Bucket ).Objects (ctx , nil )
445
444
for {
446
- attrs , err2 := it .Next ()
447
- if err2 == iterator .Done {
445
+ var attrs * storage.ObjectAttrs
446
+ attrs , err = it .Next ()
447
+ if err == iterator .Done {
448
448
break
449
449
}
450
450
allObjs = append (allObjs , attrs )
451
451
}
452
452
453
453
var wg sync.WaitGroup
454
- objectsCh := make (chan objectData , len (allObjs ))
455
- errCh := make (chan error , len (allObjs ))
454
+ wg .Add (len (allObjs ))
456
455
456
+ objects := make ([]objectData , len (allObjs ))
457
+ errs := make ([]error , len (allObjs ))
457
458
for i , obj := range allObjs {
458
- wg .Add (1 )
459
459
go func (idx int , object * storage.ObjectAttrs ) {
460
460
defer wg .Done ()
461
461
462
- rc , err3 := g .client .Bucket (g .metadata .Bucket ).Object (object .Name ).NewReader (ctx )
463
- if err3 != nil {
464
- errCh <- err3
462
+ rc , gerr := g .client .Bucket (g .metadata .Bucket ).Object (object .Name ).NewReader (ctx )
463
+ if gerr != nil {
464
+ errs [ idx ] = err
465
465
return
466
466
}
467
467
defer rc .Close ()
468
468
469
- data , readErr := io .ReadAll (rc )
470
- if readErr != nil {
471
- errCh <- readErr
469
+ data , gerr := io .ReadAll (rc )
470
+ if gerr != nil {
471
+ errs [ idx ] = err
472
472
return
473
473
}
474
474
@@ -477,7 +477,7 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
477
477
data = []byte (encoded )
478
478
}
479
479
480
- objectsCh <- objectData {
480
+ objects [ idx ] = objectData {
481
481
Name : object .Name ,
482
482
Data : data ,
483
483
Attrs : * object ,
@@ -486,29 +486,18 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
486
486
}
487
487
488
488
wg .Wait ()
489
- close (errCh )
490
489
491
- var multiErr error
492
- for err := range errCh {
493
- multierr .AppendInto (& multiErr , err )
490
+ if err = errors .Join (errs ... ); err != nil {
491
+ return nil , fmt .Errorf ("gcp bucket binding error while reading objects: %w" , err )
494
492
}
495
493
496
- if multiErr != nil {
497
- return nil , multiErr
498
- }
499
-
500
- response := make ([]objectData , 0 , len (allObjs ))
501
- for obj := range objectsCh {
502
- response = append (response , obj )
503
- }
504
-
505
- jsonResponse , err := json .Marshal (response )
494
+ response , err := json .Marshal (objects )
506
495
if err != nil {
507
496
return nil , fmt .Errorf ("gcp bucket binding error while marshalling bulk get response: %w" , err )
508
497
}
509
498
510
499
return & bindings.InvokeResponse {
511
- Data : jsonResponse ,
500
+ Data : response ,
512
501
}, nil
513
502
}
514
503
0 commit comments