@helia/bitswap 1.0.1-fa9bd4b → 1.1.0-55b9650
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/src/network.d.ts +3 -2
- package/dist/src/network.d.ts.map +1 -1
- package/dist/src/network.js +5 -15
- package/dist/src/network.js.map +1 -1
- package/dist/src/peer-want-lists/ledger.d.ts.map +1 -1
- package/dist/src/peer-want-lists/ledger.js +41 -40
- package/dist/src/peer-want-lists/ledger.js.map +1 -1
- package/dist/src/utils/bitswap-message.d.ts +19 -0
- package/dist/src/utils/bitswap-message.d.ts.map +1 -0
- package/dist/src/utils/bitswap-message.js +33 -0
- package/dist/src/utils/bitswap-message.js.map +1 -0
- package/dist/src/utils/merge-messages.d.ts +2 -2
- package/dist/src/utils/merge-messages.d.ts.map +1 -1
- package/dist/src/utils/merge-messages.js +12 -34
- package/dist/src/utils/merge-messages.js.map +1 -1
- package/dist/src/utils/split-message.d.ts +2 -2
- package/dist/src/utils/split-message.d.ts.map +1 -1
- package/dist/src/utils/split-message.js +5 -5
- package/dist/src/utils/split-message.js.map +1 -1
- package/dist/src/want-list.d.ts.map +1 -1
- package/dist/src/want-list.js +49 -65
- package/dist/src/want-list.js.map +1 -1
- package/package.json +4 -5
- package/src/network.ts +7 -17
- package/src/peer-want-lists/ledger.ts +40 -42
- package/src/utils/bitswap-message.ts +39 -0
- package/src/utils/merge-messages.ts +12 -45
- package/src/utils/split-message.ts +6 -5
- package/src/want-list.ts +55 -77
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"want-list.js","sourceRoot":"","sources":["../../src/want-list.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/bitswap",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0-55b9650",
|
|
4
4
|
"description": "JavaScript implementation of the Bitswap data exchange protocol used by Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/main/packages/bitswap#readme",
|
|
@@ -148,8 +148,8 @@
|
|
|
148
148
|
"docs": "aegir docs"
|
|
149
149
|
},
|
|
150
150
|
"dependencies": {
|
|
151
|
-
"@helia/interface": "4.
|
|
152
|
-
"@helia/utils": "0.
|
|
151
|
+
"@helia/interface": "4.3.0-55b9650",
|
|
152
|
+
"@helia/utils": "0.3.0-55b9650",
|
|
153
153
|
"@libp2p/interface": "^1.1.2",
|
|
154
154
|
"@libp2p/logger": "^4.0.5",
|
|
155
155
|
"@libp2p/peer-collections": "^5.1.6",
|
|
@@ -158,9 +158,7 @@
|
|
|
158
158
|
"any-signal": "^4.1.1",
|
|
159
159
|
"interface-blockstore": "^5.2.9",
|
|
160
160
|
"interface-store": "^5.1.7",
|
|
161
|
-
"it-all": "^3.0.4",
|
|
162
161
|
"it-drain": "^3.0.5",
|
|
163
|
-
"it-filter": "^3.0.4",
|
|
164
162
|
"it-length-prefixed": "^9.0.0",
|
|
165
163
|
"it-length-prefixed-stream": "^1.1.6",
|
|
166
164
|
"it-map": "^3.0.5",
|
|
@@ -183,6 +181,7 @@
|
|
|
183
181
|
"aegir": "^42.2.2",
|
|
184
182
|
"blockstore-core": "^4.3.10",
|
|
185
183
|
"delay": "^6.0.0",
|
|
184
|
+
"it-all": "^3.0.4",
|
|
186
185
|
"it-pair": "^2.0.6",
|
|
187
186
|
"it-protobuf-stream": "^1.1.2",
|
|
188
187
|
"p-event": "^6.0.0",
|
package/src/network.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { splitMessage } from './utils/split-message.js'
|
|
|
14
14
|
import type { WantOptions } from './bitswap.js'
|
|
15
15
|
import type { MultihashHasherLoader } from './index.js'
|
|
16
16
|
import type { Block } from './pb/message.js'
|
|
17
|
+
import type { QueuedBitswapMessage } from './utils/bitswap-message.js'
|
|
17
18
|
import type { Provider, Routing } from '@helia/interface/routing'
|
|
18
19
|
import type { Libp2p, AbortOptions, Connection, PeerId, IncomingStreamData, Topology, ComponentLogger, IdentifyResult, Counter, Metrics } from '@libp2p/interface'
|
|
19
20
|
import type { Logger } from '@libp2p/logger'
|
|
@@ -64,7 +65,7 @@ export interface NetworkEvents {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
interface SendMessageJobOptions extends AbortOptions, ProgressOptions, PeerQueueJobOptions {
|
|
67
|
-
message:
|
|
68
|
+
message: QueuedBitswapMessage
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
@@ -187,9 +188,9 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
187
188
|
this.log('incoming new bitswap %s stream from %p', stream.protocol, connection.remotePeer)
|
|
188
189
|
const abortListener = (): void => {
|
|
189
190
|
if (stream.status === 'open') {
|
|
190
|
-
stream.abort(new CodeError(
|
|
191
|
+
stream.abort(new CodeError(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`, 'ERR_TIMEOUT'))
|
|
191
192
|
} else {
|
|
192
|
-
this.log('stream aborted with status', stream.status)
|
|
193
|
+
this.log('stream aborted with status %s', stream.status)
|
|
193
194
|
}
|
|
194
195
|
}
|
|
195
196
|
|
|
@@ -276,27 +277,16 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
276
277
|
* Connect to the given peer
|
|
277
278
|
* Send the given msg (instance of Message) to the given peer
|
|
278
279
|
*/
|
|
279
|
-
async sendMessage (peerId: PeerId,
|
|
280
|
+
async sendMessage (peerId: PeerId, message: QueuedBitswapMessage, options?: AbortOptions & ProgressOptions<BitswapNetworkWantProgressEvents>): Promise<void> {
|
|
280
281
|
if (!this.running) {
|
|
281
282
|
throw new Error('network isn\'t running')
|
|
282
283
|
}
|
|
283
284
|
|
|
284
|
-
const message: BitswapMessage = {
|
|
285
|
-
wantlist: {
|
|
286
|
-
full: msg.wantlist?.full ?? false,
|
|
287
|
-
entries: msg.wantlist?.entries ?? []
|
|
288
|
-
},
|
|
289
|
-
blocks: msg.blocks ?? [],
|
|
290
|
-
blockPresences: msg.blockPresences ?? [],
|
|
291
|
-
pendingBytes: msg.pendingBytes ?? 0
|
|
292
|
-
}
|
|
293
|
-
|
|
294
285
|
const existingJob = this.sendQueue.queue.find(job => {
|
|
295
286
|
return peerId.equals(job.options.peerId) && job.status === 'queued'
|
|
296
287
|
})
|
|
297
288
|
|
|
298
289
|
if (existingJob != null) {
|
|
299
|
-
// merge messages instead of adding new job
|
|
300
290
|
existingJob.options.message = mergeMessages(existingJob.options.message, message)
|
|
301
291
|
|
|
302
292
|
await existingJob.join({
|
|
@@ -377,7 +367,7 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
377
367
|
return connection
|
|
378
368
|
}
|
|
379
369
|
|
|
380
|
-
_updateSentStats (blocks: Block
|
|
370
|
+
_updateSentStats (blocks: Map<string, Block>): void {
|
|
381
371
|
let bytes = 0
|
|
382
372
|
|
|
383
373
|
for (const block of blocks.values()) {
|
|
@@ -385,6 +375,6 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
385
375
|
}
|
|
386
376
|
|
|
387
377
|
this.metrics.dataSent?.increment(bytes)
|
|
388
|
-
this.metrics.blocksSent?.increment(blocks.
|
|
378
|
+
this.metrics.blocksSent?.increment(blocks.size)
|
|
389
379
|
}
|
|
390
380
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable max-depth */
|
|
2
2
|
import { DEFAULT_MAX_SIZE_REPLACE_HAS_WITH_BLOCK } from '../constants.js'
|
|
3
|
-
import { BlockPresenceType,
|
|
3
|
+
import { BlockPresenceType, WantType } from '../pb/message.js'
|
|
4
|
+
import { QueuedBitswapMessage } from '../utils/bitswap-message.js'
|
|
4
5
|
import { cidToPrefix } from '../utils/cid-prefix.js'
|
|
5
6
|
import type { Network } from '../network.js'
|
|
6
7
|
import type { ComponentLogger, Logger, PeerId } from '@libp2p/interface'
|
|
@@ -89,16 +90,45 @@ export class Ledger {
|
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
public async sendBlocksToPeer (options?: AbortOptions): Promise<void> {
|
|
92
|
-
const message
|
|
93
|
-
blockPresences: [],
|
|
94
|
-
blocks: []
|
|
95
|
-
}
|
|
93
|
+
const message = new QueuedBitswapMessage()
|
|
96
94
|
const sentBlocks = new Set<string>()
|
|
97
95
|
|
|
98
96
|
for (const [key, entry] of this.wants.entries()) {
|
|
99
|
-
|
|
97
|
+
try {
|
|
98
|
+
const block = await this.blockstore.get(entry.cid, options)
|
|
99
|
+
|
|
100
|
+
// do they want the block or just us to tell them we have the block
|
|
101
|
+
if (entry.wantType === WantType.WantHave) {
|
|
102
|
+
if (block.byteLength < this.maxSizeReplaceHasWithBlock) {
|
|
103
|
+
this.log('sending have and block for %c', entry.cid)
|
|
104
|
+
// if the block is small we just send it to them
|
|
105
|
+
sentBlocks.add(key)
|
|
106
|
+
message.addBlock(entry.cid, {
|
|
107
|
+
data: block,
|
|
108
|
+
prefix: cidToPrefix(entry.cid)
|
|
109
|
+
})
|
|
110
|
+
} else {
|
|
111
|
+
this.log('sending have for %c', entry.cid)
|
|
112
|
+
// otherwise tell them we have the block
|
|
113
|
+
message.addBlockPresence(entry.cid, {
|
|
114
|
+
cid: entry.cid.bytes,
|
|
115
|
+
type: BlockPresenceType.HaveBlock
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
this.log('sending block for %c', entry.cid)
|
|
120
|
+
// they want the block, send it to them
|
|
121
|
+
sentBlocks.add(key)
|
|
122
|
+
message.addBlock(entry.cid, {
|
|
123
|
+
data: block,
|
|
124
|
+
prefix: cidToPrefix(entry.cid)
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
} catch (err: any) {
|
|
128
|
+
if (err.code !== 'ERR_NOT_FOUND') {
|
|
129
|
+
throw err
|
|
130
|
+
}
|
|
100
131
|
|
|
101
|
-
if (!has) {
|
|
102
132
|
this.log('do not have block for %c', entry.cid)
|
|
103
133
|
|
|
104
134
|
// we don't have the requested block and the remote is not interested
|
|
@@ -113,53 +143,21 @@ export class Ledger {
|
|
|
113
143
|
}
|
|
114
144
|
|
|
115
145
|
entry.sentDontHave = true
|
|
116
|
-
message.
|
|
146
|
+
message.addBlockPresence(entry.cid, {
|
|
117
147
|
cid: entry.cid.bytes,
|
|
118
148
|
type: BlockPresenceType.DontHaveBlock
|
|
119
149
|
})
|
|
120
|
-
|
|
121
|
-
continue
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const block = await this.blockstore.get(entry.cid, options)
|
|
125
|
-
|
|
126
|
-
// do they want the block or just us to tell them we have the block
|
|
127
|
-
if (entry.wantType === WantType.WantHave) {
|
|
128
|
-
if (block.byteLength < this.maxSizeReplaceHasWithBlock) {
|
|
129
|
-
this.log('sending have and block for %c', entry.cid)
|
|
130
|
-
// if the block is small we just send it to them
|
|
131
|
-
sentBlocks.add(key)
|
|
132
|
-
message.blocks.push({
|
|
133
|
-
data: block,
|
|
134
|
-
prefix: cidToPrefix(entry.cid)
|
|
135
|
-
})
|
|
136
|
-
} else {
|
|
137
|
-
this.log('sending have for %c', entry.cid)
|
|
138
|
-
// otherwise tell them we have the block
|
|
139
|
-
message.blockPresences.push({
|
|
140
|
-
cid: entry.cid.bytes,
|
|
141
|
-
type: BlockPresenceType.HaveBlock
|
|
142
|
-
})
|
|
143
|
-
}
|
|
144
|
-
} else {
|
|
145
|
-
this.log('sending block for %c', entry.cid)
|
|
146
|
-
// they want the block, send it to them
|
|
147
|
-
sentBlocks.add(key)
|
|
148
|
-
message.blocks.push({
|
|
149
|
-
data: block,
|
|
150
|
-
prefix: cidToPrefix(entry.cid)
|
|
151
|
-
})
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
152
|
|
|
155
153
|
// only send the message if we actually have something to send
|
|
156
|
-
if (message.blocks.
|
|
154
|
+
if (message.blocks.size > 0 || message.blockPresences.size > 0) {
|
|
157
155
|
this.log('sending message')
|
|
158
156
|
await this.network.sendMessage(this.peerId, message, options)
|
|
159
157
|
this.log('sent message')
|
|
160
158
|
|
|
161
159
|
// update accounting
|
|
162
|
-
this.sentBytes(message.blocks.reduce((acc, curr) => acc + curr.data.byteLength, 0))
|
|
160
|
+
this.sentBytes([...message.blocks.values()].reduce((acc, curr) => acc + curr.data.byteLength, 0))
|
|
163
161
|
|
|
164
162
|
// remove sent blocks from local copy of their want list - they can still
|
|
165
163
|
// re-request if required
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { base64 } from 'multiformats/bases/base64'
|
|
2
|
+
import type { Block, BlockPresence, WantlistEntry } from '../pb/message.js'
|
|
3
|
+
import type { CID } from 'multiformats'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A bitswap message that is in the send queue. So implemented to be
|
|
7
|
+
* cheap to merge multiple messages when we repeatedly send messages
|
|
8
|
+
* to the same peer.
|
|
9
|
+
*/
|
|
10
|
+
export class QueuedBitswapMessage {
|
|
11
|
+
public full: boolean
|
|
12
|
+
public pendingBytes: number
|
|
13
|
+
public wantlist: Map<string, WantlistEntry>
|
|
14
|
+
public blocks: Map<string, Block>
|
|
15
|
+
public blockPresences: Map<string, BlockPresence>
|
|
16
|
+
|
|
17
|
+
constructor (full: boolean = false, pendingBytes: number = 0) {
|
|
18
|
+
this.full = full
|
|
19
|
+
this.wantlist = new Map()
|
|
20
|
+
this.blocks = new Map()
|
|
21
|
+
this.blockPresences = new Map()
|
|
22
|
+
this.pendingBytes = 0
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
addWantlistEntry (cid: CID, entry: WantlistEntry): void {
|
|
26
|
+
const key = base64.encode(cid.multihash.bytes)
|
|
27
|
+
this.wantlist.set(key, entry)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
addBlockPresence (cid: CID, blockPresence: BlockPresence): void {
|
|
31
|
+
const key = base64.encode(cid.multihash.bytes)
|
|
32
|
+
this.blockPresences.set(key, blockPresence)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
addBlock (cid: CID, block: Block): void {
|
|
36
|
+
const key = base64.encode(cid.multihash.bytes)
|
|
37
|
+
this.blocks.set(key, block)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { BitswapMessage, Block, BlockPresence, WantlistEntry } from '../pb/message.js'
|
|
1
|
+
import type { QueuedBitswapMessage } from './bitswap-message.js'
|
|
3
2
|
|
|
4
|
-
export function mergeMessages (
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
base64.encode(entry.cid),
|
|
8
|
-
entry
|
|
9
|
-
]))
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
for (const entry of messageB.wantlist?.entries ?? []) {
|
|
13
|
-
const key = base64.encode(entry.cid)
|
|
14
|
-
const existingEntry = wantListEntries.get(key)
|
|
3
|
+
export function mergeMessages (existingMessage: QueuedBitswapMessage, newMessage: QueuedBitswapMessage): QueuedBitswapMessage {
|
|
4
|
+
for (const [key, entry] of newMessage.wantlist.entries()) {
|
|
5
|
+
const existingEntry = existingMessage.wantlist.get(key)
|
|
15
6
|
|
|
16
7
|
if (existingEntry != null) {
|
|
17
8
|
// take highest priority
|
|
@@ -25,46 +16,22 @@ export function mergeMessages (messageA: BitswapMessage, messageB: BitswapMessag
|
|
|
25
16
|
entry.sendDontHave = entry.sendDontHave ?? existingEntry.sendDontHave
|
|
26
17
|
}
|
|
27
18
|
|
|
28
|
-
|
|
19
|
+
existingMessage.wantlist.set(key, entry)
|
|
29
20
|
}
|
|
30
21
|
|
|
31
|
-
const
|
|
32
|
-
messageA.blockPresences.map(presence => ([
|
|
33
|
-
base64.encode(presence.cid),
|
|
34
|
-
presence
|
|
35
|
-
]))
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
for (const blockPresence of messageB.blockPresences) {
|
|
39
|
-
const key = base64.encode(blockPresence.cid)
|
|
40
|
-
|
|
22
|
+
for (const [key, blockPresence] of newMessage.blockPresences.entries()) {
|
|
41
23
|
// override earlier block presence with later one as if duplicated it is
|
|
42
24
|
// likely to be more accurate since it is more recent
|
|
43
|
-
blockPresences.set(key, blockPresence)
|
|
25
|
+
existingMessage.blockPresences.set(key, blockPresence)
|
|
44
26
|
}
|
|
45
27
|
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
base64.encode(block.data),
|
|
49
|
-
block
|
|
50
|
-
]))
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
for (const block of messageB.blocks) {
|
|
54
|
-
const key = base64.encode(block.data)
|
|
55
|
-
|
|
56
|
-
blocks.set(key, block)
|
|
28
|
+
for (const [key, block] of newMessage.blocks.entries()) {
|
|
29
|
+
existingMessage.blocks.set(key, block)
|
|
57
30
|
}
|
|
58
31
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
full: messageA.wantlist?.full ?? messageB.wantlist?.full ?? false,
|
|
62
|
-
entries: [...wantListEntries.values()]
|
|
63
|
-
},
|
|
64
|
-
blockPresences: [...blockPresences.values()],
|
|
65
|
-
blocks: [...blocks.values()],
|
|
66
|
-
pendingBytes: messageA.pendingBytes + messageB.pendingBytes
|
|
32
|
+
if (newMessage.full && !existingMessage.full) {
|
|
33
|
+
existingMessage.full = true
|
|
67
34
|
}
|
|
68
35
|
|
|
69
|
-
return
|
|
36
|
+
return existingMessage
|
|
70
37
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { CodeError } from '@libp2p/interface'
|
|
3
3
|
import { encodingLength } from 'uint8-varint'
|
|
4
4
|
import { BitswapMessage, Block, BlockPresence, WantlistEntry } from '../pb/message.js'
|
|
5
|
+
import type { QueuedBitswapMessage } from './bitswap-message.js'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* https://github.com/ipfs/kubo/issues/4473#issuecomment-350390693
|
|
@@ -20,10 +21,10 @@ const MAX_ENCODED_BLOCK_SIZE = MAX_BLOCK_SIZE + 16
|
|
|
20
21
|
* If a block is encountered that is larger than the max message size an error
|
|
21
22
|
* will be thrown.
|
|
22
23
|
*/
|
|
23
|
-
export
|
|
24
|
-
const wantListEntries = message.wantlist
|
|
25
|
-
const blockPresences = message.blockPresences
|
|
26
|
-
const blocks = message.blocks
|
|
24
|
+
export function * splitMessage (message: QueuedBitswapMessage, maxSize: number): Generator<Uint8Array> {
|
|
25
|
+
const wantListEntries = [...message.wantlist.values()]
|
|
26
|
+
const blockPresences = [...message.blockPresences.values()]
|
|
27
|
+
const blocks = [...message.blocks.values()]
|
|
27
28
|
|
|
28
29
|
let wantListIndex = 0
|
|
29
30
|
let blockPresencesIndex = 0
|
|
@@ -33,7 +34,7 @@ export async function * splitMessage (message: BitswapMessage, maxSize: number):
|
|
|
33
34
|
while (true) {
|
|
34
35
|
const subMessage: Required<BitswapMessage> = {
|
|
35
36
|
wantlist: {
|
|
36
|
-
full: message.
|
|
37
|
+
full: message.full ?? false,
|
|
37
38
|
entries: []
|
|
38
39
|
},
|
|
39
40
|
blockPresences: [],
|
package/src/want-list.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface'
|
|
2
2
|
import { trackedPeerMap } from '@libp2p/peer-collections'
|
|
3
3
|
import { trackedMap } from '@libp2p/utils/tracked-map'
|
|
4
|
-
import all from 'it-all'
|
|
5
|
-
import filter from 'it-filter'
|
|
6
|
-
import map from 'it-map'
|
|
7
|
-
import { pipe } from 'it-pipe'
|
|
8
4
|
import { CID } from 'multiformats/cid'
|
|
9
5
|
import { sha256 } from 'multiformats/hashes/sha2'
|
|
10
6
|
import pDefer from 'p-defer'
|
|
@@ -13,6 +9,7 @@ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
|
13
9
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
14
10
|
import { DEFAULT_MESSAGE_SEND_DELAY } from './constants.js'
|
|
15
11
|
import { BlockPresenceType, WantType } from './pb/message.js'
|
|
12
|
+
import { QueuedBitswapMessage } from './utils/bitswap-message.js'
|
|
16
13
|
import vd from './utils/varint-decoder.js'
|
|
17
14
|
import type { BitswapNotifyProgressEvents, MultihashHasherLoader } from './index.js'
|
|
18
15
|
import type { BitswapNetworkWantProgressEvents, Network } from './network.js'
|
|
@@ -219,39 +216,29 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
|
|
|
219
216
|
await Promise.all(
|
|
220
217
|
[...this.peers.entries()].map(async ([peerId, sentWants]) => {
|
|
221
218
|
const sent = new Set<string>()
|
|
222
|
-
const message
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (entry.cancel) {
|
|
232
|
-
return sentPreviously
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// only send if we've not sent it to them before
|
|
236
|
-
return !sentPreviously
|
|
237
|
-
}),
|
|
238
|
-
(source) => map(source, ([key, entry]) => {
|
|
239
|
-
sent.add(key)
|
|
240
|
-
|
|
241
|
-
return {
|
|
242
|
-
cid: entry.cid.bytes,
|
|
243
|
-
priority: entry.priority,
|
|
244
|
-
wantType: entry.wantType,
|
|
245
|
-
cancel: entry.cancel,
|
|
246
|
-
sendDontHave: entry.sendDontHave
|
|
247
|
-
}
|
|
248
|
-
}),
|
|
249
|
-
(source) => all(source)
|
|
250
|
-
)
|
|
219
|
+
const message = new QueuedBitswapMessage()
|
|
220
|
+
|
|
221
|
+
for (const [key, entry] of this.wants.entries()) {
|
|
222
|
+
const sentPreviously = sentWants.has(key)
|
|
223
|
+
|
|
224
|
+
// only send if either we've not sent it before, or we haven't sent it
|
|
225
|
+
// but we're also cancelling the want.
|
|
226
|
+
if (sentPreviously || entry.cancel) {
|
|
227
|
+
continue
|
|
251
228
|
}
|
|
229
|
+
|
|
230
|
+
sent.add(key)
|
|
231
|
+
|
|
232
|
+
message.addWantlistEntry(entry.cid, {
|
|
233
|
+
cid: entry.cid.bytes,
|
|
234
|
+
priority: entry.priority,
|
|
235
|
+
wantType: entry.wantType,
|
|
236
|
+
cancel: entry.cancel,
|
|
237
|
+
sendDontHave: entry.sendDontHave
|
|
238
|
+
})
|
|
252
239
|
}
|
|
253
240
|
|
|
254
|
-
if (message.wantlist
|
|
241
|
+
if (message.wantlist.size === 0) {
|
|
255
242
|
return
|
|
256
243
|
}
|
|
257
244
|
|
|
@@ -295,19 +282,17 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
|
|
|
295
282
|
* Add a CID to the wantlist
|
|
296
283
|
*/
|
|
297
284
|
async wantSessionPresence (cid: CID, peerId: PeerId, options: WantOptions = {}): Promise<WantPresenceResult> {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
sendDontHave: true,
|
|
305
|
-
wantType: WantType.WantHave,
|
|
306
|
-
priority: 1
|
|
307
|
-
}]
|
|
308
|
-
}
|
|
285
|
+
const message = new QueuedBitswapMessage()
|
|
286
|
+
message.addWantlistEntry(cid, {
|
|
287
|
+
cid: cid.bytes,
|
|
288
|
+
sendDontHave: true,
|
|
289
|
+
wantType: WantType.WantHave,
|
|
290
|
+
priority: 1
|
|
309
291
|
})
|
|
310
292
|
|
|
293
|
+
// sending WantHave directly to peer
|
|
294
|
+
await this.network.sendMessage(peerId, message)
|
|
295
|
+
|
|
311
296
|
// wait for peer response
|
|
312
297
|
const event = await raceEvent<CustomEvent<WantHaveResult | WantDontHaveResult>>(this, 'presence', options.signal, {
|
|
313
298
|
filter: (event) => {
|
|
@@ -332,19 +317,17 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
|
|
|
332
317
|
* Add a CID to the wantlist
|
|
333
318
|
*/
|
|
334
319
|
async wantSessionBlock (cid: CID, peerId: PeerId, options: WantOptions = {}): Promise<WantPresenceResult> {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
sendDontHave: true,
|
|
342
|
-
wantType: WantType.WantBlock,
|
|
343
|
-
priority: 1
|
|
344
|
-
}]
|
|
345
|
-
}
|
|
320
|
+
const message = new QueuedBitswapMessage()
|
|
321
|
+
message.addWantlistEntry(cid, {
|
|
322
|
+
cid: cid.bytes,
|
|
323
|
+
sendDontHave: true,
|
|
324
|
+
wantType: WantType.WantBlock,
|
|
325
|
+
priority: 1
|
|
346
326
|
})
|
|
347
327
|
|
|
328
|
+
// sending WantBlockResult directly to peer
|
|
329
|
+
await this.network.sendMessage(peerId, message)
|
|
330
|
+
|
|
348
331
|
// wait for peer response
|
|
349
332
|
const event = await raceEvent<CustomEvent<WantPresenceResult>>(this, 'presence', options.signal, {
|
|
350
333
|
filter: (event) => {
|
|
@@ -376,7 +359,7 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
|
|
|
376
359
|
* Invoked when a message is received from a bitswap peer
|
|
377
360
|
*/
|
|
378
361
|
private async receiveMessage (sender: PeerId, message: BitswapMessage): Promise<void> {
|
|
379
|
-
this.log('received message
|
|
362
|
+
this.log('received message from %p with %d blocks', sender, message.blocks.length)
|
|
380
363
|
let blocksCancelled = false
|
|
381
364
|
|
|
382
365
|
// process blocks
|
|
@@ -464,32 +447,27 @@ export class WantList extends TypedEventEmitter<WantListEvents> implements Start
|
|
|
464
447
|
*/
|
|
465
448
|
async peerConnected (peerId: PeerId): Promise<void> {
|
|
466
449
|
const sentWants = new Set<string>()
|
|
450
|
+
const message = new QueuedBitswapMessage(true)
|
|
467
451
|
|
|
468
452
|
// new peer, give them the full wantlist
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
entries: pipe(
|
|
473
|
-
this.wants.entries(),
|
|
474
|
-
(source) => filter(source, ([key, entry]) => !entry.cancel),
|
|
475
|
-
(source) => map(source, ([key, entry]) => {
|
|
476
|
-
sentWants.add(key)
|
|
477
|
-
|
|
478
|
-
return {
|
|
479
|
-
cid: entry.cid.bytes,
|
|
480
|
-
priority: 1,
|
|
481
|
-
wantType: WantType.WantBlock,
|
|
482
|
-
cancel: false,
|
|
483
|
-
sendDontHave: false
|
|
484
|
-
}
|
|
485
|
-
}),
|
|
486
|
-
(source) => all(source)
|
|
487
|
-
)
|
|
453
|
+
for (const [key, entry] of this.wants.entries()) {
|
|
454
|
+
if (entry.cancel) {
|
|
455
|
+
continue
|
|
488
456
|
}
|
|
457
|
+
|
|
458
|
+
sentWants.add(key)
|
|
459
|
+
|
|
460
|
+
message.addWantlistEntry(entry.cid, {
|
|
461
|
+
cid: entry.cid.bytes,
|
|
462
|
+
priority: 1,
|
|
463
|
+
wantType: WantType.WantBlock,
|
|
464
|
+
cancel: false,
|
|
465
|
+
sendDontHave: false
|
|
466
|
+
})
|
|
489
467
|
}
|
|
490
468
|
|
|
491
469
|
// only send the wantlist if we have something to send
|
|
492
|
-
if (message.wantlist
|
|
470
|
+
if (message.wantlist.size === 0) {
|
|
493
471
|
this.peers.set(peerId, sentWants)
|
|
494
472
|
|
|
495
473
|
return
|