mirror of
https://github.com/ipfs/kubo.git
synced 2025-07-02 03:28:25 +08:00
fix(bitswap) preserve ordering in bitswap message
This commit is contained in:
@ -27,14 +27,16 @@ type Exportable interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type impl struct {
|
type impl struct {
|
||||||
wantlist map[u.Key]struct{}
|
existsInWantlist map[u.Key]struct{} // map to detect duplicates
|
||||||
blocks map[u.Key]blocks.Block
|
wantlist []u.Key // slice to preserve ordering
|
||||||
|
blocks map[u.Key]blocks.Block // map to detect duplicates
|
||||||
}
|
}
|
||||||
|
|
||||||
func New() BitSwapMessage {
|
func New() BitSwapMessage {
|
||||||
return &impl{
|
return &impl{
|
||||||
wantlist: make(map[u.Key]struct{}),
|
|
||||||
blocks: make(map[u.Key]blocks.Block),
|
blocks: make(map[u.Key]blocks.Block),
|
||||||
|
existsInWantlist: make(map[u.Key]struct{}),
|
||||||
|
wantlist: make([]u.Key, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,16 +52,10 @@ func newMessageFromProto(pbm pb.Message) BitSwapMessage {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(brian): convert these into keys
|
|
||||||
func (m *impl) Wantlist() []u.Key {
|
func (m *impl) Wantlist() []u.Key {
|
||||||
wl := make([]u.Key, 0)
|
return m.wantlist
|
||||||
for k, _ := range m.wantlist {
|
|
||||||
wl = append(wl, k)
|
|
||||||
}
|
|
||||||
return wl
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(brian): convert these into blocks
|
|
||||||
func (m *impl) Blocks() []blocks.Block {
|
func (m *impl) Blocks() []blocks.Block {
|
||||||
bs := make([]blocks.Block, 0)
|
bs := make([]blocks.Block, 0)
|
||||||
for _, block := range m.blocks {
|
for _, block := range m.blocks {
|
||||||
@ -69,7 +65,12 @@ func (m *impl) Blocks() []blocks.Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *impl) AddWanted(k u.Key) {
|
func (m *impl) AddWanted(k u.Key) {
|
||||||
m.wantlist[k] = struct{}{}
|
_, exists := m.existsInWantlist[k]
|
||||||
|
if exists {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m.existsInWantlist[k] = struct{}{}
|
||||||
|
m.wantlist = append(m.wantlist, k)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *impl) AddBlock(b blocks.Block) {
|
func (m *impl) AddBlock(b blocks.Block) {
|
||||||
|
Reference in New Issue
Block a user