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-bitswap
Commits
13ab516c
Commit
13ab516c
authored
Dec 07, 2014
by
Jeromy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
prevent sending of same block to a peer twice
parent
ccf6d93b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
25 additions
and
3 deletions
+25
-3
bitswap.go
bitswap.go
+1
-0
strategy/interface.go
strategy/interface.go
+2
-0
strategy/ledger.go
strategy/ledger.go
+8
-3
strategy/strategy.go
strategy/strategy.go
+14
-0
No files found.
bitswap.go
View file @
13ab516c
...
@@ -307,6 +307,7 @@ func (bs *bitswap) ReceiveMessage(ctx context.Context, p peer.Peer, incoming bsm
...
@@ -307,6 +307,7 @@ func (bs *bitswap) ReceiveMessage(ctx context.Context, p peer.Peer, incoming bsm
blkmsg
.
AddBlock
(
block
)
blkmsg
.
AddBlock
(
block
)
bs
.
send
(
ctx
,
p
,
blkmsg
)
bs
.
send
(
ctx
,
p
,
blkmsg
)
bs
.
strategy
.
BlockSentToPeer
(
block
.
Key
(),
p
)
}
}
}
}
}
}
...
...
strategy/interface.go
View file @
13ab516c
...
@@ -32,6 +32,8 @@ type Strategy interface {
...
@@ -32,6 +32,8 @@ type Strategy interface {
NumBytesReceivedFrom
(
peer
.
Peer
)
uint64
NumBytesReceivedFrom
(
peer
.
Peer
)
uint64
BlockSentToPeer
(
u
.
Key
,
peer
.
Peer
)
// Values determining bitswap behavioural patterns
// Values determining bitswap behavioural patterns
GetBatchSize
()
int
GetBatchSize
()
int
GetRebroadcastDelay
()
time
.
Duration
GetRebroadcastDelay
()
time
.
Duration
...
...
strategy/ledger.go
View file @
13ab516c
...
@@ -13,9 +13,10 @@ type keySet map[u.Key]struct{}
...
@@ -13,9 +13,10 @@ type keySet map[u.Key]struct{}
func
newLedger
(
p
peer
.
Peer
,
strategy
strategyFunc
)
*
ledger
{
func
newLedger
(
p
peer
.
Peer
,
strategy
strategyFunc
)
*
ledger
{
return
&
ledger
{
return
&
ledger
{
wantList
:
keySet
{},
wantList
:
keySet
{},
Strategy
:
strategy
,
Strategy
:
strategy
,
Partner
:
p
,
Partner
:
p
,
sentToPeer
:
make
(
map
[
u
.
Key
]
struct
{}),
}
}
}
}
...
@@ -40,6 +41,10 @@ type ledger struct {
...
@@ -40,6 +41,10 @@ type ledger struct {
// wantList is a (bounded, small) set of keys that Partner desires.
// wantList is a (bounded, small) set of keys that Partner desires.
wantList
keySet
wantList
keySet
// sentToPeer is a set of keys to ensure we dont send duplicate blocks
// to a given peer
sentToPeer
map
[
u
.
Key
]
struct
{}
Strategy
strategyFunc
Strategy
strategyFunc
}
}
...
...
strategy/strategy.go
View file @
13ab516c
...
@@ -65,9 +65,23 @@ func (s *strategist) ShouldSendBlockToPeer(k u.Key, p peer.Peer) bool {
...
@@ -65,9 +65,23 @@ func (s *strategist) ShouldSendBlockToPeer(k u.Key, p peer.Peer) bool {
defer
s
.
lock
.
RUnlock
()
defer
s
.
lock
.
RUnlock
()
ledger
:=
s
.
ledger
(
p
)
ledger
:=
s
.
ledger
(
p
)
// Dont resend blocks
if
_
,
ok
:=
ledger
.
sentToPeer
[
k
];
ok
{
return
false
}
return
ledger
.
ShouldSend
()
return
ledger
.
ShouldSend
()
}
}
func
(
s
*
strategist
)
BlockSentToPeer
(
k
u
.
Key
,
p
peer
.
Peer
)
{
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
ledger
:=
s
.
ledger
(
p
)
ledger
.
sentToPeer
[
k
]
=
struct
{}{}
}
func
(
s
*
strategist
)
Seed
(
int64
)
{
func
(
s
*
strategist
)
Seed
(
int64
)
{
s
.
lock
.
Lock
()
s
.
lock
.
Lock
()
defer
s
.
lock
.
Unlock
()
defer
s
.
lock
.
Unlock
()
...
...
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