@helia/bitswap 0.0.0-9c8a2c0 → 0.0.0-9ea934e
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 +6 -1
- package/dist/src/bitswap.d.ts +3 -2
- package/dist/src/bitswap.d.ts.map +1 -1
- package/dist/src/bitswap.js +2 -12
- package/dist/src/bitswap.js.map +1 -1
- package/dist/src/index.d.ts +2 -38
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/network.d.ts.map +1 -1
- package/dist/src/network.js +11 -25
- package/dist/src/network.js.map +1 -1
- package/dist/src/peer-want-lists/index.js +1 -1
- package/dist/src/peer-want-lists/index.js.map +1 -1
- package/dist/src/session.d.ts +13 -8
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/session.js +25 -92
- package/dist/src/session.js.map +1 -1
- package/dist/src/stats.js +4 -4
- package/dist/src/stats.js.map +1 -1
- package/dist/src/want-list.d.ts +5 -10
- package/dist/src/want-list.d.ts.map +1 -1
- package/dist/src/want-list.js +48 -52
- package/dist/src/want-list.js.map +1 -1
- package/package.json +3 -4
- package/src/bitswap.ts +4 -14
- package/src/index.ts +2 -43
- package/src/network.ts +11 -28
- package/src/peer-want-lists/index.ts +1 -1
- package/src/session.ts +31 -125
- package/src/stats.ts +4 -4
- package/src/want-list.ts +51 -69
package/dist/src/want-list.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface';
|
|
2
|
-
import { trackedPeerMap
|
|
2
|
+
import { trackedPeerMap } from '@libp2p/peer-collections';
|
|
3
3
|
import { trackedMap } from '@libp2p/utils/tracked-map';
|
|
4
4
|
import all from 'it-all';
|
|
5
5
|
import filter from 'it-filter';
|
|
@@ -30,11 +30,11 @@ export class WantList extends TypedEventEmitter {
|
|
|
30
30
|
super();
|
|
31
31
|
setMaxListeners(Infinity, this);
|
|
32
32
|
this.peers = trackedPeerMap({
|
|
33
|
-
name: '
|
|
33
|
+
name: 'helia_bitswap_peers',
|
|
34
34
|
metrics: components.libp2p.metrics
|
|
35
35
|
});
|
|
36
36
|
this.wants = trackedMap({
|
|
37
|
-
name: '
|
|
37
|
+
name: 'helia_bitswap_wantlist',
|
|
38
38
|
metrics: components.libp2p.metrics
|
|
39
39
|
});
|
|
40
40
|
this.network = components.network;
|
|
@@ -63,15 +63,11 @@ export class WantList extends TypedEventEmitter {
|
|
|
63
63
|
if (entry == null) {
|
|
64
64
|
entry = {
|
|
65
65
|
cid,
|
|
66
|
-
session: new PeerSet(),
|
|
67
66
|
priority: options.priority ?? 1,
|
|
68
67
|
wantType: options.wantType ?? WantType.WantBlock,
|
|
69
68
|
cancel: false,
|
|
70
69
|
sendDontHave: true
|
|
71
70
|
};
|
|
72
|
-
if (options.peerId != null) {
|
|
73
|
-
entry.session.add(options.peerId);
|
|
74
|
-
}
|
|
75
71
|
this.wants.set(cidStr, entry);
|
|
76
72
|
}
|
|
77
73
|
// upgrade want-have to want-block if the new want is a WantBlock but the
|
|
@@ -79,20 +75,6 @@ export class WantList extends TypedEventEmitter {
|
|
|
79
75
|
if (entry.wantType === WantType.WantHave && options.wantType === WantType.WantBlock) {
|
|
80
76
|
entry.wantType = WantType.WantBlock;
|
|
81
77
|
}
|
|
82
|
-
// if this want was part of a session..
|
|
83
|
-
if (entry.session.size > 0) {
|
|
84
|
-
// if the new want is also part of a session, expand the want session to
|
|
85
|
-
// include both sets of peers
|
|
86
|
-
if (options.peerId != null) {
|
|
87
|
-
entry.session.add(options.peerId);
|
|
88
|
-
}
|
|
89
|
-
// if the new want is not part of a session, make this want a non-session
|
|
90
|
-
// want - nb. this will cause this WantList entry to be sent to every peer
|
|
91
|
-
// instead of just the ones in the session
|
|
92
|
-
if (options.peerId == null) {
|
|
93
|
-
entry.session.clear();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
78
|
// broadcast changes
|
|
97
79
|
await this.sendMessagesDebounced();
|
|
98
80
|
try {
|
|
@@ -141,10 +123,6 @@ export class WantList extends TypedEventEmitter {
|
|
|
141
123
|
wantlist: {
|
|
142
124
|
full: false,
|
|
143
125
|
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => {
|
|
144
|
-
// skip session-only wants
|
|
145
|
-
if (entry.session.size > 0 && !entry.session.has(peerId)) {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
126
|
const sentPreviously = sentWants.has(key);
|
|
149
127
|
// don't cancel if we've not sent it to them before
|
|
150
128
|
if (entry.cancel) {
|
|
@@ -200,33 +178,26 @@ export class WantList extends TypedEventEmitter {
|
|
|
200
178
|
/**
|
|
201
179
|
* Add a CID to the wantlist
|
|
202
180
|
*/
|
|
203
|
-
async
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
return peer.equals(event.detail.sender) && uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
return event.detail;
|
|
225
|
-
}
|
|
226
|
-
return this.addEntry(cid, {
|
|
227
|
-
...options,
|
|
228
|
-
wantType: WantType.WantHave
|
|
181
|
+
async wantSessionPresence(cid, peerId, options = {}) {
|
|
182
|
+
// sending WantHave directly to peer
|
|
183
|
+
await this.network.sendMessage(peerId, {
|
|
184
|
+
wantlist: {
|
|
185
|
+
full: false,
|
|
186
|
+
entries: [{
|
|
187
|
+
cid: cid.bytes,
|
|
188
|
+
sendDontHave: true,
|
|
189
|
+
wantType: WantType.WantHave,
|
|
190
|
+
priority: 1
|
|
191
|
+
}]
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
// wait for peer response
|
|
195
|
+
const event = await raceEvent(this, 'presence', options.signal, {
|
|
196
|
+
filter: (event) => {
|
|
197
|
+
return peerId.equals(event.detail.sender) && uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
198
|
+
}
|
|
229
199
|
});
|
|
200
|
+
return event.detail;
|
|
230
201
|
}
|
|
231
202
|
/**
|
|
232
203
|
* Add a CID to the wantlist
|
|
@@ -237,6 +208,30 @@ export class WantList extends TypedEventEmitter {
|
|
|
237
208
|
wantType: WantType.WantBlock
|
|
238
209
|
});
|
|
239
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Add a CID to the wantlist
|
|
213
|
+
*/
|
|
214
|
+
async wantSessionBlock(cid, peerId, options = {}) {
|
|
215
|
+
// sending WantBlockResult directly to peer
|
|
216
|
+
await this.network.sendMessage(peerId, {
|
|
217
|
+
wantlist: {
|
|
218
|
+
full: false,
|
|
219
|
+
entries: [{
|
|
220
|
+
cid: cid.bytes,
|
|
221
|
+
sendDontHave: true,
|
|
222
|
+
wantType: WantType.WantBlock,
|
|
223
|
+
priority: 1
|
|
224
|
+
}]
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
// wait for peer response
|
|
228
|
+
const event = await raceEvent(this, 'presence', options.signal, {
|
|
229
|
+
filter: (event) => {
|
|
230
|
+
return peerId.equals(event.detail.sender) && uint8ArrayEquals(cid.multihash.digest, event.detail.cid.multihash.digest);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
return event.detail;
|
|
234
|
+
}
|
|
240
235
|
/**
|
|
241
236
|
* Invoked when a block has been received from an external source
|
|
242
237
|
*/
|
|
@@ -324,7 +319,7 @@ export class WantList extends TypedEventEmitter {
|
|
|
324
319
|
const message = {
|
|
325
320
|
wantlist: {
|
|
326
321
|
full: true,
|
|
327
|
-
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => !entry.cancel
|
|
322
|
+
entries: pipe(this.wants.entries(), (source) => filter(source, ([key, entry]) => !entry.cancel), (source) => map(source, ([key, entry]) => {
|
|
328
323
|
sentWants.add(key);
|
|
329
324
|
return {
|
|
330
325
|
cid: entry.cid.bytes,
|
|
@@ -360,6 +355,7 @@ export class WantList extends TypedEventEmitter {
|
|
|
360
355
|
}
|
|
361
356
|
stop() {
|
|
362
357
|
this.peers.clear();
|
|
358
|
+
clearTimeout(this.sendMessagesTimeout);
|
|
363
359
|
}
|
|
364
360
|
}
|
|
365
361
|
//# sourceMappingURL=want-list.js.map
|
|
@@ -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": "0.0.0-
|
|
3
|
+
"version": "0.0.0-9ea934e",
|
|
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,13 +148,13 @@
|
|
|
148
148
|
"docs": "aegir docs"
|
|
149
149
|
},
|
|
150
150
|
"dependencies": {
|
|
151
|
-
"@helia/interface": "4.1.0-
|
|
151
|
+
"@helia/interface": "4.1.0-9ea934e",
|
|
152
|
+
"@helia/utils": "0.1.0-9ea934e",
|
|
152
153
|
"@libp2p/interface": "^1.1.2",
|
|
153
154
|
"@libp2p/logger": "^4.0.5",
|
|
154
155
|
"@libp2p/peer-collections": "^5.1.6",
|
|
155
156
|
"@libp2p/utils": "^5.2.3",
|
|
156
157
|
"@multiformats/multiaddr": "^12.1.14",
|
|
157
|
-
"@multiformats/multiaddr-matcher": "^1.1.2",
|
|
158
158
|
"any-signal": "^4.1.1",
|
|
159
159
|
"debug": "^4.3.4",
|
|
160
160
|
"interface-blockstore": "^5.2.9",
|
|
@@ -165,7 +165,6 @@
|
|
|
165
165
|
"it-length-prefixed": "^9.0.0",
|
|
166
166
|
"it-length-prefixed-stream": "^1.1.6",
|
|
167
167
|
"it-map": "^3.0.5",
|
|
168
|
-
"it-merge": "^3.0.3",
|
|
169
168
|
"it-pipe": "^3.0.1",
|
|
170
169
|
"it-take": "^3.0.1",
|
|
171
170
|
"multiformats": "^13.0.1",
|
package/src/bitswap.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/* eslint-disable no-loop-func */
|
|
2
|
-
import { DEFAULT_SESSION_MAX_PROVIDERS, DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY } from '@helia/interface'
|
|
3
2
|
import { setMaxListeners } from '@libp2p/interface'
|
|
4
3
|
import { anySignal } from 'any-signal'
|
|
5
4
|
import { Network } from './network.js'
|
|
@@ -7,7 +6,8 @@ import { PeerWantLists } from './peer-want-lists/index.js'
|
|
|
7
6
|
import { createBitswapSession } from './session.js'
|
|
8
7
|
import { Stats } from './stats.js'
|
|
9
8
|
import { WantList } from './want-list.js'
|
|
10
|
-
import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents,
|
|
9
|
+
import type { BitswapOptions, Bitswap as BitswapInterface, BitswapWantProgressEvents, BitswapNotifyProgressEvents, WantListEntry, BitswapComponents } from './index.js'
|
|
10
|
+
import type { BlockBroker, CreateSessionOptions } from '@helia/interface'
|
|
11
11
|
import type { ComponentLogger, PeerId } from '@libp2p/interface'
|
|
12
12
|
import type { Logger } from '@libp2p/logger'
|
|
13
13
|
import type { AbortOptions } from '@multiformats/multiaddr'
|
|
@@ -62,22 +62,12 @@ export class Bitswap implements BitswapInterface {
|
|
|
62
62
|
}, init)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
const minProviders = options?.minProviders ?? DEFAULT_SESSION_MIN_PROVIDERS
|
|
67
|
-
const maxProviders = options?.maxProviders ?? DEFAULT_SESSION_MAX_PROVIDERS
|
|
68
|
-
|
|
65
|
+
createSession (options: CreateSessionOptions = {}): Required<Pick<BlockBroker<BitswapWantProgressEvents>, 'retrieve'>> {
|
|
69
66
|
return createBitswapSession({
|
|
70
67
|
wantList: this.wantList,
|
|
71
68
|
network: this.network,
|
|
72
69
|
logger: this.logger
|
|
73
|
-
},
|
|
74
|
-
root,
|
|
75
|
-
queryConcurrency: options?.providerQueryConcurrency ?? DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY,
|
|
76
|
-
minProviders,
|
|
77
|
-
maxProviders,
|
|
78
|
-
connectedPeers: options?.queryConnectedPeers !== false ? [...this.wantList.peers.keys()] : [],
|
|
79
|
-
signal: options?.signal
|
|
80
|
-
})
|
|
70
|
+
}, options)
|
|
81
71
|
}
|
|
82
72
|
|
|
83
73
|
async want (cid: CID, options: WantOptions = {}): Promise<Uint8Array> {
|
package/src/index.ts
CHANGED
|
@@ -9,10 +9,9 @@
|
|
|
9
9
|
import { Bitswap as BitswapClass } from './bitswap.js'
|
|
10
10
|
import type { BitswapNetworkNotifyProgressEvents, BitswapNetworkWantProgressEvents } from './network.js'
|
|
11
11
|
import type { WantType } from './pb/message.js'
|
|
12
|
-
import type { CreateSessionOptions } from '@helia/interface'
|
|
12
|
+
import type { BlockBroker, CreateSessionOptions } from '@helia/interface'
|
|
13
13
|
import type { Routing } from '@helia/interface/routing'
|
|
14
14
|
import type { Libp2p, AbortOptions, Startable, ComponentLogger, Metrics, PeerId } from '@libp2p/interface'
|
|
15
|
-
import type { PeerSet } from '@libp2p/peer-collections'
|
|
16
15
|
import type { Blockstore } from 'interface-blockstore'
|
|
17
16
|
import type { CID } from 'multiformats/cid'
|
|
18
17
|
import type { MultihashHasher } from 'multiformats/hashes/interface'
|
|
@@ -29,52 +28,12 @@ export type BitswapWantBlockProgressEvents =
|
|
|
29
28
|
ProgressEvent<'bitswap:want-block:block', CID> |
|
|
30
29
|
BitswapNetworkWantProgressEvents
|
|
31
30
|
|
|
32
|
-
/**
|
|
33
|
-
* A bitswap session is a network overlay consisting of peers that all have the
|
|
34
|
-
* first block in a file. Subsequent requests will only go to these peers.
|
|
35
|
-
*/
|
|
36
|
-
export interface BitswapSession {
|
|
37
|
-
/**
|
|
38
|
-
* The peers in this session
|
|
39
|
-
*/
|
|
40
|
-
peers: PeerSet
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Fetch an additional CID from this DAG
|
|
44
|
-
*/
|
|
45
|
-
want(cid: CID, options?: AbortOptions & ProgressOptions<BitswapWantProgressEvents>): Promise<Uint8Array>
|
|
46
|
-
}
|
|
47
|
-
|
|
48
31
|
export interface WantListEntry {
|
|
49
32
|
cid: CID
|
|
50
33
|
priority: number
|
|
51
34
|
wantType: WantType
|
|
52
35
|
}
|
|
53
36
|
|
|
54
|
-
export interface CreateBitswapSessionOptions extends CreateSessionOptions<BitswapWantProgressEvents> {
|
|
55
|
-
/**
|
|
56
|
-
* If true, query connected peers before searching for providers via
|
|
57
|
-
* Helia routers
|
|
58
|
-
*
|
|
59
|
-
* @default true
|
|
60
|
-
*/
|
|
61
|
-
queryConnectedPeers?: boolean
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* If true, search for providers via Helia routers to query for the root CID
|
|
65
|
-
*
|
|
66
|
-
* @default true
|
|
67
|
-
*/
|
|
68
|
-
queryRoutingPeers?: boolean
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* The priority to use when querying availability of the root CID
|
|
72
|
-
*
|
|
73
|
-
* @default 1
|
|
74
|
-
*/
|
|
75
|
-
priority?: number
|
|
76
|
-
}
|
|
77
|
-
|
|
78
37
|
export interface Bitswap extends Startable {
|
|
79
38
|
/**
|
|
80
39
|
* Returns the current state of the wantlist
|
|
@@ -100,7 +59,7 @@ export interface Bitswap extends Startable {
|
|
|
100
59
|
/**
|
|
101
60
|
* Start a session to retrieve a file from the network
|
|
102
61
|
*/
|
|
103
|
-
createSession(
|
|
62
|
+
createSession(options?: CreateSessionOptions<BitswapWantProgressEvents>): Required<Pick<BlockBroker<BitswapWantProgressEvents>, 'retrieve'>>
|
|
104
63
|
}
|
|
105
64
|
|
|
106
65
|
export interface MultihashHasherLoader {
|
package/src/network.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CodeError, TypedEventEmitter, setMaxListeners } from '@libp2p/interface'
|
|
2
2
|
import { PeerQueue, type PeerQueueJobOptions } from '@libp2p/utils/peer-queue'
|
|
3
|
-
import { Circuit } from '@multiformats/multiaddr-matcher'
|
|
4
3
|
import { anySignal } from 'any-signal'
|
|
5
4
|
import debug from 'debug'
|
|
6
5
|
import drain from 'it-drain'
|
|
@@ -129,14 +128,14 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
129
128
|
this.messageSendTimeout = init.messageSendTimeout ?? DEFAULT_MESSAGE_SEND_TIMEOUT
|
|
130
129
|
this.runOnTransientConnections = init.runOnTransientConnections ?? DEFAULT_RUN_ON_TRANSIENT_CONNECTIONS
|
|
131
130
|
this.metrics = {
|
|
132
|
-
blocksSent: components.libp2p.metrics?.registerCounter('
|
|
133
|
-
dataSent: components.libp2p.metrics?.registerCounter('
|
|
131
|
+
blocksSent: components.libp2p.metrics?.registerCounter('helia_bitswap_sent_blocks_total'),
|
|
132
|
+
dataSent: components.libp2p.metrics?.registerCounter('helia_bitswap_sent_data_bytes_total')
|
|
134
133
|
}
|
|
135
134
|
|
|
136
135
|
this.sendQueue = new PeerQueue({
|
|
137
136
|
concurrency: init.messageSendConcurrency ?? DEFAULT_MESSAGE_SEND_CONCURRENCY,
|
|
138
137
|
metrics: components.libp2p.metrics,
|
|
139
|
-
metricName: '
|
|
138
|
+
metricName: 'helia_bitswap_message_send_queue'
|
|
140
139
|
})
|
|
141
140
|
this.sendQueue.addEventListener('error', (evt) => {
|
|
142
141
|
this.log.error('error sending wantlist to peer', evt.detail)
|
|
@@ -263,29 +262,12 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
263
262
|
options?.onProgress?.(new CustomProgressEvent<PeerId>('bitswap:network:find-providers', cid))
|
|
264
263
|
|
|
265
264
|
for await (const provider of this.routing.findProviders(cid, options)) {
|
|
266
|
-
//
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
for (let ma of provider.multiaddrs) {
|
|
272
|
-
if (ma.getPeerId() == null) {
|
|
273
|
-
ma = ma.encapsulate(`/p2p/${provider.id}`)
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
if (!Circuit.exactMatch(ma)) {
|
|
277
|
-
hasDirectAddress = true
|
|
278
|
-
break
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
if (!hasDirectAddress) {
|
|
283
|
-
continue
|
|
284
|
-
}
|
|
285
|
-
}
|
|
265
|
+
// make sure we can dial the provider
|
|
266
|
+
const dialable = await this.libp2p.isDialable(provider.multiaddrs, {
|
|
267
|
+
runOnTransientConnection: this.runOnTransientConnections
|
|
268
|
+
})
|
|
286
269
|
|
|
287
|
-
|
|
288
|
-
if (provider.protocols?.includes('transport-bitswap') === false) {
|
|
270
|
+
if (!dialable) {
|
|
289
271
|
continue
|
|
290
272
|
}
|
|
291
273
|
|
|
@@ -327,8 +309,9 @@ export class Network extends TypedEventEmitter<NetworkEvents> {
|
|
|
327
309
|
pendingBytes: msg.pendingBytes ?? 0
|
|
328
310
|
}
|
|
329
311
|
|
|
330
|
-
const
|
|
331
|
-
|
|
312
|
+
const timeoutSignal = AbortSignal.timeout(this.messageSendTimeout)
|
|
313
|
+
const signal = anySignal([timeoutSignal, options?.signal])
|
|
314
|
+
setMaxListeners(Infinity, timeoutSignal, signal)
|
|
332
315
|
|
|
333
316
|
try {
|
|
334
317
|
const existingJob = this.sendQueue.queue.find(job => {
|
|
@@ -45,7 +45,7 @@ export class PeerWantLists {
|
|
|
45
45
|
this.log = components.logger.forComponent('helia:bitswap:peer-want-lists')
|
|
46
46
|
|
|
47
47
|
this.ledgerMap = trackedPeerMap({
|
|
48
|
-
name: '
|
|
48
|
+
name: 'helia_bitswap_ledger_map',
|
|
49
49
|
metrics: components.libp2p.metrics
|
|
50
50
|
})
|
|
51
51
|
|
package/src/session.ts
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { PeerQueue } from '@libp2p/utils/peer-queue'
|
|
4
|
-
import map from 'it-map'
|
|
5
|
-
import merge from 'it-merge'
|
|
6
|
-
import pDefer, { type DeferredPromise } from 'p-defer'
|
|
7
|
-
import type { BitswapWantProgressEvents, BitswapSession as BitswapSessionInterface } from './index.js'
|
|
1
|
+
import { AbstractSession } from '@helia/utils'
|
|
2
|
+
import type { BitswapWantProgressEvents } from './index.js'
|
|
8
3
|
import type { Network } from './network.js'
|
|
9
4
|
import type { WantList } from './want-list.js'
|
|
10
|
-
import type {
|
|
5
|
+
import type { CreateSessionOptions } from '@helia/interface'
|
|
6
|
+
import type { ComponentLogger, PeerId } from '@libp2p/interface'
|
|
11
7
|
import type { AbortOptions } from 'interface-store'
|
|
12
8
|
import type { CID } from 'multiformats/cid'
|
|
13
|
-
import type { ProgressOptions } from 'progress-events'
|
|
14
9
|
|
|
15
10
|
export interface BitswapSessionComponents {
|
|
16
11
|
network: Network
|
|
@@ -18,138 +13,49 @@ export interface BitswapSessionComponents {
|
|
|
18
13
|
logger: ComponentLogger
|
|
19
14
|
}
|
|
20
15
|
|
|
21
|
-
|
|
22
|
-
root: CID
|
|
23
|
-
queryConcurrency: number
|
|
24
|
-
minProviders: number
|
|
25
|
-
maxProviders: number
|
|
26
|
-
connectedPeers: PeerId[]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
class BitswapSession implements BitswapSessionInterface {
|
|
30
|
-
public readonly root: CID
|
|
31
|
-
public readonly peers: PeerSet
|
|
32
|
-
private readonly log: Logger
|
|
16
|
+
class BitswapSession extends AbstractSession<PeerId, BitswapWantProgressEvents> {
|
|
33
17
|
private readonly wantList: WantList
|
|
34
18
|
private readonly network: Network
|
|
35
|
-
private readonly queue: PeerQueue
|
|
36
|
-
private readonly maxProviders: number
|
|
37
19
|
|
|
38
|
-
constructor (components: BitswapSessionComponents, init:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
20
|
+
constructor (components: BitswapSessionComponents, init: CreateSessionOptions) {
|
|
21
|
+
super(components, {
|
|
22
|
+
...init,
|
|
23
|
+
name: 'helia:bitswap:session'
|
|
24
|
+
})
|
|
25
|
+
|
|
43
26
|
this.wantList = components.wantList
|
|
44
27
|
this.network = components.network
|
|
45
|
-
|
|
46
|
-
this.queue = new PeerQueue({
|
|
47
|
-
concurrency: init.queryConcurrency
|
|
48
|
-
})
|
|
49
|
-
this.queue.addEventListener('error', (evt) => {
|
|
50
|
-
this.log.error('error querying peer for %c', this.root, evt.detail)
|
|
51
|
-
})
|
|
52
28
|
}
|
|
53
29
|
|
|
54
|
-
async
|
|
55
|
-
|
|
56
|
-
throw new CodeError('Bitswap session had no peers', 'ERR_NO_SESSION_PEERS')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
this.log('sending WANT-BLOCK for %c to', cid, this.peers)
|
|
30
|
+
async queryProvider (cid: CID, provider: PeerId, options: AbortOptions): Promise<Uint8Array> {
|
|
31
|
+
this.log('sending WANT-BLOCK for %c to %p', cid, provider)
|
|
60
32
|
|
|
61
|
-
const result = await
|
|
62
|
-
[...this.peers].map(async peerId => {
|
|
63
|
-
return this.wantList.wantBlock(cid, {
|
|
64
|
-
peerId,
|
|
65
|
-
...options
|
|
66
|
-
})
|
|
67
|
-
})
|
|
68
|
-
)
|
|
33
|
+
const result = await this.wantList.wantSessionBlock(cid, provider, options)
|
|
69
34
|
|
|
70
|
-
this.log('
|
|
35
|
+
this.log('%p %s %c', provider, result.has ? 'has' : 'does not have', cid)
|
|
71
36
|
|
|
72
|
-
|
|
73
|
-
|
|
37
|
+
if (result.has && result.block != null) {
|
|
38
|
+
return result.block
|
|
39
|
+
}
|
|
74
40
|
|
|
75
|
-
|
|
41
|
+
throw new Error('Provider did not have block')
|
|
76
42
|
}
|
|
77
43
|
|
|
78
|
-
async findNewProviders (cid: CID,
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const source = merge(
|
|
85
|
-
[...this.wantList.peers.keys()],
|
|
86
|
-
map(this.network.findProviders(cid, options), prov => prov.id)
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
void Promise.resolve()
|
|
90
|
-
.then(async () => {
|
|
91
|
-
for await (const peerId of source) {
|
|
92
|
-
if (found === this.maxProviders) {
|
|
93
|
-
this.queue.clear()
|
|
94
|
-
break
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// eslint-disable-next-line no-loop-func
|
|
98
|
-
await this.queue.add(async () => {
|
|
99
|
-
try {
|
|
100
|
-
this.log('asking potential session peer %p if they have %c', peerId, cid)
|
|
101
|
-
const result = await this.wantList.wantPresence(cid, {
|
|
102
|
-
peerId,
|
|
103
|
-
...options
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
if (!result.has) {
|
|
107
|
-
this.log('potential session peer %p did not have %c', peerId, cid)
|
|
108
|
-
return
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
this.log('potential session peer %p had %c', peerId, cid)
|
|
112
|
-
found++
|
|
113
|
-
|
|
114
|
-
// add to list
|
|
115
|
-
this.peers.add(peerId)
|
|
116
|
-
|
|
117
|
-
if (found === count) {
|
|
118
|
-
this.log('found %d session peers', found)
|
|
119
|
-
|
|
120
|
-
deferred.resolve()
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (found === this.maxProviders) {
|
|
124
|
-
this.log('found max provider session peers', found)
|
|
125
|
-
|
|
126
|
-
this.queue.clear()
|
|
127
|
-
}
|
|
128
|
-
} catch (err: any) {
|
|
129
|
-
this.log.error('error querying potential session peer %p for %c', peerId, cid, err.errors ?? err)
|
|
130
|
-
}
|
|
131
|
-
}, {
|
|
132
|
-
peerId
|
|
133
|
-
})
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
this.log('found %d session peers total', found)
|
|
44
|
+
async * findNewProviders (cid: CID, options: AbortOptions = {}): AsyncGenerator<PeerId> {
|
|
45
|
+
for await (const provider of this.network.findProviders(cid, options)) {
|
|
46
|
+
yield provider.id
|
|
47
|
+
}
|
|
48
|
+
}
|
|
137
49
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
})
|
|
50
|
+
toEvictionKey (provider: PeerId): Uint8Array | string {
|
|
51
|
+
return provider.toBytes()
|
|
52
|
+
}
|
|
142
53
|
|
|
143
|
-
|
|
54
|
+
equals (providerA: PeerId, providerB: PeerId): boolean {
|
|
55
|
+
return providerA.equals(providerB)
|
|
144
56
|
}
|
|
145
57
|
}
|
|
146
58
|
|
|
147
|
-
export
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
await session.findNewProviders(init.root, init.minProviders, {
|
|
151
|
-
signal: init.signal
|
|
152
|
-
})
|
|
153
|
-
|
|
154
|
-
return session
|
|
59
|
+
export function createBitswapSession (components: BitswapSessionComponents, init: CreateSessionOptions): BitswapSession {
|
|
60
|
+
return new BitswapSession(components, init)
|
|
155
61
|
}
|
package/src/stats.ts
CHANGED
|
@@ -11,10 +11,10 @@ export class Stats {
|
|
|
11
11
|
private readonly duplicateDataReceived?: MetricGroup
|
|
12
12
|
|
|
13
13
|
constructor (components: StatsComponents) {
|
|
14
|
-
this.blocksReceived = components.libp2p.metrics?.registerMetricGroup('
|
|
15
|
-
this.duplicateBlocksReceived = components.libp2p.metrics?.registerMetricGroup('
|
|
16
|
-
this.dataReceived = components.libp2p.metrics?.registerMetricGroup('
|
|
17
|
-
this.duplicateDataReceived = components.libp2p.metrics?.registerMetricGroup('
|
|
14
|
+
this.blocksReceived = components.libp2p.metrics?.registerMetricGroup('helia_bitswap_received_blocks')
|
|
15
|
+
this.duplicateBlocksReceived = components.libp2p.metrics?.registerMetricGroup('helia_bitswap_duplicate_received_blocks')
|
|
16
|
+
this.dataReceived = components.libp2p.metrics?.registerMetricGroup('helia_bitswap_data_received_bytes')
|
|
17
|
+
this.duplicateDataReceived = components.libp2p.metrics?.registerMetricGroup('helia_bitswap_duplicate_data_received_bytes')
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
updateBlocksReceived (count: number = 1, peerId?: PeerId): void {
|