code: func (db *DB) updateGC(item shed.Item) (err error) {
  	db.batchMu.Lock()
  	defer db.batchMu.Unlock()
  
  	batch := new(leveldb.Batch)
  
  	// update accessTimeStamp in retrieve, gc
  
  	i, err := db.retrievalAccessIndex.Get(item)
  	switch err {
  	case nil:
  		item.AccessTimestamp = i.AccessTimestamp
  	case leveldb.ErrNotFound:
  		// no chunk accesses
  	default:
  		return err
  	}
  	if item.AccessTimestamp == 0 {
  		// chunk is not yet synced
  		// do not add it to the gc index
  		return nil
  	}
  	// delete current entry from the gc index
  	db.gcIndex.DeleteInBatch(batch, item)
  	// update access timestamp
  	item.AccessTimestamp = now()
  	// update retrieve access index
  	db.retrievalAccessIndex.PutInBatch(batch, item)
  	// add new entry to gc index
  	db.gcIndex.PutInBatch(batch, item)
  
  	return db.shed.WriteBatch(batch)
  }
docs: // updateGC updates garbage collection index for
  // a single item. Provided item is expected to have
  // only Address and Data fields with non zero values,
  // which is ensured by the get function.