dht

package module
v2.5.13+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 29, 2017 License: MIT Imports: 40 Imported by: 0

README

go-libp2p-kad-dht

standard-readme compliant GoDoc Build Status

A Kademlia DHT implemention on go-libp2p

Table of Contents

Install

go get github.com/libp2p/go-libp2p-kad-dht

Usage

TODO

Contribute

Contributions welcome. Please check out the issues.

Check out our contributing document for more information on how we work, and about contributing in general. Please be aware that all interactions related to libp2p are subject to the IPFS Code of Conduct.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © Protocol Labs Inc.

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

View Source
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'

View Source
const NumBootstrapQueries = 5

NumBootstrapQueries defines the number of random dht queries to do to collect members of the routing table.

Variables

View Source
var AlphaValue = 3

Alpha is the concurrency factor for asynchronous requests.

View Source
var CloserPeerCount = KValue

The number of closer peers to send on requests.

View Source
var DefaultBootstrapConfig = BootstrapConfig{

	Queries: 1,

	Period: time.Duration(5 * time.Minute),

	Timeout: time.Duration(10 * time.Second),
}
View Source
var ErrReadTimeout = fmt.Errorf("timed out reading response")
View Source
var KValue = 20

K is the maximum number of requests to perform before returning failure.

View Source
var PoolSize = 6

Pool size is the number of nodes used for group find/set RPC calls

View Source
var ProtocolDHT protocol.ID = "/ipfs/kad/1.0.0"
View Source
var ProtocolDHTOld 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.Batching) *IpfsDHT

NewDHT creates a new DHT object with the given peer as the 'local' host

func NewDHTClient

func NewDHTClient(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT

NewDHTClient 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(cfg 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) Close

func (dht *IpfsDHT) Close() error

Close calls Process Close

func (*IpfsDHT) Context

func (dht *IpfsDHT) Context() context.Context

Context return dht's context

func (*IpfsDHT) FindLocal

func (dht *IpfsDHT) FindLocal(id peer.ID) pstore.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) (pstore.PeerInfo, error)

FindPeer searches for a peer with given ID.

func (*IpfsDHT) FindPeersConnectedToPeer

func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan *pstore.PeerInfo, error)

FindPeersConnectedToPeer searches for peers directly connected to a given peer.

func (*IpfsDHT) FindProviders

func (dht *IpfsDHT) FindProviders(ctx context.Context, c *cid.Cid) ([]pstore.PeerInfo, error)

FindProviders searches until the context expires.

func (*IpfsDHT) FindProvidersAsync

func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key *cid.Cid, count int) <-chan pstore.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 string) (<-chan peer.ID, error)

Kademlia 'node lookup' operation. Returns a channel of the K closest peers to the given key

func (*IpfsDHT) GetPublicKey

func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error)

func (*IpfsDHT) GetValue

func (dht *IpfsDHT) GetValue(ctx context.Context, key string) ([]byte, error)

GetValue searches for the value corresponding to given Key.

func (*IpfsDHT) GetValues

func (dht *IpfsDHT) GetValues(ctx context.Context, key string, nvals int) ([]routing.RecvdVal, error)

func (*IpfsDHT) Process

func (dht *IpfsDHT) Process() goprocess.Process

Process return dht's process

func (*IpfsDHT) Provide

func (dht *IpfsDHT) Provide(ctx context.Context, key *cid.Cid, brdcst bool) error

Provide makes this node announce that it can provide a value for the given key

func (*IpfsDHT) PutValue

func (dht *IpfsDHT) PutValue(ctx context.Context, key string, value []byte) error

PutValue adds value corresponding to given Key. This is the top level "Store" operation of the DHT

func (*IpfsDHT) Update

func (dht *IpfsDHT) Update(ctx context.Context, p peer.ID)

Update signals the routingTable to Update its last-seen status on the given peer.

Directories

Path Synopsis
Package dht_pb is a generated protocol buffer package.
Package dht_pb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL