Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
b36670df
提交
b36670df
authored
9月 16, 2014
作者:
Brian Tiger Chow
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refac(bitswap) privatize ledger
temporarily. at least until refactor is complete
上级
e4bceca2
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
17 行增加
和
17 行删除
+17
-17
bitswap.go
bitswap/bitswap.go
+4
-4
ledger.go
bitswap/ledger.go
+9
-9
ledger_test.go
bitswap/ledger_test.go
+1
-1
strategy.go
bitswap/strategy.go
+3
-3
没有找到文件。
bitswap/bitswap.go
浏览文件 @
b36670df
...
...
@@ -48,7 +48,7 @@ type bitswap struct {
// The Ledger has the peer.ID, and the peer connection works through net.
// Ledgers of known relationships (active or inactive) stored in datastore.
// Changes to the Ledger should be committed to the datastore.
partners
L
edgerMap
partners
l
edgerMap
// haveList is the set of keys we have values for. a map for fast lookups.
// haveList KeySet -- not needed. all values in datastore?
...
...
@@ -68,7 +68,7 @@ func NewSession(parent context.Context, s bsnet.NetworkService, p *peer.Peer, d
bs
:=
&
bitswap
{
peer
:
p
,
blockstore
:
blockstore
.
NewBlockstore
(
d
),
partners
:
L
edgerMap
{},
partners
:
l
edgerMap
{},
wantList
:
KeySet
{},
routing
:
r
,
sender
:
bsnet
.
NewNetworkAdapter
(
s
,
&
receiver
),
...
...
@@ -196,13 +196,13 @@ func (bs *bitswap) blockReceive(p *peer.Peer, blk blocks.Block) {
ledger
.
ReceivedBytes
(
len
(
blk
.
Data
))
}
func
(
bs
*
bitswap
)
getLedger
(
p
*
peer
.
Peer
)
*
L
edger
{
func
(
bs
*
bitswap
)
getLedger
(
p
*
peer
.
Peer
)
*
l
edger
{
l
,
ok
:=
bs
.
partners
[
p
.
Key
()]
if
ok
{
return
l
}
l
=
new
(
L
edger
)
l
=
new
(
l
edger
)
l
.
Strategy
=
bs
.
strategy
l
.
Partner
=
p
bs
.
partners
[
p
.
Key
()]
=
l
...
...
bitswap/ledger.go
浏览文件 @
b36670df
...
...
@@ -8,8 +8,8 @@ import (
u
"github.com/jbenet/go-ipfs/util"
)
//
L
edger stores the data exchange relationship between two peers.
type
L
edger
struct
{
//
l
edger stores the data exchange relationship between two peers.
type
l
edger
struct
{
lock
sync
.
RWMutex
// Partner is the remote Peer.
...
...
@@ -34,16 +34,16 @@ type Ledger struct {
}
// LedgerMap lists Ledgers by their Partner key.
type
LedgerMap
map
[
u
.
Key
]
*
L
edger
type
ledgerMap
map
[
u
.
Key
]
*
l
edger
func
(
l
*
L
edger
)
ShouldSend
()
bool
{
func
(
l
*
l
edger
)
ShouldSend
()
bool
{
l
.
lock
.
Lock
()
defer
l
.
lock
.
Unlock
()
return
l
.
Strategy
(
l
)
}
func
(
l
*
L
edger
)
SentBytes
(
n
int
)
{
func
(
l
*
l
edger
)
SentBytes
(
n
int
)
{
l
.
lock
.
Lock
()
defer
l
.
lock
.
Unlock
()
...
...
@@ -52,7 +52,7 @@ func (l *Ledger) SentBytes(n int) {
l
.
Accounting
.
BytesSent
+=
uint64
(
n
)
}
func
(
l
*
L
edger
)
ReceivedBytes
(
n
int
)
{
func
(
l
*
l
edger
)
ReceivedBytes
(
n
int
)
{
l
.
lock
.
Lock
()
defer
l
.
lock
.
Unlock
()
...
...
@@ -62,14 +62,14 @@ func (l *Ledger) ReceivedBytes(n int) {
}
// TODO: this needs to be different. We need timeouts.
func
(
l
*
L
edger
)
Wants
(
k
u
.
Key
)
{
func
(
l
*
l
edger
)
Wants
(
k
u
.
Key
)
{
l
.
lock
.
Lock
()
defer
l
.
lock
.
Unlock
()
l
.
wantList
[
k
]
=
struct
{}{}
}
func
(
l
*
L
edger
)
WantListContains
(
k
u
.
Key
)
bool
{
func
(
l
*
l
edger
)
WantListContains
(
k
u
.
Key
)
bool
{
l
.
lock
.
RLock
()
defer
l
.
lock
.
RUnlock
()
...
...
@@ -77,7 +77,7 @@ func (l *Ledger) WantListContains(k u.Key) bool {
return
ok
}
func
(
l
*
L
edger
)
ExchangeCount
()
uint64
{
func
(
l
*
l
edger
)
ExchangeCount
()
uint64
{
l
.
lock
.
RLock
()
defer
l
.
lock
.
RUnlock
()
return
l
.
exchangeCount
...
...
bitswap/ledger_test.go
浏览文件 @
b36670df
...
...
@@ -7,7 +7,7 @@ import (
func
TestRaceConditions
(
t
*
testing
.
T
)
{
const
numberOfExpectedExchanges
=
10000
l
:=
new
(
L
edger
)
l
:=
new
(
l
edger
)
var
wg
sync
.
WaitGroup
for
i
:=
0
;
i
<
numberOfExpectedExchanges
;
i
++
{
wg
.
Add
(
1
)
...
...
bitswap/strategy.go
浏览文件 @
b36670df
...
...
@@ -5,13 +5,13 @@ import (
"math/rand"
)
type
strategyFunc
func
(
*
L
edger
)
bool
type
strategyFunc
func
(
*
l
edger
)
bool
func
standardStrategy
(
l
*
L
edger
)
bool
{
func
standardStrategy
(
l
*
l
edger
)
bool
{
return
rand
.
Float64
()
<=
probabilitySend
(
l
.
Accounting
.
Value
())
}
func
yesManStrategy
(
l
*
L
edger
)
bool
{
func
yesManStrategy
(
l
*
l
edger
)
bool
{
return
true
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论