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) Close() error
- func (dht *IpfsDHT) Context() context.Context
- 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 key.Key) ([]peer.PeerInfo, error)
- func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key key.Key, count int) <-chan peer.PeerInfo
- func (dht *IpfsDHT) GetClosestPeers(ctx context.Context, key key.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 key.Key) ([]byte, error)
- func (dht *IpfsDHT) GetValues(ctx context.Context, key key.Key, nvals int) ([]routing.RecvdVal, error)
- func (dht *IpfsDHT) LocalPeer() peer.ID
- func (dht *IpfsDHT) Process() goprocess.Process
- func (dht *IpfsDHT) Provide(ctx context.Context, key key.Key) error
- func (dht *IpfsDHT) PutValue(ctx context.Context, key key.Key, value []byte) error
- func (dht *IpfsDHT) Update(ctx context.Context, p peer.ID)
- type ProviderManager
Constants ¶
const MaxRecordAge = time.Hour * 36
MaxRecordAge specifies the maximum time that any node will hold onto a record from the time its received. This does not apply to any other forms of validity that the record may contain. For example, a record may contain an ipns entry with an EOL saying its valid until the year 2020 (a great time in the future). For that record to stick around it must be rebroadcasted more frequently than once every 'MaxRecordAge'
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 = KValue
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
Selector record.Selector // record selection funcs
// 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 NewDHT ¶
func NewDHT(ctx context.Context, h host.Host, dstore ds.Datastore) *IpfsDHT
NewDHT creates a new DHT object with the given peer as the 'local' host
func (*IpfsDHT) Bootstrap ¶
func (dht *IpfsDHT) Bootstrap(ctx context.Context) error
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) Context ¶ added in v0.3.6
func (dht *IpfsDHT) Context() context.Context
Context return dht's context
func (*IpfsDHT) FindLocal ¶
func (dht *IpfsDHT) FindLocal(id peer.ID) peer.PeerInfo
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) FindPeer ¶
func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, error)
FindPeer searches for a peer with given ID.
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 ¶
func (dht *IpfsDHT) FindProviders(ctx context.Context, key key.Key) ([]peer.PeerInfo, error)
FindProviders searches until the context expires.
func (*IpfsDHT) FindProvidersAsync ¶
func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key key.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 ¶
func (dht *IpfsDHT) GetClosestPeers(ctx context.Context, key key.Key) (<-chan peer.ID, error)
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 (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error)
func (*IpfsDHT) GetValue ¶
func (dht *IpfsDHT) GetValue(ctx context.Context, key key.Key) ([]byte, error)
GetValue searches for the value corresponding to given Key.
func (*IpfsDHT) GetValues ¶ added in v0.3.8
func (dht *IpfsDHT) GetValues(ctx context.Context, key key.Key, nvals int) ([]routing.RecvdVal, error)
func (*IpfsDHT) LocalPeer ¶
func (dht *IpfsDHT) LocalPeer() peer.ID
LocalPeer returns the peer.Peer of the dht.
func (*IpfsDHT) Process ¶ added in v0.3.6
func (dht *IpfsDHT) Process() goprocess.Process
Process return dht's process
func (*IpfsDHT) Provide ¶
func (dht *IpfsDHT) Provide(ctx context.Context, key key.Key) error
Provide makes this node announce that it can provide a value for the given key
type ProviderManager ¶
type ProviderManager struct {
// contains filtered or unexported fields
}
func NewProviderManager ¶
func NewProviderManager(ctx context.Context, local peer.ID) *ProviderManager
func (*ProviderManager) AddProvider ¶
func (pm *ProviderManager) AddProvider(ctx context.Context, k key.Key, val peer.ID)
func (*ProviderManager) GetProviders ¶
func (pm *ProviderManager) GetProviders(ctx context.Context, k key.Key) []peer.ID