Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3
Commits
429decc9
Commit
429decc9
authored
8 years ago
by
Jeromy Johnson
Committed by
GitHub
8 years ago
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3269 from ipfs/feat/dht-client-mode
add experimental dht client mode flag
parents
e1c40dfa
a7762da3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
99 additions
and
3 deletions
+99
-3
cmd/ipfs/daemon.go
cmd/ipfs/daemon.go
+16
-1
core/core.go
core/core.go
+8
-0
package.json
package.json
+2
-2
test/sharness/t0131-multinode-client-routing.sh
test/sharness/t0131-multinode-client-routing.sh
+73
-0
No files found.
cmd/ipfs/daemon.go
View file @
429decc9
...
...
@@ -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
)
...
...
This diff is collapsed.
Click to expand it.
core/core.go
View file @
429decc9
...
...
@@ -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
This diff is collapsed.
Click to expand it.
package.json
View file @
429decc9
...
...
@@ -52,9 +52,9 @@
"version"
:
"0.1.0"
},
{
"hash"
:
"Qm
a1FrGRasghpuETfCtsKdFtXKQffpNnakv3wG3QaMwCVi
"
,
"hash"
:
"Qm
PxBCkNrrtx5cmg62TxiE3JUM2zTqTpps3diQ9PgNrcgn
"
,
"name"
:
"iptb"
,
"version"
:
"1.
0
.0"
"version"
:
"1.
1
.0"
},
{
"hash"
:
"QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku"
,
...
...
This diff is collapsed.
Click to expand it.
test/sharness/t0131-multinode-client-routing.sh
0 → 100755
View file @
429decc9
#!/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
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment