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
c6f93380
Commit
c6f93380
authored
Oct 11, 2015
by
Jeromy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix random bitswap hangs
License: MIT Signed-off-by:
Jeromy
<
jeromyj@gmail.com
>
parent
4ace45d9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
3 deletions
+92
-3
exchange/bitswap/wantmanager.go
exchange/bitswap/wantmanager.go
+11
-3
test/sharness/t0130-multinode.sh
test/sharness/t0130-multinode.sh
+81
-0
No files found.
exchange/bitswap/wantmanager.go
View file @
c6f93380
...
...
@@ -56,6 +56,8 @@ type msgQueue struct {
out
bsmsg
.
BitSwapMessage
network
bsnet
.
BitSwapNetwork
refcnt
int
work
chan
struct
{}
done
chan
struct
{}
}
...
...
@@ -101,13 +103,13 @@ func (pm *WantManager) SendBlock(ctx context.Context, env *engine.Envelope) {
}
func
(
pm
*
WantManager
)
startPeerHandler
(
p
peer
.
ID
)
*
msgQueue
{
_
,
ok
:=
pm
.
peers
[
p
]
mq
,
ok
:=
pm
.
peers
[
p
]
if
ok
{
// TODO: log an error?
mq
.
refcnt
++
return
nil
}
mq
:
=
pm
.
newMsgQueue
(
p
)
mq
=
pm
.
newMsgQueue
(
p
)
// new peer, we will want to give them our full wantlist
fullwantlist
:=
bsmsg
.
New
(
true
)
...
...
@@ -129,6 +131,11 @@ func (pm *WantManager) stopPeerHandler(p peer.ID) {
return
}
pq
.
refcnt
--
if
pq
.
refcnt
>
0
{
return
}
close
(
pq
.
done
)
delete
(
pm
.
peers
,
p
)
}
...
...
@@ -247,6 +254,7 @@ func (wm *WantManager) newMsgQueue(p peer.ID) *msgQueue {
mq
.
work
=
make
(
chan
struct
{},
1
)
mq
.
network
=
wm
.
network
mq
.
p
=
p
mq
.
refcnt
=
1
return
mq
}
...
...
test/sharness/t0130-multinode.sh
0 → 100755
View file @
c6f93380
#!/bin/sh
#
# Copyright (c) 2015 Jeromy Johnson
# MIT Licensed; see the LICENSE file in this repository.
#
test_description
=
"Test multiple ipfs nodes"
.
lib/test-lib.sh
export
IPTB_ROOT
=
"
`
pwd
`
/.iptb"
ipfsi
()
{
dir
=
"
$1
"
shift
IPFS_PATH
=
"
$IPTB_ROOT
/
$dir
"
ipfs
$@
}
check_has_connection
()
{
node
=
$1
ipfsi
$node
swarm peers |
grep
ipfs
>
/dev/null
}
startup_cluster
()
{
test_expect_success
"start up nodes"
'
iptb start
'
test_expect_success
"connect nodes to eachother"
'
iptb connect [1-4] 0
'
test_expect_success
"nodes are connected"
'
check_has_connection 0 &&
check_has_connection 1 &&
check_has_connection 2 &&
check_has_connection 3 &&
check_has_connection 4
'
}
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_basic_test
()
{
startup_cluster
test_expect_success
"add a file on node1"
'
random 1000000 > filea &&
FILEA_HASH=$(ipfsi 1 add -q 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
test_expect_success
"shut down nodes"
'
iptb stop
'
}
test_expect_success
"set up tcp testbed"
'
iptb init -n 5 -p 0 -f --bootstrap=none
'
run_basic_test
test_done
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