@@ -30,7 +30,6 @@ import (
3030
3131 "cloud.google.com/go/storage"
3232 "github.com/google/uuid"
33- "go.uber.org/multierr"
3433 "google.golang.org/api/googleapi"
3534 "google.golang.org/api/iterator"
3635 "google.golang.org/api/option"
@@ -443,32 +442,33 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
443442 var allObjs []* storage.ObjectAttrs
444443 it := g .client .Bucket (g .metadata .Bucket ).Objects (ctx , nil )
445444 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 {
448448 break
449449 }
450450 allObjs = append (allObjs , attrs )
451451 }
452452
453453 var wg sync.WaitGroup
454- objectsCh := make (chan objectData , len (allObjs ))
455- errCh := make (chan error , len (allObjs ))
454+ wg .Add (len (allObjs ))
456455
456+ objects := make ([]objectData , len (allObjs ))
457+ errs := make ([]error , len (allObjs ))
457458 for i , obj := range allObjs {
458- wg .Add (1 )
459459 go func (idx int , object * storage.ObjectAttrs ) {
460460 defer wg .Done ()
461461
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
465465 return
466466 }
467467 defer rc .Close ()
468468
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
472472 return
473473 }
474474
@@ -477,7 +477,7 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
477477 data = []byte (encoded )
478478 }
479479
480- objectsCh <- objectData {
480+ objects [ idx ] = objectData {
481481 Name : object .Name ,
482482 Data : data ,
483483 Attrs : * object ,
@@ -486,29 +486,18 @@ func (g *GCPStorage) bulkGet(ctx context.Context, req *bindings.InvokeRequest) (
486486 }
487487
488488 wg .Wait ()
489- close (errCh )
490489
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 )
494492 }
495493
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 )
506495 if err != nil {
507496 return nil , fmt .Errorf ("gcp bucket binding error while marshalling bulk get response: %w" , err )
508497 }
509498
510499 return & bindings.InvokeResponse {
511- Data : jsonResponse ,
500+ Data : response ,
512501 }, nil
513502}
514503
0 commit comments