@libp2p/kad-dht 12.0.0-cd8cafcd5 → 12.0.1-388d02b33
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 +19 -19
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +20 -12
- package/dist/src/query/manager.js.map +1 -1
- package/package.json +13 -12
- package/src/query/manager.ts +24 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAU,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7C,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IACrC,aAAa,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAGxB;gBAEY,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;IA0BvE,SAAS,IAAK,OAAO;IAIrB;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAMpB,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,UAAU,CAAC;CA0H5G"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TypedEventEmitter, CustomEvent, setMaxListeners } from '@libp2p/interface';
|
|
2
2
|
import { PeerSet } from '@libp2p/peer-collections';
|
|
3
3
|
import { anySignal } from 'any-signal';
|
|
4
4
|
import merge from 'it-merge';
|
|
5
|
+
import { raceSignal } from 'race-signal';
|
|
5
6
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
6
7
|
import { ALPHA, K, DEFAULT_QUERY_TIMEOUT } from '../constants.js';
|
|
7
8
|
import { convertBuffer } from '../utils.js';
|
|
@@ -75,7 +76,15 @@ export class QueryManager {
|
|
|
75
76
|
signal
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
+
// if the user breaks out of a for..await of loop iterating over query
|
|
80
|
+
// results we need to cancel any in-flight network requests
|
|
81
|
+
const queryEarlyExitController = new AbortController();
|
|
82
|
+
setMaxListeners(Infinity, queryEarlyExitController.signal);
|
|
83
|
+
const signal = anySignal([
|
|
84
|
+
this.shutDownController.signal,
|
|
85
|
+
queryEarlyExitController.signal,
|
|
86
|
+
options.signal
|
|
87
|
+
]);
|
|
79
88
|
// this signal will get listened to for every invocation of queryFunc
|
|
80
89
|
// so make sure we don't make a lot of noise in the logs
|
|
81
90
|
setMaxListeners(Infinity, signal);
|
|
@@ -83,17 +92,11 @@ export class QueryManager {
|
|
|
83
92
|
// query a subset of peers up to `kBucketSize / 2` in length
|
|
84
93
|
const startTime = Date.now();
|
|
85
94
|
const cleanUp = new TypedEventEmitter();
|
|
95
|
+
let queryFinished = false;
|
|
86
96
|
try {
|
|
87
97
|
if (options.isSelfQuery !== true && this.initialQuerySelfHasRun != null) {
|
|
88
98
|
log('waiting for initial query-self query before continuing');
|
|
89
|
-
await
|
|
90
|
-
new Promise((resolve, reject) => {
|
|
91
|
-
signal.addEventListener('abort', () => {
|
|
92
|
-
reject(new AbortError('Query was aborted before self-query ran'));
|
|
93
|
-
});
|
|
94
|
-
}),
|
|
95
|
-
this.initialQuerySelfHasRun.promise
|
|
96
|
-
]);
|
|
99
|
+
await raceSignal(this.initialQuerySelfHasRun.promise, signal);
|
|
97
100
|
this.initialQuerySelfHasRun = undefined;
|
|
98
101
|
}
|
|
99
102
|
log('query:start');
|
|
@@ -128,11 +131,12 @@ export class QueryManager {
|
|
|
128
131
|
});
|
|
129
132
|
// Execute the query along each disjoint path and yield their results as they become available
|
|
130
133
|
for await (const event of merge(...paths)) {
|
|
131
|
-
yield event;
|
|
132
134
|
if (event.name === 'QUERY_ERROR') {
|
|
133
|
-
log('error', event.error);
|
|
135
|
+
log.error('query error', event.error);
|
|
134
136
|
}
|
|
137
|
+
yield event;
|
|
135
138
|
}
|
|
139
|
+
queryFinished = true;
|
|
136
140
|
}
|
|
137
141
|
catch (err) {
|
|
138
142
|
if (!this.running && err.code === 'ERR_QUERY_ABORTED') {
|
|
@@ -143,6 +147,10 @@ export class QueryManager {
|
|
|
143
147
|
}
|
|
144
148
|
}
|
|
145
149
|
finally {
|
|
150
|
+
if (!queryFinished) {
|
|
151
|
+
log('query exited early');
|
|
152
|
+
queryEarlyExitController.abort();
|
|
153
|
+
}
|
|
146
154
|
signal.clear();
|
|
147
155
|
this.queries--;
|
|
148
156
|
this.metrics?.runningQueries.update(this.queries);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/kad-dht",
|
|
3
|
-
"version": "12.0.
|
|
3
|
+
"version": "12.0.1-388d02b33",
|
|
4
4
|
"description": "JavaScript implementation of the Kad-DHT for libp2p",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/kad-dht#readme",
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
"dep-check": "aegir dep-check"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@libp2p/crypto": "3.0.
|
|
60
|
-
"@libp2p/interface": "1.0
|
|
61
|
-
"@libp2p/interface-internal": "1.0.
|
|
62
|
-
"@libp2p/peer-collections": "5.1.
|
|
63
|
-
"@libp2p/peer-id": "4.0.
|
|
64
|
-
"@libp2p/utils": "5.1.
|
|
59
|
+
"@libp2p/crypto": "3.0.3-388d02b33",
|
|
60
|
+
"@libp2p/interface": "1.1.0-388d02b33",
|
|
61
|
+
"@libp2p/interface-internal": "1.0.4-388d02b33",
|
|
62
|
+
"@libp2p/peer-collections": "5.1.2-388d02b33",
|
|
63
|
+
"@libp2p/peer-id": "4.0.3-388d02b33",
|
|
64
|
+
"@libp2p/utils": "5.1.1-388d02b33",
|
|
65
65
|
"@multiformats/multiaddr": "^12.1.10",
|
|
66
66
|
"@types/sinon": "^17.0.0",
|
|
67
67
|
"any-signal": "^4.1.1",
|
|
@@ -80,22 +80,23 @@
|
|
|
80
80
|
"it-pushable": "^3.2.1",
|
|
81
81
|
"it-stream-types": "^2.0.1",
|
|
82
82
|
"it-take": "^3.0.1",
|
|
83
|
-
"multiformats": "^
|
|
83
|
+
"multiformats": "^13.0.0",
|
|
84
84
|
"p-defer": "^4.0.0",
|
|
85
85
|
"p-event": "^6.0.0",
|
|
86
86
|
"p-queue": "^8.0.0",
|
|
87
87
|
"private-ip": "^3.0.1",
|
|
88
88
|
"progress-events": "^1.0.0",
|
|
89
89
|
"protons-runtime": "^5.0.0",
|
|
90
|
+
"race-signal": "^1.0.2",
|
|
90
91
|
"uint8-varint": "^2.0.0",
|
|
91
92
|
"uint8arraylist": "^2.4.3",
|
|
92
93
|
"uint8arrays": "^5.0.0"
|
|
93
94
|
},
|
|
94
95
|
"devDependencies": {
|
|
95
|
-
"@libp2p/interface-compliance-tests": "5.0
|
|
96
|
-
"@libp2p/logger": "4.0.
|
|
97
|
-
"@libp2p/peer-id-factory": "4.0.
|
|
98
|
-
"@libp2p/peer-store": "10.0.
|
|
96
|
+
"@libp2p/interface-compliance-tests": "5.1.0-388d02b33",
|
|
97
|
+
"@libp2p/logger": "4.0.3-388d02b33",
|
|
98
|
+
"@libp2p/peer-id-factory": "4.0.2-388d02b33",
|
|
99
|
+
"@libp2p/peer-store": "10.0.4-388d02b33",
|
|
99
100
|
"@types/lodash.random": "^3.2.6",
|
|
100
101
|
"@types/lodash.range": "^3.2.6",
|
|
101
102
|
"@types/which": "^3.0.0",
|
package/src/query/manager.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TypedEventEmitter, CustomEvent, setMaxListeners } from '@libp2p/interface'
|
|
2
2
|
import { PeerSet } from '@libp2p/peer-collections'
|
|
3
3
|
import { anySignal } from 'any-signal'
|
|
4
4
|
import merge from 'it-merge'
|
|
5
|
+
import { raceSignal } from 'race-signal'
|
|
5
6
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
6
7
|
import {
|
|
7
8
|
ALPHA, K, DEFAULT_QUERY_TIMEOUT
|
|
@@ -127,7 +128,16 @@ export class QueryManager implements Startable {
|
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
|
|
130
|
-
|
|
131
|
+
// if the user breaks out of a for..await of loop iterating over query
|
|
132
|
+
// results we need to cancel any in-flight network requests
|
|
133
|
+
const queryEarlyExitController = new AbortController()
|
|
134
|
+
setMaxListeners(Infinity, queryEarlyExitController.signal)
|
|
135
|
+
|
|
136
|
+
const signal = anySignal([
|
|
137
|
+
this.shutDownController.signal,
|
|
138
|
+
queryEarlyExitController.signal,
|
|
139
|
+
options.signal
|
|
140
|
+
])
|
|
131
141
|
|
|
132
142
|
// this signal will get listened to for every invocation of queryFunc
|
|
133
143
|
// so make sure we don't make a lot of noise in the logs
|
|
@@ -138,19 +148,13 @@ export class QueryManager implements Startable {
|
|
|
138
148
|
// query a subset of peers up to `kBucketSize / 2` in length
|
|
139
149
|
const startTime = Date.now()
|
|
140
150
|
const cleanUp = new TypedEventEmitter<CleanUpEvents>()
|
|
151
|
+
let queryFinished = false
|
|
141
152
|
|
|
142
153
|
try {
|
|
143
154
|
if (options.isSelfQuery !== true && this.initialQuerySelfHasRun != null) {
|
|
144
155
|
log('waiting for initial query-self query before continuing')
|
|
145
156
|
|
|
146
|
-
await
|
|
147
|
-
new Promise((resolve, reject) => {
|
|
148
|
-
signal.addEventListener('abort', () => {
|
|
149
|
-
reject(new AbortError('Query was aborted before self-query ran'))
|
|
150
|
-
})
|
|
151
|
-
}),
|
|
152
|
-
this.initialQuerySelfHasRun.promise
|
|
153
|
-
])
|
|
157
|
+
await raceSignal(this.initialQuerySelfHasRun.promise, signal)
|
|
154
158
|
|
|
155
159
|
this.initialQuerySelfHasRun = undefined
|
|
156
160
|
}
|
|
@@ -192,12 +196,14 @@ export class QueryManager implements Startable {
|
|
|
192
196
|
|
|
193
197
|
// Execute the query along each disjoint path and yield their results as they become available
|
|
194
198
|
for await (const event of merge(...paths)) {
|
|
195
|
-
yield event
|
|
196
|
-
|
|
197
199
|
if (event.name === 'QUERY_ERROR') {
|
|
198
|
-
log('error', event.error)
|
|
200
|
+
log.error('query error', event.error)
|
|
199
201
|
}
|
|
202
|
+
|
|
203
|
+
yield event
|
|
200
204
|
}
|
|
205
|
+
|
|
206
|
+
queryFinished = true
|
|
201
207
|
} catch (err: any) {
|
|
202
208
|
if (!this.running && err.code === 'ERR_QUERY_ABORTED') {
|
|
203
209
|
// ignore query aborted errors that were thrown during query manager shutdown
|
|
@@ -205,6 +211,11 @@ export class QueryManager implements Startable {
|
|
|
205
211
|
throw err
|
|
206
212
|
}
|
|
207
213
|
} finally {
|
|
214
|
+
if (!queryFinished) {
|
|
215
|
+
log('query exited early')
|
|
216
|
+
queryEarlyExitController.abort()
|
|
217
|
+
}
|
|
218
|
+
|
|
208
219
|
signal.clear()
|
|
209
220
|
|
|
210
221
|
this.queries--
|