github.com/slspeek/camlistore_namedsearch@v0.0.0-20140519202248-ed6f70f7721a/pkg/blobserver/s3/slurp (about) 1 func (sto *s3Storage) slurpAll() { 2 var mu sync.Mutex 3 var nblobs, nbytes int64 4 5 errc := make(chan error) 6 for i := 0; i < 16; i++ { 7 pfx := fmt.Sprintf("sha1-%x", i) 8 log.Printf("Doing prefix %q", pfx) 9 ctx := context.New() 10 go func() { 11 err := blobserver.EnumerateAllFrom(ctx, sto, pfx, func(sb blob.SizedRef) error { 12 if !strings.HasPrefix(sb.Ref.String(), pfx) { 13 log.Printf("Ref %q doesn't have prefix %q", sb.Ref.String(), pfx) 14 ctx.Cancel() 15 return context.ErrCanceled 16 } 17 mu.Lock() 18 nblobs++ 19 nbytes += int64(sb.Size) 20 mu.Unlock() 21 return nil 22 }) 23 log.Printf("Enum prefix %q", pfx) 24 errc <- err 25 }() 26 } 27 var lastErr error 28 for i := 0; i < 16; i++ { 29 if err := <-errc; err != nil { 30 log.Printf("enumerate error: %v", err) 31 lastErr = err 32 } 33 } 34 log.Printf("Done enumerating all: %d blobs, %d bytes; err=%v", nblobs, nbytes, lastErr) 35 }