func (w *writecache) Put(b *blocks.Block) error { if _, ok := w.cache.Get(b.Key()); ok { return nil } w.cache.Add(b.Key(), struct{}{}) return w.blockstore.Put(b) }
func (bs *blockstore) Put(block *blocks.Block) error { k := block.Key().DsKey() // Has is cheaper than Put, so see if we already have it exists, err := bs.datastore.Has(k) if err == nil && exists { return nil // already stored. } return bs.datastore.Put(k, block.Data) }
func (s *BlockList) Push(b *blocks.Block) { if s.uniques == nil { s.uniques = make(map[key.Key]*list.Element) } _, ok := s.uniques[b.Key()] if !ok { e := s.list.PushBack(b) s.uniques[b.Key()] = e } }
// AddBlock adds a particular block to the service, Putting it into the datastore. // TODO pass a context into this if the remote.HasBlock is going to remain here. func (s *BlockService) AddBlock(b *blocks.Block) (key.Key, error) { k := b.Key() err := s.Blockstore.Put(b) if err != nil { return k, err } if err := s.worker.HasBlock(b); err != nil { return "", errors.New("blockservice is closed") } return k, nil }