chore: apply suggestions from code review

Co-Authored-By: Jacob Heun <jacobheun@gmail.com>
This commit is contained in:
Vasco Santos 2020-04-09 12:54:48 +02:00
parent 166206575e
commit 7dcc78ea7a
4 changed files with 38 additions and 71 deletions

View File

@ -519,7 +519,7 @@ const key = '/key'
const { from, val } = await libp2p.contentRouting.get(key) const { from, val } = await libp2p.contentRouting.get(key)
``` ```
### peerStore.addressBook.Add ### peerStore.addressBook.add
Adds known `multiaddrs` of a given peer. If the peer is not known, it will be set with the provided multiaddrs. Adds known `multiaddrs` of a given peer. If the peer is not known, it will be set with the provided multiaddrs.
@ -536,7 +536,7 @@ Adds known `multiaddrs` of a given peer. If the peer is not known, it will be se
| Type | Description | | Type | Description |
|------|-------------| |------|-------------|
| `Map<string, MultiaddrInfo>` | Map of known peers' string identifier with their relevant information [`MultiaddrInfo`](multiaddr-info) | | `AddressBook` | Returns the Address Book component |
#### Example #### Example
@ -574,7 +574,7 @@ peerStore.addressBook.delete(peerId)
### peerStore.addressBook.get ### peerStore.addressBook.get
Get the known [`MultiaddrInfos`](multiaddr-info) of a provided peer. Get the known [`MultiaddrInfos`][multiaddr-info] of a provided peer.
`peerStore.addressBook.get(peerId)` `peerStore.addressBook.get(peerId)`
@ -588,7 +588,7 @@ Get the known [`MultiaddrInfos`](multiaddr-info) of a provided peer.
| Type | Description | | Type | Description |
|------|-------------| |------|-------------|
| `Array<MultiaddrInfo>` | Array of peer's multiaddr with their relevant information [`MultiaddrInfo`](multiaddr-info) | | `Array<MultiaddrInfo>` | Array of peer's multiaddr with their relevant information [`MultiaddrInfo`][multiaddr-info] |
#### Example #### Example
@ -657,7 +657,7 @@ Set known `multiaddrs` of a given peer.
| Type | Description | | Type | Description |
|------|-------------| |------|-------------|
| `Map<string, MultiaddrInfo>` | Map of known peers' string identifier with their relevant information [`MultiaddrInfo`](multiaddr-info) | | `AddressBook` | Returns the Address Book component |
#### Example #### Example
@ -682,7 +682,7 @@ Add known `protocols` of a given peer.
| Type | Description | | Type | Description |
|------|-------------| |------|-------------|
| `Map<string, string>` | Map of known peers' string identifier with their supported protocols | | `ProtoBook` | Returns the Proto Book component |
#### Example #### Example
@ -763,7 +763,7 @@ Set known `protocols` of a given peer.
| Type | Description | | Type | Description |
|------|-------------| |------|-------------|
| `Map<string, string>` | Map of known peers' string identifier with their supported protocols | | `ProtoBook` | Returns the Proto Book component |
#### Example #### Example

View File

