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  }