Documentation ¶
Overview ¶
Package dht implements a distributed hash table that satisfies the ipfs routing interface. This DHT is modeled after kademlia with Coral and S/Kademlia modifications.
Package dht implements a distributed hash table that satisfies the ipfs routing interface. This DHT is modeled after kademlia with Coral and S/Kademlia modifications.
Index ¶
- Constants
- Variables
- type BootstrapConfig
- type IpfsDHT
- func (dht *IpfsDHT) Bootstrap(ctx context.Context) error
- func (dht *IpfsDHT) BootstrapOnSignal(cfg BootstrapConfig, signal <-chan time.Time) (goprocess.Process, error)
- func (dht *IpfsDHT) BootstrapWithConfig(config BootstrapConfig) (goprocess.Process, error)
- func (dht *IpfsDHT) Connect(ctx context.Context, npeer peer.ID) error
- func (dht *IpfsDHT) FindLocal(id peer.ID) peer.PeerInfo
- func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, error)
- func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan peer.PeerInfo, error)
- func (dht *IpfsDHT) FindProviders(ctx context.Context, key u.Key) ([]peer.PeerInfo, error)
- func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key u.Key, count int) <-chan peer.PeerInfo
- func (dht *IpfsDHT) GetClosestPeers(ctx context.Context, key u.Key) (<-chan peer.ID, error)
- func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error)
- func (dht *IpfsDHT) GetValue(ctx context.Context, key u.Key) ([]byte, error)
- func (dht *IpfsDHT) LocalPeer() peer.ID
- func (dht *IpfsDHT) Ping(ctx context.Context, p peer.ID) (time.Duration, error)
- func (dht *IpfsDHT) PingRoutine(t time.Duration)
- func (dht *IpfsDHT) Provide(ctx context.Context, key u.Key) error
- func (dht *IpfsDHT) PutValue(ctx context.Context, key u.Key, value []byte) error
- func (dht *IpfsDHT) Update(ctx context.Context, p peer.ID)
- type ProviderManager
Constants ¶
const NumBootstrapQueries = 5
NumBootstrapQueries defines the number of random dht queries to do to collect members of the routing table.
Variables ¶
var AlphaValue = 3
Alpha is the concurrency factor for asynchronous requests.
var CloserPeerCount = 4
The number of closer peers to send on requests.
var DefaultBootstrapConfig = BootstrapConfig{ Queries: 1, Period: time.Duration(5 * time.Minute), Timeout: time.Duration(10 * time.Second), }
var KValue = 10
K is the maximum number of requests to perform before returning failure.
var PoolSize = 6
Pool size is the number of nodes used for group find/set RPC calls
var ProtocolDHT protocol.ID = "/ipfs/dht"
Functions ¶
This section is empty.
Types ¶
type BootstrapConfig ¶
type BootstrapConfig struct { Queries int // how many queries to run per period Period time.Duration // how often to run periodi cbootstrap. Timeout time.Duration // how long to wait for a bootstrao query to run }
BootstrapConfig specifies parameters used bootstrapping the DHT.
Note there is a tradeoff between the bootstrap period and the number of queries. We could support a higher period with less queries.
type IpfsDHT ¶
type IpfsDHT struct { Validator record.Validator // record validator funcs ctxgroup.ContextGroup // contains filtered or unexported fields }
IpfsDHT is an implementation of Kademlia with Coral and S/Kademlia modifications. It is used to implement the base IpfsRouting module.
func (*IpfsDHT) Bootstrap ¶
Bootstrap ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.
As opposed to BootstrapWithConfig, Bootstrap satisfies the routing interface
func (*IpfsDHT) BootstrapOnSignal ¶
func (dht *IpfsDHT) BootstrapOnSignal(cfg BootstrapConfig, signal <-chan time.Time) (goprocess.Process, error)
SignalBootstrap ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.
SignalBootstrap returns a process, so the user can stop it.
func (*IpfsDHT) BootstrapWithConfig ¶
func (dht *IpfsDHT) BootstrapWithConfig(config BootstrapConfig) (goprocess.Process, error)
BootstrapWithConfig ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.
BootstrapWithConfig returns a process, so the user can stop it.
func (*IpfsDHT) Connect ¶
Connect to a new peer at the given address, ping and add to the routing table
func (*IpfsDHT) FindLocal ¶
FindLocal looks for a peer with a given ID connected to this dht and returns the peer and the table it was found in.
func (*IpfsDHT) FindPeersConnectedToPeer ¶
func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan peer.PeerInfo, error)
FindPeersConnectedToPeer searches for peers directly connected to a given peer.
func (*IpfsDHT) FindProviders ¶
FindProviders searches until the context expires.
func (*IpfsDHT) FindProvidersAsync ¶
func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key u.Key, count int) <-chan peer.PeerInfo
FindProvidersAsync is the same thing as FindProviders, but returns a channel. Peers will be returned on the channel as soon as they are found, even before the search query completes.
func (*IpfsDHT) GetClosestPeers ¶
Kademlia 'node lookup' operation. Returns a channel of the K closest peers to the given key
func (*IpfsDHT) GetPublicKey ¶ added in v0.3.2
func (*IpfsDHT) GetValue ¶
GetValue searches for the value corresponding to given Key. If the search does not succeed, a multiaddr string of a closer peer is returned along with util.ErrSearchIncomplete
func (*IpfsDHT) PingRoutine ¶
PingRoutine periodically pings nearest neighbors.
func (*IpfsDHT) Provide ¶
Provide makes this node announce that it can provide a value for the given key
type ProviderManager ¶
type ProviderManager struct { ctxgroup.ContextGroup // contains filtered or unexported fields }
func NewProviderManager ¶
func NewProviderManager(ctx context.Context, local peer.ID) *ProviderManager
func (*ProviderManager) AddProvider ¶
func (*ProviderManager) GetLocal ¶
func (pm *ProviderManager) GetLocal() []u.Key