@ -26,7 +26,7 @@ It is also possible to gather relevant information for peers from other protocol
When the PeerStore data is updated, this information might be important for different parties. When the PeerStore data is updated, this information might be important for different parties.
Every time a peer needs to dial another peer, it is essential that it knows the multiaddrs used by the peer, in order to perform a successful dial to it. The same is true for pinging a peer. While the `AddressBook` is going to keep its data updated, it will also emit `change:multiaddrs` events so that subsystems/users interested in knowing these changes can be notifyied instead of pooling the `AddressBook`. Every time a peer needs to dial another peer, it is essential that it knows the multiaddrs used by the peer, in order to perform a successful dial to it. The same is true for pinging a peer. While the `AddressBook` is going to keep its data updated, it will also emit `change:multiaddrs` events so that subsystems/users interested in knowing these changes can be notified instead of polling the `AddressBook`.
Everytime a peer starts/stops supporting a protocol, libp2p subsystems or users might need to act accordingly. `js-libp2p` registrar orchestrates known peers, established connections and protocol topologies. This way, once a protocol is supported for a peer, the topology of that protocol should be informed that a new peer may be used and the subsystem can decide if it should open a new stream with that peer or not. For these situations, the `ProtoBook` will emit `change:protocols` events whenever supported protocols of a peer change. Everytime a peer starts/stops supporting a protocol, libp2p subsystems or users might need to act accordingly. `js-libp2p` registrar orchestrates known peers, established connections and protocol topologies. This way, once a protocol is supported for a peer, the topology of that protocol should be informed that a new peer may be used and the subsystem can decide if it should open a new stream with that peer or not. For these situations, the `ProtoBook` will emit `change:protocols` events whenever supported protocols of a peer change.
@ -34,36 +34,7 @@ Everytime a peer starts/stops supporting a protocol, libp2p subsystems or users
The PeerStore wraps four main components: `addressBook`, `keyBook`, `protocolBook` and `metadataBook`. Moreover, it provides a high level API for those components, as well as data events. The PeerStore wraps four main components: `addressBook`, `keyBook`, `protocolBook` and `metadataBook`. Moreover, it provides a high level API for those components, as well as data events.
### API ### Components
For the complete API documentation, you should check the [API.md](../../doc/API.md).
Access to its underlying books:
- `peerStore.protoBook.*`
- `peerStore.addressBook.*`
High level operations:
- [`peerStore.delete(peerId)`](../../doc/API.md#peerstoredelete)
Deletes the provided peer from every book.
- [`peerStore.get(peerId)`](../../doc/API.md#peerstoreget)
Gets the stored information of a given peer.
- [`peerStore.peers()`](../../doc/API.md#peerstorepeers)
Gets an array of all the peers, as well as their information.
### Events
- `peer` - emitted when a new peer is added.
- `change:multiaadrs` - emitted when a known peer has a different set of multiaddrs.
- `change:protocols` - emitted when a known peer supports a different set of protocols.
### Components API
#### Address Book #### Address Book
@ -75,23 +46,10 @@ A `peerId.toString()` identifier mapping to a `multiaddrInfo` object, which shou
```js ```js
{ {
multiaddr: , multiaddr: <Multiaddr>
} }
``` ```
**Note:** except for multiaddr naming, the other properties are placeholders for now and might not be as described in the future milestones.
- `addressBook.data`
- [`addressBook.add()`](../../doc/API.md#peerstoreaddressbookadd)
- [`addressBook.delete()`](../../doc/API.md#peerstoreaddressbookdelete)
- [`addressBook.get()`](../../doc/API.md#peerstoreaddressbookget)
- [`addressBook.getMultiaddrsForPeer()`](../../doc/API.md#peerstoreaddressbookgetmultiaddrsforpeer)
- [`addressBook.set()`](../../doc/API.md#peerstoreaddressbookset)
(Future considerations: Further API methods will probably be added in the context of multiaddr validity and multiaddr confidence.)
**Not Yet Implemented**: Multiaddr Confidence
#### Key Book #### Key Book
The `keyBook` tracks the keys of the peers. The `keyBook` tracks the keys of the peers.
@ -106,16 +64,25 @@ The `protoBook` holds the identifiers of the protocols supported by each peer. T
A `peerId.toString()` identifier mapping to a `Set` of protocol identifier strings. A `peerId.toString()` identifier mapping to a `Set` of protocol identifier strings.
- `protoBook.data`
- [`protoBook.add()`](../../doc/API.md#peerstoreprotobookadd)
- [`protoBook.delete()`](../../doc/API.md#peerstoreprotobookdelete)
- [`protoBook.get()`](../../doc/API.md#peerstoreprotobookget)
- [`protoBook.set()`](../../doc/API.md#peerstoreprotobookset)
#### Metadata Book #### Metadata Book
**Not Yet Implemented** **Not Yet Implemented**
### API
For the complete API documentation, you should check the [API.md](../../doc/API.md).
Access to its underlying books:
- `peerStore.protoBook.*`
- `peerStore.addressBook.*`
### Events
- `peer` - emitted when a new peer is added.
- `change:multiaadrs` - emitted when a known peer has a different set of multiaddrs.
- `change:protocols` - emitted when a known peer supports a different set of protocols.
## Future Considerations ## Future Considerations
- If multiaddr TTLs are added, the PeerStore may schedule jobs to delete all addresses that exceed the TTL to prevent AddressBook bloating - If multiaddr TTLs are added, the PeerStore may schedule jobs to delete all addresses that exceed the TTL to prevent AddressBook bloating

View File

@ -50,7 +50,7 @@ class AddressBook extends Book {
* @override * @override
* @param {PeerId} peerId * @param {PeerId} peerId
* @param {Array<Multiaddr>} addresses * @param {Array<Multiaddr>} addresses
* @returns {Map<string, Array<MultiaddrInfo>>} * @returns {AddressBook}
*/ */
set (peerId, addresses) { set (peerId, addresses) {
if (!PeerId.isPeerId(peerId)) { if (!PeerId.isPeerId(peerId)) {
@ -64,7 +64,7 @@ class AddressBook extends Book {
// Not replace multiaddrs // Not replace multiaddrs
if (!multiaddrInfos.length) { if (!multiaddrInfos.length) {
return this.data return this
} }
// Already knows the peer // Already knows the peer
@ -75,7 +75,7 @@ class AddressBook extends Book {
// If yes, no changes needed! // If yes, no changes needed!
if (intersection.length === rec.length) { if (intersection.length === rec.length) {
log(`the addresses provided to store are equal to the already stored for ${id}`) log(`the addresses provided to store are equal to the already stored for ${id}`)
return this.data return this
} }
} }
@ -98,7 +98,7 @@ class AddressBook extends Book {
multiaddrs: multiaddrInfos.map((mi) => mi.multiaddr) multiaddrs: multiaddrInfos.map((mi) => mi.multiaddr)
}) })
return this.data return this
} }
/** /**
@ -107,7 +107,7 @@ class AddressBook extends Book {
* @override * @override
* @param {PeerId} peerId * @param {PeerId} peerId
* @param {Array<Multiaddr>} addresses * @param {Array<Multiaddr>} addresses
* @returns {Map<string, Array<MultiaddrInfo>>} * @returns {AddressBook}
*/ */
add (peerId, addresses) { add (peerId, addresses) {
if (!PeerId.isPeerId(peerId)) { if (!PeerId.isPeerId(peerId)) {
@ -130,7 +130,7 @@ class AddressBook extends Book {
// The content is the same, no need to update. // The content is the same, no need to update.
if (rec && rec.length === multiaddrInfos.length) { if (rec && rec.length === multiaddrInfos.length) {
log(`the addresses provided to store are already stored for ${id}`) log(`the addresses provided to store are already stored for ${id}`)
return this.data return this
} }
this.data.set(id, multiaddrInfos) this.data.set(id, multiaddrInfos)
@ -153,7 +153,7 @@ class AddressBook extends Book {
this._ps.emit('peer', peerInfo) this._ps.emit('peer', peerInfo)
} }
return this.data return this
} }
/** /**

View File

@ -44,7 +44,7 @@ class ProtoBook extends Book {
* @override * @override
* @param {PeerId} peerId * @param {PeerId} peerId
* @param {Array<string>} protocols * @param {Array<string>} protocols
* @returns {Map<string, Set<string>>} * @returns {ProtoBook}
*/ */
set (peerId, protocols) { set (peerId, protocols) {
if (!PeerId.isPeerId(peerId)) { if (!PeerId.isPeerId(peerId)) {
@ -67,7 +67,7 @@ class ProtoBook extends Book {
// If yes, no changes needed! // If yes, no changes needed!
if (recSet && isSetEqual(recSet, newSet)) { if (recSet && isSetEqual(recSet, newSet)) {
log(`the protocols provided to store are equal to the already stored for ${id}`) log(`the protocols provided to store are equal to the already stored for ${id}`)
return this.data return this
} }
this.data.set(id, newSet) this.data.set(id, newSet)
@ -83,7 +83,7 @@ class ProtoBook extends Book {
protocols protocols
}) })
return this.data return this
} }
/** /**
@ -92,7 +92,7 @@ class ProtoBook extends Book {
* @override * @override
* @param {PeerId} peerId * @param {PeerId} peerId
* @param {Array<string>} protocols * @param {Array<string>} protocols
* @returns {Map<string, Set<string>>} * @returns {ProtoBook}
*/ */
add (peerId, protocols) { add (peerId, protocols) {
if (!PeerId.isPeerId(peerId)) { if (!PeerId.isPeerId(peerId)) {
@ -112,7 +112,7 @@ class ProtoBook extends Book {
// Any new protocol added? // Any new protocol added?
if (recSet.size === newSet.size) { if (recSet.size === newSet.size) {
log(`the protocols provided to store are already stored for ${id}`) log(`the protocols provided to store are already stored for ${id}`)
return this.data return this
} }
protocols = [...newSet] protocols = [...newSet]
@ -130,7 +130,7 @@ class ProtoBook extends Book {
protocols protocols
}) })
return this.data return this
} }
} }