1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16
17 package drive
18
19 import (
20 "context"
21 "os"
22
23 "go4.org/syncutil"
24 "perkeep.org/pkg/blob"
25 "perkeep.org/pkg/blobserver"
26 )
27
28 var statGate = syncutil.NewGate(20)
29
30 func (sto *driveStorage) StatBlobs(ctx context.Context, blobs []blob.Ref, fn func(blob.SizedRef) error) error {
31 return blobserver.StatBlobsParallelHelper(ctx, blobs, fn, statGate, func(br blob.Ref) (sb blob.SizedRef, err error) {
32 size, err := sto.service.Stat(ctx, br.String())
33 switch err {
34 case os.ErrNotExist:
35 return sb, nil
36 case nil:
37 return blob.SizedRef{Ref: br, Size: uint32(size)}, nil
38 default:
39 return sb, err
40 }
41 })
42 }