func (rs *s) Providers(c *cid.Cid) []pstore.PeerInfo { rs.delayConf.Query.Wait() // before locking rs.lock.RLock() defer rs.lock.RUnlock() k := c.KeyString() var ret []pstore.PeerInfo records, ok := rs.providers[k] if !ok { return ret } for _, r := range records { if time.Now().Sub(r.Created) > rs.delayConf.ValueVisibility.Get() { ret = append(ret, r.Peer) } } for i := range ret { j := rand.Intn(i + 1) ret[i], ret[j] = ret[j], ret[i] } return ret }
func wantlistContains(wantlist *pb.Message_Wantlist, c *cid.Cid) bool { for _, e := range wantlist.GetEntries() { if e.GetBlock() == c.KeyString() { return true } } return false }
func (m *impl) addEntry(c *cid.Cid, priority int, cancel bool) { k := c.KeyString() e, exists := m.wantlist[k] if exists { e.Priority = priority e.Cancel = cancel } else { m.wantlist[k] = Entry{ Entry: &wantlist.Entry{ Cid: c, Priority: priority, }, Cancel: cancel, } } }
func (rs *s) Announce(p pstore.PeerInfo, c *cid.Cid) error { rs.lock.Lock() defer rs.lock.Unlock() k := c.KeyString() _, ok := rs.providers[k] if !ok { rs.providers[k] = make(map[peer.ID]providerRecord) } rs.providers[k][p.ID] = providerRecord{ Created: time.Now(), Peer: p, } return nil }
// if ok == false has is inconclusive // if ok == true then has respons to question: is it contained func (b *arccache) hasCached(k *cid.Cid) (has bool, ok bool) { b.total.Inc() if k == nil { log.Error("nil cid in arccache") // Return cache invalid so the call to blockstore happens // in case of invalid key and correct error is created. return false, false } h, ok := b.arc.Get(k.KeyString()) if ok { b.hits.Inc() return h.(bool), true } return false, false }
// taskKey returns a key that uniquely identifies a task. func taskKey(p peer.ID, k *cid.Cid) string { return string(p) + k.KeyString() }
func (m *impl) Cancel(k *cid.Cid) { delete(m.wantlist, k.KeyString()) m.addEntry(k, 0, true) }
func CidToDsKey(k *cid.Cid) ds.Key { return NewKeyFromBinary(k.KeyString()) }
func (b *arccache) addCache(c *cid.Cid, has bool) { b.arc.Add(c.KeyString(), has) }