kbucket

package module
v0.2.1-0...-d5ef9cf Latest Latest
Warning

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

Go to latest
Published: Jun 12, 2019 License: MIT Imports: 10 Imported by: 0

README

go-kademlia-bucket

A fork of go-libp2p-kbucket with a user-defined hash function and without any libp2p dependencies.

Documentation

Overview

Package kbucket implements a kademlia 'k-bucket' routing table.

Index

Constants

This section is empty.

Variables

View Source
var ErrLookupFailure = errors.New("failed to find any peer in table")

Returned if a routing table query returns no results. This is NOT expected behaviour

View Source
var ErrPeerRejectedHighLatency = errors.New("peer rejected; latency too high")
View Source
var ErrPeerRejectedNoCapacity = errors.New("peer rejected; insufficient capacity")

Functions

func CommonPrefixLen

func CommonPrefixLen(a, b ID) int

Types

type Bucket

type Bucket struct {
	// contains filtered or unexported fields
}

Bucket holds a list of peers.

func (*Bucket) Has

func (b *Bucket) Has(id string) bool

func (*Bucket) Len

func (b *Bucket) Len() int

func (*Bucket) MoveToFront

func (b *Bucket) MoveToFront(id string)

func (*Bucket) Peers

func (b *Bucket) Peers() []string

func (*Bucket) PopBack

func (b *Bucket) PopBack() string

func (*Bucket) PushFront

func (b *Bucket) PushFront(p *Entry)

func (*Bucket) Remove

func (b *Bucket) Remove(id string) bool

func (*Bucket) Split

func (b *Bucket) Split(cpl int, target ID) *Bucket

Split splits a buckets peers into two buckets, the methods receiver will have peers with CPL equal to cpl, the returned bucket will have peers with CPL greater than cpl (returned bucket has closer peers)

type Entry

type Entry struct {
	// contains filtered or unexported fields
}

type ID

type ID []byte

ID for IpfsDHT is in the XORKeySpace

The type dht.ID signifies that its contents have been hashed from either a string or a util.Key. This unifies the keyspace

type RoutingTable

type RoutingTable struct {

	// kBuckets define all the fingers to other nodes.
	Buckets []*Bucket

	// notification functions
	PeerRemoved func(string)
	PeerAdded   func(string)
	// contains filtered or unexported fields
}

RoutingTable defines the routing table.

func NewRoutingTable

func NewRoutingTable(bucketsize int, peer string, latency time.Duration, hash hash.Hash) *RoutingTable

NewRoutingTable creates a new routing table with a given bucketsize, local ID, and latency tolerance.

func (*RoutingTable) Find

func (rt *RoutingTable) Find(id string) string

Find a specific peer by ID or return nil

func (*RoutingTable) ListPeers

func (rt *RoutingTable) ListPeers() []string

ListPeers takes a RoutingTable and returns a list of all peers from all buckets in the table.

func (*RoutingTable) NearestPeer

func (rt *RoutingTable) NearestPeer(id string) string

NearestPeer returns a single peer that is nearest to the given ID

func (*RoutingTable) NearestPeers

func (rt *RoutingTable) NearestPeers(peer string, count int) []string

NearestPeers returns a list of the 'count' closest peers to the given ID

func (*RoutingTable) Print

func (rt *RoutingTable) Print()

Print prints a descriptive statement about the provided RoutingTable

func (*RoutingTable) Remove

func (rt *RoutingTable) Remove(p string)

Remove deletes a peer from the routing table. This is to be used when we are sure a node has disconnected completely.

func (*RoutingTable) Size

func (rt *RoutingTable) Size() int

Size returns the total number of peers in the routing table

func (*RoutingTable) Update

func (rt *RoutingTable) Update(p string) (evicted string, err error)

Update adds or moves the given peer to the front of its respective bucket

Jump to

Keyboard shortcuts

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