Skip to content
This repository has been archived by the owner on Aug 19, 2022. It is now read-only.

fix: fix some race conditions in the ds address book #161

Merged
merged 2 commits into from
Jul 17, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions pstoreds/addr_book.go
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,16 @@ func (ab *dsAddrBook) ConsumePeerRecord(recordEnvelope *record.Envelope, ttl tim

func (ab *dsAddrBook) latestPeerRecordSeq(p peer.ID) uint64 {
pr, err := ab.loadRecord(p, true, false)
if err != nil || len(pr.Addrs) == 0 || pr.CertifiedRecord == nil || len(pr.CertifiedRecord.Raw) == 0 {
if err != nil {
// We ignore the error because we don't want to fail storing a new record in this
// case.
log.Errorw("unable to load record", "peer", p, "error", err)
return 0
}
pr.RLock()
defer pr.RUnlock()

if len(pr.Addrs) == 0 || pr.CertifiedRecord == nil || len(pr.CertifiedRecord.Raw) == 0 {
return 0
}
return pr.CertifiedRecord.Seq
Expand Down Expand Up @@ -552,13 +561,13 @@ func (ab *dsAddrBook) deleteAddrs(p peer.ID, addrs []ma.Multiaddr) (err error) {
return fmt.Errorf("failed to load peerstore entry for peer %v while deleting addrs, err: %v", p, err)
}

pr.Lock()
defer pr.Unlock()

if pr.Addrs == nil {
return nil
}

pr.Lock()
defer pr.Unlock()

pr.Addrs = deleteInPlace(pr.Addrs, addrs)

pr.dirty = true
Expand Down