We have a peerstore that keeps all data for all observed peers in memory with no eviction.
This is fine when you don't discover many peers but when using the DHT you encounter a significant number of peers so our peer storage grows and grows over time.
We have a persistent peer store, but it just periodically writes peers into the datastore to be read at startup, still keeping them in memory.
It also means a restart doesn't give you any temporary reprieve from the memory leak as the previously observed peer data is read into memory at startup.
This change refactors the peerstore to use a datastore by default, reading and writing peer info as it arrives. It can be configured with a MemoryDatastore if desired.
It was necessary to change the peerstore and *book interfaces to be asynchronous since the datastore api is asynchronous.
BREAKING CHANGE: `libp2p.handle`, `libp2p.registrar.register` and the peerstore methods have become async
* chore: examples not using secio
* chore(docs): remove unused dep
* chore(docs): remove reference of secio in setup
* chore(docs): replace circuit secio reference with noise
Co-authored-by: Jacob Heun <jacobheun@gmail.com>
* chore: update examples to 0.28 api
* chore: use libp2p-noise in examples
* chore: examples using multiaddrs property of libp2p
Co-authored-by: Jacob Heun <jacobheun@gmail.com>
* docs: update language around secio in crypto example
Co-authored-by: Jacob Heun <jacobheun@gmail.com>
* docs: update chat example readme
* docs: update discovery test for autodial
* docs: fix delegated routing example
* docs: update echo example readme
* docs: fix libp2p in the browser example
* docs: update examples for peer/content routing
* docs: update the pubsub example
https://github.com/multiformats/js-multiaddr/pull/76 changed the
default protocol from ipfs to p2p.
js-multiaddr is a transitive dependency of peer-info, so in order
to get this change, we had to bump the version of peer-info.
* fix: revert ipfs -> p2p change for some tests
As per PR feedback. Needed for backwards-compatibility.
* docs: update chat example and add info to its readme
* docs: update echo example
* docs: update libp2p in browser example
* docs: update pubsub example
* docs: update peer and content routing examples
* docs: update discovery mechanisms example
* docs: update encrypted comms example
* docs: update protocol and stream muxing example
* feat: add config validation
* test: update CI configs, use only node 8