Commit 429decc9 authored by Jeromy Johnson's avatar Jeromy Johnson Committed by GitHub

Merge pull request #3269 from ipfs/feat/dht-client-mode

add experimental dht client mode flag
parents e1c40dfa a7762da3
......@@ -43,6 +43,7 @@ const (
offlineKwd = "offline"
routingOptionKwd = "routing"
routingOptionSupernodeKwd = "supernode"
routingOptionDHTClientKwd = "dhtclient"
unencryptTransportKwd = "disable-transport-encryption"
unrestrictedApiAccessKwd = "unrestricted-api"
writableKwd = "writable"
......@@ -120,6 +121,17 @@ environment variable:
export IPFS_PATH=/path/to/ipfsrepo
Routing
IPFS by default will use a DHT for content routing. There is a highly
experimental alternative that operates the DHT in a 'client only' mode that can
be enabled by running the daemon as:
ipfs daemon --routing=dhtclient
This will later be transitioned into a config option once it gets out of the
'experimental' stage.
DEPRECATION NOTICE
Previously, IPFS used an environment variable as seen below:
......@@ -286,7 +298,8 @@ func daemonFunc(req cmds.Request, res cmds.Response) {
res.SetError(err, cmds.ErrNormal)
return
}
if routingOption == routingOptionSupernodeKwd {
switch routingOption {
case routingOptionSupernodeKwd:
servers, err := cfg.SupernodeRouting.ServerIPFSAddrs()
if err != nil {
res.SetError(err, cmds.ErrNormal)
......@@ -302,6 +315,8 @@ func daemonFunc(req cmds.Request, res cmds.Response) {
}
ncfg.Routing = corerouting.SupernodeClient(infos...)
case routingOptionDHTClientKwd:
ncfg.Routing = core.DHTClientOption
}
node, err := core.NewNode(req.Context(), ncfg)
......
......@@ -646,9 +646,17 @@ func constructDHTRouting(ctx context.Context, host p2phost.Host, dstore repo.Dat
return dhtRouting, nil
}
func constructClientDHTRouting(ctx context.Context, host p2phost.Host, dstore repo.Datastore) (routing.IpfsRouting, error) {
dhtRouting := dht.NewDHTClient(ctx, host, dstore)
dhtRouting.Validator[IpnsValidatorTag] = namesys.IpnsRecordValidator
dhtRouting.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc
return dhtRouting, nil
}
type RoutingOption func(context.Context, p2phost.Host, repo.Datastore) (routing.IpfsRouting, error)
type DiscoveryOption func(context.Context, p2phost.Host) (discovery.Service, error)
var DHTOption RoutingOption = constructDHTRouting
var DHTClientOption RoutingOption = constructClientDHTRouting
var NilRouterOption RoutingOption = nilrouting.ConstructNilRouting
......@@ -52,9 +52,9 @@
"version": "0.1.0"
},
{
"hash": "Qma1FrGRasghpuETfCtsKdFtXKQffpNnakv3wG3QaMwCVi",
"hash": "QmPxBCkNrrtx5cmg62TxiE3JUM2zTqTpps3diQ9PgNrcgn",
"name": "iptb",
"version": "1.0.0"
"version": "1.1.0"
},
{
"hash": "QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku",
......
#!/bin/sh
#
# Copyright (c) 2015 Jeromy Johnson
# MIT Licensed; see the LICENSE file in this repository.
#
test_description="Test client mode dht"
. lib/test-lib.sh
check_file_fetch() {
node=$1
fhash=$2
fname=$3
test_expect_success "can fetch file" '
ipfsi $node cat $fhash > fetch_out
'
test_expect_success "file looks good" '
test_cmp $fname fetch_out
'
}
run_single_file_test() {
test_expect_success "add a file on node1" '
random 1000000 > filea &&
FILEA_HASH=$(ipfsi 1 add -q filea)
'
check_file_fetch 9 $FILEA_HASH filea
check_file_fetch 8 $FILEA_HASH filea
check_file_fetch 7 $FILEA_HASH filea
check_file_fetch 6 $FILEA_HASH filea
check_file_fetch 5 $FILEA_HASH filea
check_file_fetch 4 $FILEA_HASH filea
check_file_fetch 3 $FILEA_HASH filea
check_file_fetch 2 $FILEA_HASH filea
check_file_fetch 1 $FILEA_HASH filea
check_file_fetch 0 $FILEA_HASH filea
}
NNODES=10
test_expect_success "set up testbed" '
iptb init -n $NNODES -p 0 -f --bootstrap=none
'
test_expect_success "start up nodes" '
iptb start [0-7] &&
iptb start [8-9] --args="--routing=dhtclient"
'
test_expect_success "connect up nodes" '
iptb connect [1-9] 0
'
test_expect_success "add a file on a node in client mode" '
random 1000000 > filea &&
FILE_HASH=$(ipfsi 8 add -q filea)
'
test_expect_success "retrieve that file on a client mode node" '
check_file_fetch 9 $FILE_HASH filea
'
run_single_file_test
test_expect_success "shut down nodes" '
iptb stop
'
test_done
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment