325a70d514
* add reference to dht to overlay client struct * wip * wip * Implement FindNode * get nodes * WIP * Merge in Dennis kademlia code, get it working with our code * ping and moar * WIP trying to get cache working with kademlia * WIP more wiring up * WIP * Update service cli commands * WIP * added GetNodes * added nodes to Kbucket * default transport changed to TCP * GetBuckets interface changed * filling in more routing * timestamp methods * removed store * Added initial network overlay explorer page * Updating and building with dockerfile * Working on adding bootstrap node code * WIP merging in dennis' code * WIP * connects cache to pkg/kademlia implementation * WIP redis cache * testing * Add bootstrap network function for CLI usage * cleanup * call bootstrap on init network * Add BootstrapNetwork function to interface * Merge in dennis kad code * WIP updates to redis/overlay client interface * WIP trying to get the DHT connected to the cache * go mod & test * deps * Bootstrap node now setting up correctly - Need to pass it through CLI commands better * WIP adding refresh and walk functions, added cli flags - added cli flags for custom bootstrap port and ip * PR comments addressed * adding FindStorageNodes to overlay cache * fix GetBucket * using SplitHostPort * Use JoinHostPort * updates to findstoragenodes response and request * WIP merge in progress, having issues with a panic * wip * adjustments * update port for dht bootstrap test * Docker * wip * dockerfile * fixes * makefile changes * Update port in NewKademlia call * Update local kademlia DHT config * kubernetes yaml * cleanup * making tests pass * k8s yaml * lint issues * Edit cli flags to allow for configurable bootstrap IP and Port args * cleanup * cache walking the network now * Rough prototype of Walk function laid out * Move walk function into bootstrap function * Update dht.go * changes to yaml * goimports
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
// Copyright (C) 2018 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package kademlia
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"storj.io/storj/protos/overlay"
|
|
)
|
|
|
|
// NodeID is the unique identifer for a node on the network
|
|
type NodeID string
|
|
|
|
// DHT is the interface for the DHT in the Storj network
|
|
type DHT interface {
|
|
GetNodes(ctx context.Context, start string, limit int) ([]*overlay.Node, error)
|
|
|
|
GetRoutingTable(ctx context.Context) (RoutingTable, error)
|
|
Bootstrap(ctx context.Context) error
|
|
Ping(ctx context.Context, node overlay.Node) (overlay.Node, error)
|
|
FindNode(ctx context.Context, ID NodeID) (overlay.Node, error)
|
|
}
|
|
|
|
// RoutingTable contains information on nodes we have locally
|
|
type RoutingTable interface {
|
|
// local params
|
|
LocalID() NodeID
|
|
K() int
|
|
CacheSize() int
|
|
|
|
GetBucket(id string) (bucket Bucket, ok bool)
|
|
GetBuckets() ([]Bucket, error)
|
|
|
|
FindNear(id NodeID, limit int) ([]*overlay.Node, error)
|
|
|
|
ConnectionSuccess(id string, address overlay.NodeAddress)
|
|
ConnectionFailed(id string, address overlay.NodeAddress)
|
|
|
|
// these are for refreshing
|
|
SetBucketTimestamp(id string, now time.Time) error
|
|
GetBucketTimestamp(id string, bucket Bucket) (time.Time, error)
|
|
}
|
|
|
|
// Bucket is a set of methods to act on kademlia k buckets
|
|
type Bucket interface {
|
|
Routing() []overlay.Node
|
|
Cache() []overlay.Node
|
|
Midpoint() string
|
|
}
|