code: func (sh *SyncHandler) readQueueToMemory() error {
  	errc := make(chan error, 1)
  	blobs := make(chan blob.SizedRef, 16)
  	intr := make(chan struct{})
  	defer close(intr)
  	go func() {
  		errc <- sh.enumerateQueuedBlobs(blobs, intr)
  	}()
  	n := 0
  	for sb := range blobs {
  		sh.addBlobToCopy(sb)
  		n++
  	}
  	sh.logf("added %d pending blobs from sync queue to pending list", n)
  	return <-errc
  }
docs: // readQueueToMemory slurps in the pending queue from disk (or
  // wherever) to memory.  Even with millions of blobs, it's not much
  // memory. The point of the persistent queue is to survive restarts if
  // the "fullSyncOnStart" option is off. With "fullSyncOnStart" set to
  // true, this is a little pointless (we'd figure out what's missing
  // eventually), but this might save us a few minutes (let us start
  // syncing missing blobs a few minutes earlier) since we won't have to
  // wait to figure out what the destination is missing.