1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16
17 package azure
18
19 import (
20 "context"
21 "log"
22
23 "perkeep.org/pkg/blob"
24 "perkeep.org/pkg/blobserver"
25 )
26
27 var _ blobserver.MaxEnumerateConfig = (*azureStorage)(nil)
28
29 func (sto *azureStorage) MaxEnumerate() int { return 5000 }
30
31 func (sto *azureStorage) EnumerateBlobs(ctx context.Context, dest chan<- blob.SizedRef, after string, limit int) (err error) {
32 defer close(dest)
33 objs, err := sto.azureClient.ListBlobs(ctx, sto.container, 5000)
34 if err != nil {
35 log.Printf("azure ListBlobs: %v", err)
36 return err
37 }
38 for _, obj := range objs {
39 if obj.Name <= after {
40 continue
41 }
42 br, ok := blob.Parse(obj.Name)
43 if !ok {
44 continue
45 }
46 select {
47 case dest <- blob.SizedRef{Ref: br, Size: uint32(obj.Properties.ContentLength)}:
48 case <-ctx.Done():
49 return ctx.Err()
50 }
51 limit--
52 if limit == 0 {
53 return nil
54 }
55 }
56 return nil
57 }