fix: expose metrics and registrar, use dht for peer discovery (#1183)

Exposes fields used by bitswap and also uses dht for peer discovery which was missed.
This commit is contained in:
Alex Potsides 2022-04-02 10:11:01 +01:00 committed by GitHub
parent cc60cfde1a
commit 64bfcee509
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 5 deletions

View File

@ -16,8 +16,8 @@ import type { ConnectionEncrypter } from '@libp2p/interfaces/connection-encrypte
import type { PeerRouting } from '@libp2p/interfaces/peer-routing' import type { PeerRouting } from '@libp2p/interfaces/peer-routing'
import type { ContentRouting } from '@libp2p/interfaces/content-routing' import type { ContentRouting } from '@libp2p/interfaces/content-routing'
import type { PubSub } from '@libp2p/interfaces/pubsub' import type { PubSub } from '@libp2p/interfaces/pubsub'
import type { ConnectionManager, StreamHandler } from '@libp2p/interfaces/registrar' import type { ConnectionManager, Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
import type { MetricsInit } from '@libp2p/interfaces/metrics' import type { Metrics, MetricsInit } from '@libp2p/interfaces/metrics'
import type { PeerInfo } from '@libp2p/interfaces/peer-info' import type { PeerInfo } from '@libp2p/interfaces/peer-info'
import type { DialerInit } from '@libp2p/interfaces/dialer' import type { DialerInit } from '@libp2p/interfaces/dialer'
import type { KeyChain } from './keychain/index.js' import type { KeyChain } from './keychain/index.js'
@ -152,6 +152,8 @@ export interface Libp2p extends Startable, EventEmitter<Libp2pEvents> {
contentRouting: ContentRouting contentRouting: ContentRouting
keychain: KeyChain keychain: KeyChain
connectionManager: ConnectionManager connectionManager: ConnectionManager
registrar: Registrar
metrics?: Metrics
pubsub?: PubSub pubsub?: PubSub
dht?: DualDHT dht?: DualDHT

View File

@ -32,7 +32,7 @@ import type { Connection } from '@libp2p/interfaces/connection'
import type { PeerRouting } from '@libp2p/interfaces/peer-routing' import type { PeerRouting } from '@libp2p/interfaces/peer-routing'
import type { ContentRouting } from '@libp2p/interfaces/content-routing' import type { ContentRouting } from '@libp2p/interfaces/content-routing'
import type { PubSub } from '@libp2p/interfaces/pubsub' import type { PubSub } from '@libp2p/interfaces/pubsub'
import type { ConnectionManager, StreamHandler } from '@libp2p/interfaces/registrar' import type { ConnectionManager, Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
import type { PeerInfo } from '@libp2p/interfaces/peer-info' import type { PeerInfo } from '@libp2p/interfaces/peer-info'
import type { Libp2p, Libp2pEvents, Libp2pInit, Libp2pOptions } from './index.js' import type { Libp2p, Libp2pEvents, Libp2pInit, Libp2pOptions } from './index.js'
import { validateConfig } from './config.js' import { validateConfig } from './config.js'
@ -43,6 +43,7 @@ import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string' import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
import errCode from 'err-code' import errCode from 'err-code'
import { unmarshalPublicKey } from '@libp2p/crypto/keys' import { unmarshalPublicKey } from '@libp2p/crypto/keys'
import type { Metrics } from '@libp2p/interfaces/metrics'
const log = logger('libp2p') const log = logger('libp2p')
@ -59,6 +60,8 @@ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
public peerRouting: PeerRouting public peerRouting: PeerRouting
public keychain: KeyChain public keychain: KeyChain
public connectionManager: ConnectionManager public connectionManager: ConnectionManager
public registrar: Registrar
public metrics?: Metrics
private started: boolean private started: boolean
private readonly services: Startable[] private readonly services: Startable[]
@ -78,7 +81,7 @@ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
// Create Metrics // Create Metrics
if (init.metrics.enabled) { if (init.metrics.enabled) {
this.components.setMetrics(this.configureComponent(new DefaultMetrics(init.metrics))) this.metrics = this.components.setMetrics(this.configureComponent(new DefaultMetrics(init.metrics)))
} }
this.components.setConnectionGater(this.configureComponent({ this.components.setConnectionGater(this.configureComponent({
@ -117,7 +120,7 @@ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
this.connectionManager = this.components.setConnectionManager(this.configureComponent(new DefaultConnectionManager(this.components, init.connectionManager))) this.connectionManager = this.components.setConnectionManager(this.configureComponent(new DefaultConnectionManager(this.components, init.connectionManager)))
// Create the Registrar // Create the Registrar
this.components.setRegistrar(this.configureComponent(new DefaultRegistrar(this.components))) this.registrar = this.components.setRegistrar(this.configureComponent(new DefaultRegistrar(this.components)))
// Setup the transport manager // Setup the transport manager
this.components.setTransportManager(this.configureComponent(new DefaultTransportManager(this.components, init.transportManager))) this.components.setTransportManager(this.configureComponent(new DefaultTransportManager(this.components, init.transportManager)))
@ -180,6 +183,11 @@ export class Libp2pNode extends EventEmitter<Libp2pEvents> implements Libp2p {
if (this.dht != null) { if (this.dht != null) {
// add dht to routers // add dht to routers
peerRouters.push(this.configureComponent(new DHTPeerRouting(this.dht))) peerRouters.push(this.configureComponent(new DHTPeerRouting(this.dht)))
// use dht for peer discovery
this.dht.addEventListener('peer', (evt) => {
this.onDiscoveryPeer(evt)
})
} }
this.peerRouting = this.components.setPeerRouting(this.configureComponent(new DefaultPeerRouting(this.components, { this.peerRouting = this.components.setPeerRouting(this.configureComponent(new DefaultPeerRouting(this.components, {