@streamr/trackerless-network 100.0.0-testnet-one.3 → 100.0.0-testnet-two.0
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/package.json +7 -7
- package/dist/src/NetworkStack.d.ts +1 -5
- package/dist/src/NetworkStack.js +1 -3
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/logic/DeliveryRpcLocal.d.ts +1 -1
- package/dist/src/logic/DeliveryRpcLocal.js +3 -3
- package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/DeliveryRpcRemote.d.ts +3 -3
- package/dist/src/logic/DeliveryRpcRemote.js +3 -2
- package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +3 -0
- package/dist/src/logic/EntryPointDiscovery.js +11 -5
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +10 -8
- package/dist/src/logic/RandomGraphNode.js +23 -17
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.js +13 -4
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.d.ts +5 -11
- package/dist/src/logic/inspect/Inspector.js +2 -3
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +3 -3
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +39 -13
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +5 -3
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +18 -8
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +1 -6
- package/dist/src/logic/neighbor-discovery/Handshaker.js +6 -6
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +1 -6
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +3 -8
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +1 -3
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +1 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +4 -1
- package/dist/src/logic/proxy/ProxyClient.js +7 -6
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +2 -3
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +2 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +2 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +21 -22
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +18 -18
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +36 -60
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +34 -53
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +11 -12
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +6 -5
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +2 -2
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +26 -10
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +21 -9
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +4 -3
- package/dist/test/benchmark/first-message.js +4 -6
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +1 -1
- package/dist/test/utils/utils.js +8 -7
- package/dist/test/utils/utils.js.map +1 -1
- package/package.json +7 -7
- package/protos/NetworkRpc.proto +8 -4
- package/src/NetworkStack.ts +1 -7
- package/src/logic/DeliveryRpcLocal.ts +4 -4
- package/src/logic/DeliveryRpcRemote.ts +5 -4
- package/src/logic/EntryPointDiscovery.ts +10 -6
- package/src/logic/RandomGraphNode.ts +38 -25
- package/src/logic/StreamrNode.ts +22 -5
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/inspect/Inspector.ts +15 -16
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +46 -15
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +21 -10
- package/src/logic/neighbor-discovery/Handshaker.ts +15 -24
- package/src/logic/neighbor-discovery/NeighborFinder.ts +1 -7
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +10 -12
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +4 -4
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +2 -2
- package/src/logic/proxy/ProxyClient.ts +19 -7
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +3 -3
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +3 -3
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +3 -2
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +2 -2
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +31 -32
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +11 -12
- package/src/proto/packages/dht/protos/DhtRpc.ts +49 -80
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +7 -6
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +4 -3
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +36 -15
- package/test/benchmark/first-message.ts +8 -6
- package/test/end-to-end/random-graph-with-real-connections.test.ts +10 -5
- package/test/end-to-end/webrtc-full-node-network.test.ts +1 -1
- package/test/end-to-end/websocket-full-node-network.test.ts +2 -2
- package/test/integration/DeliveryRpcRemote.test.ts +3 -3
- package/test/integration/HandshakeRpcRemote.test.ts +2 -4
- package/test/integration/Handshakes.test.ts +8 -7
- package/test/integration/Inspect.test.ts +0 -2
- package/test/integration/NeighborUpdateRpcRemote.test.ts +2 -2
- package/test/integration/NetworkNode.test.ts +0 -2
- package/test/integration/NetworkRpc.test.ts +0 -3
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +4 -4
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +4 -5
- package/test/integration/stream-without-default-entrypoints.test.ts +4 -7
- package/test/integration/streamEntryPointReplacing.test.ts +94 -0
- package/test/unit/DeliveryRpcLocal.test.ts +2 -1
- package/test/unit/EntrypointDiscovery.test.ts +5 -2
- package/test/unit/HandshakeRpcLocal.test.ts +47 -9
- package/test/unit/NodeList.test.ts +10 -12
- package/test/unit/ProxyConnectionRpcRemote.test.ts +18 -10
- package/test/unit/RandomGraphNode.test.ts +6 -4
- package/test/utils/mock/MockHandshaker.ts +3 -2
- package/test/utils/mock/MockNeighborFinder.ts +3 -2
- package/test/utils/mock/MockNeighborUpdateManager.ts +3 -2
- package/test/utils/utils.ts +16 -8
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Inspector = void 0;
|
|
4
4
|
const InspectSession_1 = require("./InspectSession");
|
|
5
5
|
const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
|
|
6
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
7
6
|
const utils_1 = require("@streamr/utils");
|
|
8
7
|
const TemporaryConnectionRpcRemote_1 = require("../temporary-connection/TemporaryConnectionRpcRemote");
|
|
9
8
|
const identifiers_1 = require("../../identifiers");
|
|
@@ -14,13 +13,13 @@ class Inspector {
|
|
|
14
13
|
this.sessions = new Map();
|
|
15
14
|
this.streamPartId = config.streamPartId;
|
|
16
15
|
this.localPeerDescriptor = config.localPeerDescriptor;
|
|
17
|
-
this.
|
|
16
|
+
this.rpcCommunicator = config.rpcCommunicator;
|
|
18
17
|
this.connectionLocker = config.connectionLocker;
|
|
19
18
|
this.inspectionTimeout = config.inspectionTimeout ?? DEFAULT_TIMEOUT;
|
|
20
19
|
this.openInspectConnection = config.openInspectConnection ?? this.defaultOpenInspectConnection;
|
|
21
20
|
}
|
|
22
21
|
async defaultOpenInspectConnection(peerDescriptor, lockId) {
|
|
23
|
-
const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.streamPartId, this.
|
|
22
|
+
const rpcRemote = new TemporaryConnectionRpcRemote_1.TemporaryConnectionRpcRemote(this.localPeerDescriptor, peerDescriptor, this.streamPartId, this.rpcCommunicator, NetworkRpc_client_1.TemporaryConnectionRpcClient);
|
|
24
23
|
await rpcRemote.openConnection();
|
|
25
24
|
this.connectionLocker.lockConnection(peerDescriptor, lockId);
|
|
26
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":";;;AAEA,qDAAiF;AACjF,yGAAgH;
|
|
1
|
+
{"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../../src/logic/inspect/Inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { InterleaveNotice, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
1
|
+
import { InterleaveRequest, InterleaveResponse, StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
3
2
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
|
|
4
3
|
import { NodeList } from '../NodeList';
|
|
5
4
|
import { ConnectionLocker, PeerDescriptor } from '@streamr/dht';
|
|
@@ -13,6 +12,7 @@ interface HandshakeRpcLocalConfig {
|
|
|
13
12
|
targetNeighbors: NodeList;
|
|
14
13
|
connectionLocker: ConnectionLocker;
|
|
15
14
|
ongoingHandshakes: Set<NodeID>;
|
|
15
|
+
ongoingInterleaves: Set<NodeID>;
|
|
16
16
|
maxNeighborCount: number;
|
|
17
17
|
createRpcRemote: (target: PeerDescriptor) => HandshakeRpcRemote;
|
|
18
18
|
createDeliveryRpcRemote: (peerDescriptor: PeerDescriptor) => DeliveryRpcRemote;
|
|
@@ -26,6 +26,6 @@ export declare class HandshakeRpcLocal implements IHandshakeRpc {
|
|
|
26
26
|
private acceptHandshake;
|
|
27
27
|
private rejectHandshake;
|
|
28
28
|
private acceptHandshakeWithInterleaving;
|
|
29
|
-
|
|
29
|
+
interleaveRequest(message: InterleaveRequest, context: ServerCallContext): Promise<InterleaveResponse>;
|
|
30
30
|
}
|
|
31
31
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HandshakeRpcLocal = void 0;
|
|
4
|
-
const empty_1 = require("../../proto/google/protobuf/empty");
|
|
5
4
|
const identifiers_1 = require("../../identifiers");
|
|
6
5
|
const utils_1 = require("@streamr/utils");
|
|
6
|
+
const logger = new utils_1.Logger(module);
|
|
7
7
|
class HandshakeRpcLocal {
|
|
8
8
|
constructor(config) {
|
|
9
9
|
this.config = config;
|
|
@@ -14,14 +14,19 @@ class HandshakeRpcLocal {
|
|
|
14
14
|
handleRequest(request, context) {
|
|
15
15
|
const senderDescriptor = context.incomingSourceDescriptor;
|
|
16
16
|
const getInterleaveSourceIds = () => (request.interleaveSourceId !== undefined) ? [(0, utils_1.binaryToHex)(request.interleaveSourceId)] : [];
|
|
17
|
-
if (this.config.
|
|
17
|
+
if (this.config.ongoingInterleaves.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(senderDescriptor))) {
|
|
18
|
+
return this.rejectHandshake(request);
|
|
19
|
+
}
|
|
20
|
+
else if (this.config.targetNeighbors.hasNode(senderDescriptor)
|
|
18
21
|
|| this.config.ongoingHandshakes.has((0, identifiers_1.getNodeIdFromPeerDescriptor)(senderDescriptor))) {
|
|
19
22
|
return this.acceptHandshake(request, senderDescriptor);
|
|
20
23
|
}
|
|
21
24
|
else if (this.config.targetNeighbors.size() + this.config.ongoingHandshakes.size < this.config.maxNeighborCount) {
|
|
22
25
|
return this.acceptHandshake(request, senderDescriptor);
|
|
23
26
|
}
|
|
24
|
-
else if (this.config.targetNeighbors.size(getInterleaveSourceIds()) >= 2) {
|
|
27
|
+
else if (this.config.targetNeighbors.size(getInterleaveSourceIds()) - this.config.ongoingInterleaves.size >= 2) {
|
|
28
|
+
// Do not accept the handshakes requests if the target neighbor count can potentially drop below 2
|
|
29
|
+
// due to interleaving. This ensures that a stable number of connections is kept during high churn.
|
|
25
30
|
return this.acceptHandshakeWithInterleaving(request, senderDescriptor);
|
|
26
31
|
}
|
|
27
32
|
else {
|
|
@@ -46,7 +51,9 @@ class HandshakeRpcLocal {
|
|
|
46
51
|
return res;
|
|
47
52
|
}
|
|
48
53
|
acceptHandshakeWithInterleaving(request, requester) {
|
|
49
|
-
const exclude =
|
|
54
|
+
const exclude = [];
|
|
55
|
+
request.neighborIds.forEach((id) => exclude.push((0, utils_1.binaryToHex)(id)));
|
|
56
|
+
this.config.ongoingInterleaves.forEach((id) => exclude.push(id));
|
|
50
57
|
exclude.push((0, identifiers_1.getNodeIdFromPeerDescriptor)(requester));
|
|
51
58
|
if (request.interleaveSourceId !== undefined) {
|
|
52
59
|
exclude.push((0, utils_1.binaryToHex)(request.interleaveSourceId));
|
|
@@ -54,10 +61,25 @@ class HandshakeRpcLocal {
|
|
|
54
61
|
const furthest = this.config.targetNeighbors.getFurthest(exclude);
|
|
55
62
|
const furthestPeerDescriptor = furthest ? furthest.getPeerDescriptor() : undefined;
|
|
56
63
|
if (furthest) {
|
|
64
|
+
const nodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(furthest.getPeerDescriptor());
|
|
57
65
|
const remote = this.config.createRpcRemote(furthest.getPeerDescriptor());
|
|
58
|
-
|
|
59
|
-
this
|
|
60
|
-
|
|
66
|
+
this.config.ongoingInterleaves.add(nodeId);
|
|
67
|
+
// Run this with then catch instead of setImmediate to avoid changes in state
|
|
68
|
+
// eslint-disable-next-line promise/catch-or-return
|
|
69
|
+
remote.interleaveRequest(requester).then((response) => {
|
|
70
|
+
// If response is accepted, remove the furthest node from the target neighbors
|
|
71
|
+
// and unlock the connection
|
|
72
|
+
// If response is not accepted, keep the furthest node as a neighbor
|
|
73
|
+
if (response.accepted) {
|
|
74
|
+
this.config.targetNeighbors.remove(furthest.getPeerDescriptor());
|
|
75
|
+
this.config.connectionLocker.unlockConnection(furthestPeerDescriptor, this.config.streamPartId);
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}).catch(() => {
|
|
79
|
+
// no-op: InterleaveRequest cannot reject
|
|
80
|
+
}).finally(() => {
|
|
81
|
+
this.config.ongoingInterleaves.delete(nodeId);
|
|
82
|
+
});
|
|
61
83
|
}
|
|
62
84
|
this.config.targetNeighbors.add(this.config.createDeliveryRpcRemote(requester));
|
|
63
85
|
this.config.connectionLocker.lockConnection(requester, this.config.streamPartId);
|
|
@@ -67,17 +89,21 @@ class HandshakeRpcLocal {
|
|
|
67
89
|
interleaveTargetDescriptor: furthestPeerDescriptor
|
|
68
90
|
};
|
|
69
91
|
}
|
|
70
|
-
async
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
92
|
+
async interleaveRequest(message, context) {
|
|
93
|
+
const senderPeerDescriptor = context.incomingSourceDescriptor;
|
|
94
|
+
const senderId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(senderPeerDescriptor);
|
|
95
|
+
try {
|
|
96
|
+
await this.config.handshakeWithInterleaving(message.interleaveTargetDescriptor, senderId);
|
|
74
97
|
if (this.config.targetNeighbors.hasNodeById(senderId)) {
|
|
75
98
|
this.config.connectionLocker.unlockConnection(senderPeerDescriptor, this.config.streamPartId);
|
|
76
99
|
this.config.targetNeighbors.remove(senderPeerDescriptor);
|
|
77
100
|
}
|
|
78
|
-
|
|
101
|
+
return { accepted: true };
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
logger.debug(`interleaveRequest to ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(message.interleaveTargetDescriptor)} failed: ${err}`);
|
|
105
|
+
return { accepted: false };
|
|
79
106
|
}
|
|
80
|
-
return empty_1.Empty;
|
|
81
107
|
}
|
|
82
108
|
}
|
|
83
109
|
exports.HandshakeRpcLocal = HandshakeRpcLocal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HandshakeRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcLocal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { PeerDescriptor, RpcRemote } from '@streamr/dht';
|
|
2
2
|
import { NodeID } from '../../identifiers';
|
|
3
|
-
import {
|
|
3
|
+
import { InterleaveResponse } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
4
|
+
import { HandshakeRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
|
|
4
5
|
interface HandshakeResponse {
|
|
5
6
|
accepted: boolean;
|
|
6
7
|
interleaveTargetDescriptor?: PeerDescriptor;
|
|
7
8
|
}
|
|
8
|
-
export declare
|
|
9
|
+
export declare const INTERLEAVE_REQUEST_TIMEOUT = 15000;
|
|
10
|
+
export declare class HandshakeRpcRemote extends RpcRemote<HandshakeRpcClient> {
|
|
9
11
|
handshake(neighborIds: NodeID[], concurrentHandshakeTargetId?: NodeID, interleaveSourceId?: NodeID): Promise<HandshakeResponse>;
|
|
10
|
-
|
|
12
|
+
interleaveRequest(originatorDescriptor: PeerDescriptor): Promise<InterleaveResponse>;
|
|
11
13
|
}
|
|
12
14
|
export {};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HandshakeRpcRemote = void 0;
|
|
3
|
+
exports.HandshakeRpcRemote = exports.INTERLEAVE_REQUEST_TIMEOUT = void 0;
|
|
4
4
|
const dht_1 = require("@streamr/dht");
|
|
5
5
|
const utils_1 = require("@streamr/utils");
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
7
|
const identifiers_1 = require("../../identifiers");
|
|
8
8
|
const logger = new utils_1.Logger(module);
|
|
9
|
+
exports.INTERLEAVE_REQUEST_TIMEOUT = 15000;
|
|
9
10
|
class HandshakeRpcRemote extends dht_1.RpcRemote {
|
|
10
11
|
async handshake(neighborIds, concurrentHandshakeTargetId, interleaveSourceId) {
|
|
11
12
|
const request = {
|
|
@@ -29,17 +30,26 @@ class HandshakeRpcRemote extends dht_1.RpcRemote {
|
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
streamPartId: this.getServiceId(),
|
|
33
|
+
async interleaveRequest(originatorDescriptor) {
|
|
34
|
+
const request = {
|
|
35
35
|
interleaveTargetDescriptor: originatorDescriptor
|
|
36
36
|
};
|
|
37
37
|
const options = this.formDhtRpcOptions({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.getClient().interleaveNotice(notification, options).catch(() => {
|
|
41
|
-
logger.debug('Failed to send interleaveNotice');
|
|
38
|
+
connect: false,
|
|
39
|
+
timeout: exports.INTERLEAVE_REQUEST_TIMEOUT
|
|
42
40
|
});
|
|
41
|
+
try {
|
|
42
|
+
const res = await this.getClient().interleaveRequest(request, options);
|
|
43
|
+
return {
|
|
44
|
+
accepted: res.accepted
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
logger.debug(`interleaveRequest to ${(0, identifiers_1.getNodeIdFromPeerDescriptor)(this.getPeerDescriptor())} failed: ${err}`);
|
|
49
|
+
return {
|
|
50
|
+
accepted: false
|
|
51
|
+
};
|
|
52
|
+
}
|
|
43
53
|
}
|
|
44
54
|
}
|
|
45
55
|
exports.HandshakeRpcRemote = HandshakeRpcRemote;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandshakeRpcRemote.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAwD;AACxD,0CAAoD;AACpD,+BAAyB;AACzB,mDAAuE;AAIvE,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"HandshakeRpcRemote.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/HandshakeRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAwD;AACxD,0CAAoD;AACpD,+BAAyB;AACzB,mDAAuE;AAIvE,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOpB,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAE/C,MAAa,kBAAmB,SAAQ,eAA6B;IAEjE,KAAK,CAAC,SAAS,CACX,WAAqB,EACrB,2BAAoC,EACpC,kBAA2B;QAE3B,MAAM,OAAO,GAA+B;YACxC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,SAAS,EAAE,IAAA,SAAE,GAAE;YACf,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,mBAAW,EAAC,EAAE,CAAC,CAAC;YACrD,2BAA2B,EAAE,CAAC,2BAA2B,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAW,EAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/H,kBAAkB,EAAE,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAW,EAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;SACvG,CAAA;QACD,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACpF,OAAO;gBACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,0BAA0B,EAAE,QAAQ,CAAC,0BAA0B;aAClE,CAAA;SACJ;QAAC,OAAO,GAAQ,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAA,yCAA2B,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YACpG,OAAO;gBACH,QAAQ,EAAE,KAAK;aAClB,CAAA;SACJ;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,oBAAoC;QACxD,MAAM,OAAO,GAAsB;YAC/B,0BAA0B,EAAE,oBAAoB;SACnD,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,kCAA0B;SACtC,CAAC,CAAA;QACF,IAAI;YACA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACtE,OAAO;gBACH,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACzB,CAAA;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAA,yCAA2B,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YAC5G,OAAO;gBACH,QAAQ,EAAE,KAAK;aAClB,CAAA;SACJ;IAEL,CAAC;CACJ;AAjDD,gDAiDC"}
|
|
@@ -14,14 +14,9 @@ interface HandshakerConfig {
|
|
|
14
14
|
maxNeighborCount: number;
|
|
15
15
|
rpcRequestTimeout?: number;
|
|
16
16
|
}
|
|
17
|
-
export
|
|
18
|
-
attemptHandshakesOnContacts(excludedIds: NodeID[]): Promise<NodeID[]>;
|
|
19
|
-
getOngoingHandshakes(): Set<NodeID>;
|
|
20
|
-
}
|
|
21
|
-
export declare class Handshaker implements IHandshaker {
|
|
17
|
+
export declare class Handshaker {
|
|
22
18
|
private readonly ongoingHandshakes;
|
|
23
19
|
private config;
|
|
24
|
-
private readonly client;
|
|
25
20
|
private readonly rpcLocal;
|
|
26
21
|
constructor(config: HandshakerConfig);
|
|
27
22
|
attemptHandshakesOnContacts(excludedIds: NodeID[]): Promise<NodeID[]>;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Handshaker = void 0;
|
|
4
4
|
const DeliveryRpcRemote_1 = require("../DeliveryRpcRemote");
|
|
5
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
6
5
|
const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
|
|
7
6
|
const NetworkRpc_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc");
|
|
8
7
|
const utils_1 = require("@streamr/utils");
|
|
@@ -15,21 +14,22 @@ class Handshaker {
|
|
|
15
14
|
constructor(config) {
|
|
16
15
|
this.ongoingHandshakes = new Set();
|
|
17
16
|
this.config = config;
|
|
18
|
-
this.client = (0, proto_rpc_1.toProtoRpcClient)(new NetworkRpc_client_1.HandshakeRpcClient(this.config.rpcCommunicator.getRpcClientTransport()));
|
|
19
17
|
this.rpcLocal = new HandshakeRpcLocal_1.HandshakeRpcLocal({
|
|
20
18
|
streamPartId: this.config.streamPartId,
|
|
21
19
|
targetNeighbors: this.config.targetNeighbors,
|
|
22
20
|
connectionLocker: this.config.connectionLocker,
|
|
23
21
|
ongoingHandshakes: this.ongoingHandshakes,
|
|
22
|
+
ongoingInterleaves: new Set(),
|
|
24
23
|
maxNeighborCount: this.config.maxNeighborCount,
|
|
25
24
|
handshakeWithInterleaving: (target, senderId) => this.handshakeWithInterleaving(target, senderId),
|
|
26
25
|
createRpcRemote: (target) => this.createRpcRemote(target),
|
|
27
26
|
createDeliveryRpcRemote: (target) => this.createDeliveryRpcRemote(target)
|
|
28
27
|
});
|
|
29
|
-
this.config.rpcCommunicator.
|
|
28
|
+
this.config.rpcCommunicator.registerRpcMethod(NetworkRpc_1.InterleaveRequest, NetworkRpc_1.InterleaveResponse, 'interleaveRequest', (req, context) => this.rpcLocal.interleaveRequest(req, context), { timeout: HandshakeRpcRemote_1.INTERLEAVE_REQUEST_TIMEOUT });
|
|
30
29
|
this.config.rpcCommunicator.registerRpcMethod(NetworkRpc_1.StreamPartHandshakeRequest, NetworkRpc_1.StreamPartHandshakeResponse, 'handshake', (req, context) => this.rpcLocal.handshake(req, context));
|
|
31
30
|
}
|
|
32
31
|
async attemptHandshakesOnContacts(excludedIds) {
|
|
32
|
+
// TODO use config option or named constant? or why the value 2?
|
|
33
33
|
if (this.config.targetNeighbors.size() + this.ongoingHandshakes.size < this.config.maxNeighborCount - 2) {
|
|
34
34
|
logger.trace(`Attempting parallel handshakes with ${PARALLEL_HANDSHAKE_COUNT} targets`);
|
|
35
35
|
return this.selectParallelTargetsAndHandshake(excludedIds);
|
|
@@ -96,7 +96,7 @@ class Handshaker {
|
|
|
96
96
|
return result.accepted;
|
|
97
97
|
}
|
|
98
98
|
async handshakeWithInterleaving(target, interleaveSourceId) {
|
|
99
|
-
const targetNeighbor =
|
|
99
|
+
const targetNeighbor = this.createRpcRemote(target);
|
|
100
100
|
const targetNodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(targetNeighbor.getPeerDescriptor());
|
|
101
101
|
this.ongoingHandshakes.add(targetNodeId);
|
|
102
102
|
const result = await targetNeighbor.handshake(this.config.targetNeighbors.getIds(), undefined, interleaveSourceId);
|
|
@@ -108,10 +108,10 @@ class Handshaker {
|
|
|
108
108
|
return result.accepted;
|
|
109
109
|
}
|
|
110
110
|
createRpcRemote(targetPeerDescriptor) {
|
|
111
|
-
return new HandshakeRpcRemote_1.HandshakeRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId, this.
|
|
111
|
+
return new HandshakeRpcRemote_1.HandshakeRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId, this.config.rpcCommunicator, NetworkRpc_client_1.HandshakeRpcClient, this.config.rpcRequestTimeout);
|
|
112
112
|
}
|
|
113
113
|
createDeliveryRpcRemote(targetPeerDescriptor) {
|
|
114
|
-
return new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId,
|
|
114
|
+
return new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId, this.config.rpcCommunicator, NetworkRpc_client_1.DeliveryRpcClient, this.config.rpcRequestTimeout);
|
|
115
115
|
}
|
|
116
116
|
getOngoingHandshakes() {
|
|
117
117
|
return this.ongoingHandshakes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handshaker.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/Handshaker.ts"],"names":[],"mappings":";;;AAEA,4DAAwD;
|
|
1
|
+
{"version":3,"file":"Handshaker.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/Handshaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,7 @@ interface FindNeighborsSessionConfig {
|
|
|
6
6
|
doFindNeighbors: (excludedNodes: NodeID[]) => Promise<NodeID[]>;
|
|
7
7
|
minCount: number;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
10
|
-
start(excluded?: NodeID[]): void;
|
|
11
|
-
stop(): void;
|
|
12
|
-
isRunning(): boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare class NeighborFinder implements INeighborFinder {
|
|
9
|
+
export declare class NeighborFinder {
|
|
15
10
|
private readonly abortController;
|
|
16
11
|
private readonly config;
|
|
17
12
|
private running;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborFinder.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborFinder.ts"],"names":[],"mappings":";;;AAAA,0CAAoD;AAWpD,MAAM,YAAY,GAAG,GAAG,CAAA;AACxB,MAAM,QAAQ,GAAG,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"NeighborFinder.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborFinder.ts"],"names":[],"mappings":";;;AAAA,0CAAoD;AAWpD,MAAM,YAAY,GAAG,GAAG,CAAA;AACxB,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,MAAa,cAAc;IAKvB,YAAY,MAAkC;QAFtC,YAAO,GAAG,KAAK,CAAA;QAGnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAkB;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAM;SACT;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;YACrH,mDAAmD;YACnD,IAAA,2BAAmB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;SACpG;aAAM;YACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;SACvB;IACL,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,OAAO,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,WAAqB,EAAE;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,mDAAmD;QACnD,IAAA,2BAAmB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACtG,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAM;SACT;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;CACJ;AA3CD,wCA2CC"}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import { ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
|
|
2
|
-
import {
|
|
2
|
+
import { NeighborFinder } from './NeighborFinder';
|
|
3
3
|
import { NodeList } from '../NodeList';
|
|
4
4
|
import { StreamPartID } from '@streamr/protocol';
|
|
5
5
|
interface NeighborUpdateManagerConfig {
|
|
6
6
|
localPeerDescriptor: PeerDescriptor;
|
|
7
7
|
targetNeighbors: NodeList;
|
|
8
8
|
nearbyNodeView: NodeList;
|
|
9
|
-
neighborFinder:
|
|
9
|
+
neighborFinder: NeighborFinder;
|
|
10
10
|
streamPartId: StreamPartID;
|
|
11
11
|
rpcCommunicator: ListeningRpcCommunicator;
|
|
12
12
|
neighborUpdateInterval: number;
|
|
13
13
|
}
|
|
14
|
-
export
|
|
15
|
-
start(): Promise<void>;
|
|
16
|
-
stop(): void;
|
|
17
|
-
}
|
|
18
|
-
export declare class NeighborUpdateManager implements INeighborUpdateManager {
|
|
14
|
+
export declare class NeighborUpdateManager {
|
|
19
15
|
private readonly abortController;
|
|
20
16
|
private readonly config;
|
|
21
|
-
private readonly client;
|
|
22
17
|
private readonly rpcLocal;
|
|
23
18
|
constructor(config: NeighborUpdateManagerConfig);
|
|
24
19
|
start(): Promise<void>;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NeighborUpdateManager = void 0;
|
|
4
4
|
const NetworkRpc_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc");
|
|
5
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
6
5
|
const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
|
|
7
6
|
const utils_1 = require("@streamr/utils");
|
|
8
7
|
const NeighborUpdateRpcRemote_1 = require("./NeighborUpdateRpcRemote");
|
|
@@ -12,7 +11,6 @@ const logger = new utils_1.Logger(module);
|
|
|
12
11
|
class NeighborUpdateManager {
|
|
13
12
|
constructor(config) {
|
|
14
13
|
this.abortController = new AbortController();
|
|
15
|
-
this.client = (0, proto_rpc_1.toProtoRpcClient)(new NetworkRpc_client_1.NeighborUpdateRpcClient(config.rpcCommunicator.getRpcClientTransport()));
|
|
16
14
|
this.rpcLocal = new NeighborUpdateRpcLocal_1.NeighborUpdateRpcLocal(config);
|
|
17
15
|
this.config = config;
|
|
18
16
|
this.config.rpcCommunicator.registerRpcMethod(NetworkRpc_1.NeighborUpdate, NetworkRpc_1.NeighborUpdate, 'neighborUpdate', (req, context) => this.rpcLocal.neighborUpdate(req, context));
|
|
@@ -35,7 +33,7 @@ class NeighborUpdateManager {
|
|
|
35
33
|
}));
|
|
36
34
|
}
|
|
37
35
|
createRemote(targetPeerDescriptor) {
|
|
38
|
-
return new NeighborUpdateRpcRemote_1.NeighborUpdateRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId, this.
|
|
36
|
+
return new NeighborUpdateRpcRemote_1.NeighborUpdateRpcRemote(this.config.localPeerDescriptor, targetPeerDescriptor, this.config.streamPartId, this.config.rpcCommunicator, NetworkRpc_client_1.NeighborUpdateRpcClient);
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
exports.NeighborUpdateManager = NeighborUpdateManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateManager.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateManager.ts"],"names":[],"mappings":";;;AAAA,2FAA2F;AAE3F,
|
|
1
|
+
{"version":3,"file":"NeighborUpdateManager.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateManager.ts"],"names":[],"mappings":";;;AAAA,2FAA2F;AAE3F,yGAA2G;AAC3G,0CAA2D;AAG3D,uEAAmE;AACnE,qEAAiE;AACjE,mDAA+D;AAa/D,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,qBAAqB;IAM9B,YAAY,MAAmC;QAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,+CAAsB,CAAC,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,2BAAc,EAAE,2BAAc,EAAE,gBAAgB,EAC1F,CAAC,GAAmB,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAA,0BAAkB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACrI,CAAC;IAED,IAAI;QACA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC5B,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAChH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACjF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAA;YACtG,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;gBAChE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAA,yCAA2B,EAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAA;aAChG;QACL,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IAEO,YAAY,CAAC,oBAAoC;QACrD,OAAO,IAAI,iDAAuB,CAC9B,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAC/B,oBAAoB,EACpB,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,MAAM,CAAC,eAAe,EAC3B,2CAAuB,CAC1B,CAAA;IACL,CAAC;CACJ;AA3CD,sDA2CC"}
|
|
@@ -3,14 +3,14 @@ import { ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
|
|
|
3
3
|
import { NeighborUpdate } from '../../proto/packages/trackerless-network/protos/NetworkRpc';
|
|
4
4
|
import { INeighborUpdateRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server';
|
|
5
5
|
import { NodeList } from '../NodeList';
|
|
6
|
-
import {
|
|
6
|
+
import { NeighborFinder } from './NeighborFinder';
|
|
7
7
|
import { StreamPartID } from '@streamr/protocol';
|
|
8
8
|
interface NeighborUpdateRpcLocalConfig {
|
|
9
9
|
localPeerDescriptor: PeerDescriptor;
|
|
10
10
|
streamPartId: StreamPartID;
|
|
11
11
|
targetNeighbors: NodeList;
|
|
12
12
|
nearbyNodeView: NodeList;
|
|
13
|
-
neighborFinder:
|
|
13
|
+
neighborFinder: NeighborFinder;
|
|
14
14
|
rpcCommunicator: ListeningRpcCommunicator;
|
|
15
15
|
}
|
|
16
16
|
export declare class NeighborUpdateRpcLocal implements INeighborUpdateRpc {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NeighborUpdateRpcLocal = void 0;
|
|
4
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
5
4
|
const identifiers_1 = require("../../identifiers");
|
|
6
5
|
const NetworkRpc_client_1 = require("../../proto/packages/trackerless-network/protos/NetworkRpc.client");
|
|
7
6
|
const DeliveryRpcRemote_1 = require("../DeliveryRpcRemote");
|
|
@@ -20,7 +19,7 @@ class NeighborUpdateRpcLocal {
|
|
|
20
19
|
const ownNodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(this.config.localPeerDescriptor);
|
|
21
20
|
return nodeId !== ownNodeId && !this.config.targetNeighbors.getIds().includes(nodeId);
|
|
22
21
|
});
|
|
23
|
-
newPeerDescriptors.forEach((peerDescriptor) => this.config.nearbyNodeView.add(new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId,
|
|
22
|
+
newPeerDescriptors.forEach((peerDescriptor) => this.config.nearbyNodeView.add(new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId, this.config.rpcCommunicator, NetworkRpc_client_1.DeliveryRpcClient)));
|
|
24
23
|
this.config.neighborFinder.start();
|
|
25
24
|
const response = {
|
|
26
25
|
streamPartId: this.config.streamPartId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"NeighborUpdateRpcLocal.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts"],"names":[],"mappings":";;;AAEA,mDAA+D;AAE/D,yGAAqG;AAGrG,4DAAwD;AAaxD,MAAa,sBAAsB;IAI/B,YAAY,MAAoC;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,cAAc,CAAC,OAAuB,EAAE,OAA0B;QACpE,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAClF,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,oBAAoB,CAAC,CAAA;QAClE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YACnD,MAAM,kBAAkB,GAAG,OAAO,CAAC,mBAAmB;iBACjD,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAG,IAAA,yCAA2B,EAAC,cAAc,CAAC,CAAA;gBAC1D,MAAM,SAAS,GAAG,IAAA,yCAA2B,EAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;gBAC9E,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzF,CAAC,CAAC,CAAA;YACN,kBAAkB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CACzE,IAAI,qCAAiB,CACjB,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAC/B,cAAc,EACd,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,MAAM,CAAC,eAAe,EAC3B,qCAAiB,CACpB,CAAC,CACL,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;YAClC,MAAM,QAAQ,GAAmB;gBAC7B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gBACtC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBACzG,QAAQ,EAAE,KAAK;aAClB,CAAA;YACD,OAAO,QAAQ,CAAA;SAClB;aAAM;YACH,MAAM,QAAQ,GAAmB;gBAC7B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gBACtC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBACzG,QAAQ,EAAE,IAAI;aACjB,CAAA;YACD,OAAO,QAAQ,CAAA;SAClB;IACL,CAAC;CACJ;AA5CD,wDA4CC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { PeerDescriptor, RpcRemote } from '@streamr/dht';
|
|
2
|
-
import {
|
|
2
|
+
import { NeighborUpdateRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client';
|
|
3
3
|
interface UpdateNeighborsResponse {
|
|
4
4
|
peerDescriptors: PeerDescriptor[];
|
|
5
5
|
removeMe: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare class NeighborUpdateRpcRemote extends RpcRemote<
|
|
7
|
+
export declare class NeighborUpdateRpcRemote extends RpcRemote<NeighborUpdateRpcClient> {
|
|
8
8
|
updateNeighbors(neighbors: PeerDescriptor[]): Promise<UpdateNeighborsResponse>;
|
|
9
9
|
}
|
|
10
10
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateRpcRemote.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAwD;AACxD,0CAAuC;AACvC,mDAA+D;AAI/D,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOjC,MAAa,uBAAwB,SAAQ,
|
|
1
|
+
{"version":3,"file":"NeighborUpdateRpcRemote.js","sourceRoot":"","sources":["../../../../src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAwD;AACxD,0CAAuC;AACvC,mDAA+D;AAI/D,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOjC,MAAa,uBAAwB,SAAQ,eAAkC;IAE3E,KAAK,CAAC,eAAe,CAAC,SAA2B;QAC7C,MAAM,OAAO,GAAmB;YAC5B,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;YACjC,mBAAmB,EAAE,SAAS;YAC9B,QAAQ,EAAE,KAAK;SAClB,CAAA;QACD,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACzF,OAAO;gBACH,eAAe,EAAE,QAAQ,CAAC,mBAAmB;gBAC7C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC9B,CAAA;SACJ;QAAC,OAAO,GAAQ,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAA,yCAA2B,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;YAC1G,OAAO;gBACH,eAAe,EAAE,EAAE;gBACnB,QAAQ,EAAE,IAAI;aACjB,CAAA;SACJ;IACL,CAAC;CACJ;AAtBD,0DAsBC"}
|
|
@@ -13,7 +13,10 @@ interface ProxyClientConfig {
|
|
|
13
13
|
connectionLocker: ConnectionLocker;
|
|
14
14
|
minPropagationTargets?: number;
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
interface Events {
|
|
17
|
+
message: (message: StreamMessage) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ProxyClient extends EventEmitter<Events> {
|
|
17
20
|
private readonly rpcCommunicator;
|
|
18
21
|
private readonly deliveryRpcLocal;
|
|
19
22
|
private readonly config;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProxyClient = exports.retry = void 0;
|
|
4
4
|
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
6
5
|
const utils_1 = require("@streamr/utils");
|
|
7
6
|
const eventemitter3_1 = require("eventemitter3");
|
|
8
7
|
const lodash_1 = require("lodash");
|
|
@@ -16,6 +15,7 @@ const Propagation_1 = require("../propagation/Propagation");
|
|
|
16
15
|
const utils_2 = require("../utils");
|
|
17
16
|
const ProxyConnectionRpcRemote_1 = require("./ProxyConnectionRpcRemote");
|
|
18
17
|
const formStreamPartDeliveryServiceId_1 = require("../formStreamPartDeliveryServiceId");
|
|
18
|
+
// TODO use config option or named constant?
|
|
19
19
|
const retry = async (task, description, abortSignal, delay = 10000) => {
|
|
20
20
|
// eslint-disable-next-line no-constant-condition
|
|
21
21
|
while (true) {
|
|
@@ -41,6 +41,7 @@ class ProxyClient extends eventemitter3_1.EventEmitter {
|
|
|
41
41
|
this.connections = new Map();
|
|
42
42
|
this.config = config;
|
|
43
43
|
this.rpcCommunicator = new dht_1.ListeningRpcCommunicator((0, formStreamPartDeliveryServiceId_1.formStreamPartDeliveryServiceId)(config.streamPartId), config.transport);
|
|
44
|
+
// TODO use config option or named constant?
|
|
44
45
|
this.targetNeighbors = new NodeList_1.NodeList((0, identifiers_1.getNodeIdFromPeerDescriptor)(this.config.localPeerDescriptor), 1000);
|
|
45
46
|
this.deliveryRpcLocal = new DeliveryRpcLocal_1.DeliveryRpcLocal({
|
|
46
47
|
localPeerDescriptor: this.config.localPeerDescriptor,
|
|
@@ -58,6 +59,7 @@ class ProxyClient extends eventemitter3_1.EventEmitter {
|
|
|
58
59
|
markForInspection: () => { }
|
|
59
60
|
});
|
|
60
61
|
this.propagation = new Propagation_1.Propagation({
|
|
62
|
+
// TODO use config option or named constant?
|
|
61
63
|
minPropagationTargets: config.minPropagationTargets ?? 2,
|
|
62
64
|
sendToNeighbor: async (neighborId, msg) => {
|
|
63
65
|
const remote = this.targetNeighbors.get(neighborId);
|
|
@@ -116,13 +118,12 @@ class ProxyClient extends eventemitter3_1.EventEmitter {
|
|
|
116
118
|
}
|
|
117
119
|
async attemptConnection(nodeId, direction, userId) {
|
|
118
120
|
const peerDescriptor = this.definition.nodes.get(nodeId);
|
|
119
|
-
const
|
|
120
|
-
const rpcRemote = new ProxyConnectionRpcRemote_1.ProxyConnectionRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId, client);
|
|
121
|
+
const rpcRemote = new ProxyConnectionRpcRemote_1.ProxyConnectionRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId, this.rpcCommunicator, NetworkRpc_client_1.ProxyConnectionRpcClient);
|
|
121
122
|
const accepted = await rpcRemote.requestConnection(direction, userId);
|
|
122
123
|
if (accepted) {
|
|
123
124
|
this.config.connectionLocker.lockConnection(peerDescriptor, SERVICE_ID);
|
|
124
125
|
this.connections.set(nodeId, direction);
|
|
125
|
-
const remote = new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId,
|
|
126
|
+
const remote = new DeliveryRpcRemote_1.DeliveryRpcRemote(this.config.localPeerDescriptor, peerDescriptor, this.config.streamPartId, this.rpcCommunicator, NetworkRpc_client_1.DeliveryRpcClient);
|
|
126
127
|
this.targetNeighbors.add(remote);
|
|
127
128
|
this.propagation.onNeighborJoined(nodeId);
|
|
128
129
|
logger.info('Open proxy connection', {
|
|
@@ -147,7 +148,7 @@ class ProxyClient extends eventemitter3_1.EventEmitter {
|
|
|
147
148
|
nodeId
|
|
148
149
|
});
|
|
149
150
|
const server = this.targetNeighbors.get(nodeId);
|
|
150
|
-
server?.leaveStreamPartNotice();
|
|
151
|
+
server?.leaveStreamPartNotice(false);
|
|
151
152
|
this.removeConnection(nodeId);
|
|
152
153
|
}
|
|
153
154
|
}
|
|
@@ -185,7 +186,7 @@ class ProxyClient extends eventemitter3_1.EventEmitter {
|
|
|
185
186
|
stop() {
|
|
186
187
|
this.targetNeighbors.getAll().map((remote) => {
|
|
187
188
|
this.config.connectionLocker.unlockConnection(remote.getPeerDescriptor(), SERVICE_ID);
|
|
188
|
-
remote.leaveStreamPartNotice();
|
|
189
|
+
remote.leaveStreamPartNotice(false);
|
|
189
190
|
});
|
|
190
191
|
this.targetNeighbors.stop();
|
|
191
192
|
this.rpcCommunicator.destroy();
|