@streamr/trackerless-network 100.0.0-testnet-three.1 → 100.0.0-testnet-three.3
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/src/logic/Layer1Node.d.ts +2 -2
- package/dist/src/logic/RandomGraphNode.d.ts +5 -5
- package/dist/src/logic/RandomGraphNode.js +13 -13
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +1 -1
- package/dist/src/logic/StreamrNode.js +1 -1
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +1 -1
- package/dist/src/logic/createRandomGraphNode.js +6 -5
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/inspect/InspectSession.d.ts +1 -0
- package/dist/src/logic/inspect/InspectSession.js +3 -0
- package/dist/src/logic/inspect/InspectSession.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.js +1 -1
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +3 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +1 -0
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +3 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +5 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.js +8 -6
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +1 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +3 -0
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/test/utils/utils.d.ts +1 -2
- package/dist/test/utils/utils.js +2 -7
- package/dist/test/utils/utils.js.map +1 -1
- package/package.json +6 -6
- package/src/logic/Layer1Node.ts +2 -2
- package/src/logic/RandomGraphNode.ts +16 -16
- package/src/logic/StreamrNode.ts +2 -2
- package/src/logic/createRandomGraphNode.ts +7 -6
- package/src/logic/inspect/InspectSession.ts +4 -0
- package/src/logic/inspect/Inspector.ts +1 -1
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +4 -2
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +8 -6
- package/src/logic/proxy/ProxyClient.ts +14 -7
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +4 -0
- package/test/end-to-end/random-graph-with-real-connections.test.ts +4 -6
- package/test/integration/NetworkNode.test.ts +4 -9
- package/test/integration/StreamrNode.test.ts +4 -16
- package/test/integration/joining-streams-on-offline-peers.test.ts +7 -31
- package/test/integration/stream-without-default-entrypoints.test.ts +2 -6
- package/test/unit/InspectSession.test.ts +3 -4
- package/test/unit/Inspector.test.ts +3 -3
- package/test/unit/NeighborFinder.test.ts +3 -3
- package/test/unit/NeighborUpdateRpcLocal.test.ts +14 -10
- package/test/unit/NodeList.test.ts +4 -3
- package/test/unit/RandomGraphNode.test.ts +5 -5
- package/test/utils/utils.ts +2 -8
package/dist/test/utils/utils.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createNetworkNodeWithSimulator = exports.createMockHandshakeRpcRemote = exports.createMockDeliveryRpcRemote = exports.createMockPeerDescriptor = exports.
|
|
4
|
-
const crypto_1 = require("crypto");
|
|
3
|
+
exports.createNetworkNodeWithSimulator = exports.createMockHandshakeRpcRemote = exports.createMockDeliveryRpcRemote = exports.createMockPeerDescriptor = exports.createStreamMessage = exports.createMockRandomGraphNodeAndDhtNode = exports.mockConnectionLocker = void 0;
|
|
5
4
|
const dht_1 = require("@streamr/dht");
|
|
6
5
|
const NetworkRpc_1 = require("../../src/proto/packages/trackerless-network/protos/NetworkRpc");
|
|
7
6
|
const DeliveryRpcRemote_1 = require("../../src/logic/DeliveryRpcRemote");
|
|
@@ -61,14 +60,10 @@ const createStreamMessage = (content, streamPartId, publisherId, timestamp, sequ
|
|
|
61
60
|
return msg;
|
|
62
61
|
};
|
|
63
62
|
exports.createStreamMessage = createStreamMessage;
|
|
64
|
-
const createRandomNodeId = () => {
|
|
65
|
-
return (0, dht_1.getDhtAddressFromRaw)((0, crypto_1.randomBytes)(10));
|
|
66
|
-
};
|
|
67
|
-
exports.createRandomNodeId = createRandomNodeId;
|
|
68
63
|
const createMockPeerDescriptor = (opts) => {
|
|
69
64
|
return {
|
|
70
65
|
...opts,
|
|
71
|
-
nodeId: (0, dht_1.getRawFromDhtAddress)((0,
|
|
66
|
+
nodeId: (0, dht_1.getRawFromDhtAddress)((0, dht_1.createRandomDhtAddress)()),
|
|
72
67
|
type: dht_1.NodeType.NODEJS,
|
|
73
68
|
region: (0, dht_1.getRandomRegion)()
|
|
74
69
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../test/utils/utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../test/utils/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/trackerless-network",
|
|
3
|
-
"version": "100.0.0-testnet-three.
|
|
3
|
+
"version": "100.0.0-testnet-three.3",
|
|
4
4
|
"description": "Minimal and extendable implementation of the Streamr Network node.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@protobuf-ts/runtime": "^2.8.2",
|
|
32
32
|
"@protobuf-ts/runtime-rpc": "^2.8.2",
|
|
33
|
-
"@streamr/dht": "100.0.0-testnet-three.
|
|
34
|
-
"@streamr/proto-rpc": "100.0.0-testnet-three.
|
|
35
|
-
"@streamr/protocol": "100.0.0-testnet-three.
|
|
36
|
-
"@streamr/test-utils": "100.0.0-testnet-three.
|
|
37
|
-
"@streamr/utils": "100.0.0-testnet-three.
|
|
33
|
+
"@streamr/dht": "100.0.0-testnet-three.3",
|
|
34
|
+
"@streamr/proto-rpc": "100.0.0-testnet-three.3",
|
|
35
|
+
"@streamr/protocol": "100.0.0-testnet-three.3",
|
|
36
|
+
"@streamr/test-utils": "100.0.0-testnet-three.3",
|
|
37
|
+
"@streamr/utils": "100.0.0-testnet-three.3",
|
|
38
38
|
"eventemitter3": "^5.0.0",
|
|
39
39
|
"lodash": "^4.17.21",
|
|
40
40
|
"uuid": "^9.0.1",
|
package/src/logic/Layer1Node.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { DhtAddress, PeerDescriptor } from '@streamr/dht'
|
|
2
2
|
|
|
3
3
|
export interface Layer1NodeEvents {
|
|
4
|
-
|
|
4
|
+
contactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
5
5
|
contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
6
|
-
|
|
6
|
+
randomContactAdded: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void
|
|
7
7
|
randomContactRemoved: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -56,7 +56,7 @@ export interface StrictRandomGraphNodeConfig {
|
|
|
56
56
|
neighborUpdateManager: NeighborUpdateManager
|
|
57
57
|
propagation: Propagation
|
|
58
58
|
rpcCommunicator: ListeningRpcCommunicator
|
|
59
|
-
|
|
59
|
+
neighborTargetCount: number
|
|
60
60
|
inspector: Inspector
|
|
61
61
|
temporaryConnectionRpcLocal: TemporaryConnectionRpcLocal
|
|
62
62
|
isLocalNodeEntryPoint: () => boolean
|
|
@@ -115,26 +115,26 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
115
115
|
this.registerDefaultServerMethods()
|
|
116
116
|
addManagedEventListener<any, any>(
|
|
117
117
|
this.config.layer1Node as any,
|
|
118
|
-
'
|
|
119
|
-
(_peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => this.
|
|
118
|
+
'contactAdded',
|
|
119
|
+
(_peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => this.onContactAdded(closestPeers),
|
|
120
120
|
this.abortController.signal
|
|
121
121
|
)
|
|
122
122
|
addManagedEventListener<any, any>(
|
|
123
123
|
this.config.layer1Node as any,
|
|
124
124
|
'contactRemoved',
|
|
125
|
-
(_peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => this.
|
|
125
|
+
(_peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => this.onContactRemoved(closestPeers),
|
|
126
126
|
this.abortController.signal
|
|
127
127
|
)
|
|
128
128
|
addManagedEventListener<any, any>(
|
|
129
129
|
this.config.layer1Node as any,
|
|
130
|
-
'
|
|
131
|
-
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.
|
|
130
|
+
'randomContactAdded',
|
|
131
|
+
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.onRandomContactAdded(randomPeers),
|
|
132
132
|
this.abortController.signal
|
|
133
133
|
)
|
|
134
134
|
addManagedEventListener<any, any>(
|
|
135
135
|
this.config.layer1Node as any,
|
|
136
136
|
'randomContactRemoved',
|
|
137
|
-
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.
|
|
137
|
+
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.onRandomContactRemoved(randomPeers),
|
|
138
138
|
this.abortController.signal
|
|
139
139
|
)
|
|
140
140
|
addManagedEventListener<any, any>(
|
|
@@ -162,7 +162,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
162
162
|
}
|
|
163
163
|
const candidates = this.getNeighborCandidatesFromLayer1()
|
|
164
164
|
if (candidates.length > 0) {
|
|
165
|
-
this.
|
|
165
|
+
this.onContactAdded(candidates)
|
|
166
166
|
}
|
|
167
167
|
this.config.neighborFinder.start()
|
|
168
168
|
await this.config.neighborUpdateManager.start()
|
|
@@ -179,18 +179,18 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
179
179
|
(req: TemporaryConnectionRequest, context) => this.config.temporaryConnectionRpcLocal.closeConnection(req, context))
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
private
|
|
182
|
+
private onContactAdded(closestNodes: PeerDescriptor[]): void {
|
|
183
183
|
logger.trace(`New nearby contact found`)
|
|
184
184
|
if (this.isStopped()) {
|
|
185
185
|
return
|
|
186
186
|
}
|
|
187
187
|
this.updateNearbyNodeView(closestNodes)
|
|
188
|
-
if (this.config.neighbors.size() < this.config.
|
|
188
|
+
if (this.config.neighbors.size() < this.config.neighborTargetCount) {
|
|
189
189
|
this.config.neighborFinder.start()
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
private
|
|
193
|
+
private onContactRemoved(closestNodes: PeerDescriptor[]): void {
|
|
194
194
|
logger.trace(`Nearby contact removed`)
|
|
195
195
|
if (this.isStopped()) {
|
|
196
196
|
return
|
|
@@ -225,7 +225,7 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
private
|
|
228
|
+
private onRandomContactAdded(randomNodes: PeerDescriptor[]): void {
|
|
229
229
|
if (this.isStopped()) {
|
|
230
230
|
return
|
|
231
231
|
}
|
|
@@ -238,12 +238,12 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
238
238
|
this.config.rpcRequestTimeout
|
|
239
239
|
)
|
|
240
240
|
))
|
|
241
|
-
if (this.config.neighbors.size() < this.config.
|
|
241
|
+
if (this.config.neighbors.size() < this.config.neighborTargetCount) {
|
|
242
242
|
this.config.neighborFinder.start()
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
private
|
|
246
|
+
private onRandomContactRemoved(randomNodes: PeerDescriptor[]): void {
|
|
247
247
|
logger.trace(`New nearby contact found`)
|
|
248
248
|
if (this.isStopped()) {
|
|
249
249
|
return
|
|
@@ -311,7 +311,8 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
311
311
|
markAndCheckDuplicate(this.duplicateDetectors, msg.messageId!, msg.previousMessageRef)
|
|
312
312
|
}
|
|
313
313
|
this.emit('message', msg)
|
|
314
|
-
this.config.
|
|
314
|
+
const skipBackPropagation = previousNode !== undefined && !this.config.temporaryConnectionRpcLocal.hasNode(previousNode)
|
|
315
|
+
this.config.propagation.feedUnseenMessage(msg, this.getPropagationTargets(msg), skipBackPropagation ? previousNode : null)
|
|
315
316
|
}
|
|
316
317
|
|
|
317
318
|
inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
|
|
@@ -323,7 +324,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
323
324
|
if (this.config.proxyConnectionRpcLocal) {
|
|
324
325
|
propagationTargets = propagationTargets.concat(this.config.proxyConnectionRpcLocal.getPropagationTargets(msg))
|
|
325
326
|
}
|
|
326
|
-
propagationTargets = propagationTargets.filter((target) => !this.config.inspector.isInspected(target ))
|
|
327
327
|
propagationTargets = propagationTargets.concat(this.config.temporaryConnectionRpcLocal.getNodes().getIds())
|
|
328
328
|
return propagationTargets
|
|
329
329
|
}
|
package/src/logic/StreamrNode.ts
CHANGED
|
@@ -52,7 +52,7 @@ interface Metrics extends MetricsDefinition {
|
|
|
52
52
|
|
|
53
53
|
export interface StreamrNodeConfig {
|
|
54
54
|
metricsContext?: MetricsContext
|
|
55
|
-
|
|
55
|
+
streamPartitionNeighborTargetCount?: number
|
|
56
56
|
streamPartitionMinPropagationTargets?: number
|
|
57
57
|
acceptProxyConnections?: boolean
|
|
58
58
|
rpcRequestTimeout?: number
|
|
@@ -222,7 +222,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
222
222
|
connectionLocker: this.connectionLocker!,
|
|
223
223
|
localPeerDescriptor: this.layer0Node!.getLocalPeerDescriptor(),
|
|
224
224
|
minPropagationTargets: this.config.streamPartitionMinPropagationTargets,
|
|
225
|
-
|
|
225
|
+
neighborTargetCount: this.config.streamPartitionNeighborTargetCount,
|
|
226
226
|
acceptProxyConnections: this.config.acceptProxyConnections,
|
|
227
227
|
rpcRequestTimeout: this.config.rpcRequestTimeout,
|
|
228
228
|
isLocalNodeEntryPoint
|
|
@@ -14,7 +14,7 @@ import { formStreamPartDeliveryServiceId } from './formStreamPartDeliveryService
|
|
|
14
14
|
|
|
15
15
|
type RandomGraphNodeConfig = MarkOptional<StrictRandomGraphNodeConfig,
|
|
16
16
|
'nearbyNodeView' | 'randomNodeView' | 'neighbors' | 'propagation'
|
|
17
|
-
| 'handshaker' | 'neighborFinder' | 'neighborUpdateManager' | '
|
|
17
|
+
| 'handshaker' | 'neighborFinder' | 'neighborUpdateManager' | 'neighborTargetCount'
|
|
18
18
|
| 'rpcCommunicator' | 'nodeViewSize'
|
|
19
19
|
| 'inspector' | 'temporaryConnectionRpcLocal'> & {
|
|
20
20
|
maxContactCount?: number
|
|
@@ -29,7 +29,7 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
29
29
|
formStreamPartDeliveryServiceId(config.streamPartId),
|
|
30
30
|
config.transport
|
|
31
31
|
)
|
|
32
|
-
const
|
|
32
|
+
const neighborTargetCount = config.neighborTargetCount ?? 4
|
|
33
33
|
const maxContactCount = config.maxContactCount ?? 20
|
|
34
34
|
const minPropagationTargets = config.minPropagationTargets ?? 2
|
|
35
35
|
const acceptProxyConnections = config.acceptProxyConnections ?? false
|
|
@@ -69,14 +69,14 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
69
69
|
nearbyNodeView,
|
|
70
70
|
randomNodeView,
|
|
71
71
|
neighbors,
|
|
72
|
-
maxNeighborCount:
|
|
72
|
+
maxNeighborCount: neighborTargetCount,
|
|
73
73
|
rpcRequestTimeout: config.rpcRequestTimeout
|
|
74
74
|
})
|
|
75
75
|
const neighborFinder = config.neighborFinder ?? new NeighborFinder({
|
|
76
76
|
neighbors,
|
|
77
77
|
nearbyNodeView,
|
|
78
78
|
doFindNeighbors: (excludedIds) => handshaker.attemptHandshakesOnContacts(excludedIds),
|
|
79
|
-
minCount:
|
|
79
|
+
minCount: neighborTargetCount
|
|
80
80
|
})
|
|
81
81
|
const neighborUpdateManager = config.neighborUpdateManager ?? new NeighborUpdateManager({
|
|
82
82
|
neighbors,
|
|
@@ -86,7 +86,8 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
86
86
|
streamPartId: config.streamPartId,
|
|
87
87
|
rpcCommunicator,
|
|
88
88
|
neighborUpdateInterval,
|
|
89
|
-
|
|
89
|
+
neighborTargetCount,
|
|
90
|
+
connectionLocker: config.connectionLocker
|
|
90
91
|
})
|
|
91
92
|
const inspector = config.inspector ?? new Inspector({
|
|
92
93
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
@@ -104,7 +105,7 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
104
105
|
neighborFinder,
|
|
105
106
|
neighborUpdateManager,
|
|
106
107
|
propagation,
|
|
107
|
-
|
|
108
|
+
neighborTargetCount,
|
|
108
109
|
nodeViewSize: maxContactCount,
|
|
109
110
|
proxyConnectionRpcLocal,
|
|
110
111
|
inspector,
|
|
@@ -44,6 +44,10 @@ export class InspectSession extends EventEmitter<Events> {
|
|
|
44
44
|
return this.inspectionMessages.size
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
onlyMarkedByInspectedNode(): boolean {
|
|
48
|
+
return Array.from(this.inspectionMessages.values()).every((value) => value === true)
|
|
49
|
+
}
|
|
50
|
+
|
|
47
51
|
stop(): void {
|
|
48
52
|
this.emit('done')
|
|
49
53
|
}
|
|
@@ -80,7 +80,7 @@ export class Inspector {
|
|
|
80
80
|
await this.closeInspectConnection(peerDescriptor, lockId)
|
|
81
81
|
this.sessions.delete(nodeId)
|
|
82
82
|
}
|
|
83
|
-
return success || session.getInspectedMessageCount() < 1
|
|
83
|
+
return success || session.getInspectedMessageCount() < 1 || session.onlyMarkedByInspectedNode()
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
markMessage(sender: DhtAddress, messageId: MessageID): void {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NeighborUpdate } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
2
|
-
import { ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
2
|
+
import { ConnectionLocker, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
3
3
|
import { NeighborUpdateRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
4
4
|
import { Logger, scheduleAtInterval } from '@streamr/utils'
|
|
5
5
|
import { NeighborFinder } from './NeighborFinder'
|
|
@@ -13,10 +13,11 @@ interface NeighborUpdateManagerConfig {
|
|
|
13
13
|
neighbors: NodeList
|
|
14
14
|
nearbyNodeView: NodeList
|
|
15
15
|
neighborFinder: NeighborFinder
|
|
16
|
+
connectionLocker: ConnectionLocker
|
|
16
17
|
streamPartId: StreamPartID
|
|
17
18
|
rpcCommunicator: ListeningRpcCommunicator
|
|
18
19
|
neighborUpdateInterval: number
|
|
19
|
-
|
|
20
|
+
neighborTargetCount: number
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
const logger = new Logger(module)
|
|
@@ -51,6 +52,7 @@ export class NeighborUpdateManager {
|
|
|
51
52
|
if (res.removeMe) {
|
|
52
53
|
const nodeId = getNodeIdFromPeerDescriptor(neighbor.getPeerDescriptor())
|
|
53
54
|
this.config.neighbors.remove(nodeId)
|
|
55
|
+
this.config.connectionLocker.unlockConnection(neighbor.getPeerDescriptor(), this.config.streamPartId)
|
|
54
56
|
this.config.neighborFinder.start([nodeId])
|
|
55
57
|
}
|
|
56
58
|
}))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
2
|
-
import { DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
2
|
+
import { ConnectionLocker, DhtCallContext, ListeningRpcCommunicator, PeerDescriptor, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
3
3
|
import { NeighborUpdate } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
4
4
|
import { DeliveryRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
5
5
|
import { INeighborUpdateRpc } from '../../proto/packages/trackerless-network/protos/NetworkRpc.server'
|
|
@@ -14,8 +14,9 @@ interface NeighborUpdateRpcLocalConfig {
|
|
|
14
14
|
neighbors: NodeList
|
|
15
15
|
nearbyNodeView: NodeList
|
|
16
16
|
neighborFinder: NeighborFinder
|
|
17
|
+
connectionLocker: ConnectionLocker
|
|
17
18
|
rpcCommunicator: ListeningRpcCommunicator
|
|
18
|
-
|
|
19
|
+
neighborTargetCount: number
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export class NeighborUpdateRpcLocal implements INeighborUpdateRpc {
|
|
@@ -58,15 +59,16 @@ export class NeighborUpdateRpcLocal implements INeighborUpdateRpc {
|
|
|
58
59
|
if (!this.config.neighbors.has(senderId)) {
|
|
59
60
|
return this.createResponse(true)
|
|
60
61
|
} else {
|
|
61
|
-
const isOverNeighborCount = this.config.neighbors.size() > this.config.
|
|
62
|
-
// Motivation: We don't know the remote's
|
|
63
|
-
// if the remote has a "sufficient" number of neighbors, where "sufficient" means our
|
|
62
|
+
const isOverNeighborCount = this.config.neighbors.size() > this.config.neighborTargetCount
|
|
63
|
+
// Motivation: We don't know the remote's neighborTargetCount setting here. We only ask to cut connections
|
|
64
|
+
// if the remote has a "sufficient" number of neighbors, where "sufficient" means our neighborTargetCount
|
|
64
65
|
// setting.
|
|
65
|
-
&& message.neighborDescriptors.length > this.config.
|
|
66
|
+
&& message.neighborDescriptors.length > this.config.neighborTargetCount
|
|
66
67
|
if (!isOverNeighborCount) {
|
|
67
68
|
this.config.neighborFinder.start()
|
|
68
69
|
} else {
|
|
69
70
|
this.config.neighbors.remove(senderId)
|
|
71
|
+
this.config.connectionLocker.unlockConnection(senderPeerDescriptor, this.config.streamPartId)
|
|
70
72
|
}
|
|
71
73
|
return this.createResponse(isOverNeighborCount)
|
|
72
74
|
}
|
|
@@ -58,6 +58,11 @@ interface ProxyDefinition {
|
|
|
58
58
|
userId: EthereumAddress
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
interface ProxyConnection {
|
|
62
|
+
peerDescriptor: PeerDescriptor
|
|
63
|
+
direction: ProxyDirection
|
|
64
|
+
}
|
|
65
|
+
|
|
61
66
|
interface Events {
|
|
62
67
|
message: (message: StreamMessage) => void
|
|
63
68
|
}
|
|
@@ -73,7 +78,7 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
73
78
|
private readonly config: ProxyClientConfig
|
|
74
79
|
private readonly duplicateDetectors: Map<string, DuplicateMessageDetector> = new Map()
|
|
75
80
|
private definition?: ProxyDefinition
|
|
76
|
-
private readonly connections: Map<DhtAddress,
|
|
81
|
+
private readonly connections: Map<DhtAddress, ProxyConnection> = new Map()
|
|
77
82
|
private readonly propagation: Propagation
|
|
78
83
|
private readonly neighbors: NodeList
|
|
79
84
|
private readonly abortController: AbortController
|
|
@@ -159,7 +164,7 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
159
164
|
private getInvalidConnections(): DhtAddress[] {
|
|
160
165
|
return Array.from(this.connections.keys()).filter((id) => {
|
|
161
166
|
return !this.definition!.nodes.has(id)
|
|
162
|
-
|| this.definition!.direction !== this.connections.get(id)
|
|
167
|
+
|| this.definition!.direction !== this.connections.get(id)!.direction
|
|
163
168
|
})
|
|
164
169
|
}
|
|
165
170
|
|
|
@@ -183,7 +188,7 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
183
188
|
const accepted = await rpcRemote.requestConnection(direction, userId)
|
|
184
189
|
if (accepted) {
|
|
185
190
|
this.config.connectionLocker.lockConnection(peerDescriptor, SERVICE_ID)
|
|
186
|
-
this.connections.set(nodeId, direction)
|
|
191
|
+
this.connections.set(nodeId, { peerDescriptor, direction })
|
|
187
192
|
const remote = new DeliveryRpcRemote(
|
|
188
193
|
this.config.localPeerDescriptor,
|
|
189
194
|
peerDescriptor,
|
|
@@ -216,13 +221,15 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
216
221
|
})
|
|
217
222
|
const server = this.neighbors.get(nodeId)
|
|
218
223
|
server?.leaveStreamPartNotice(this.config.streamPartId, false)
|
|
219
|
-
this.removeConnection(nodeId)
|
|
224
|
+
this.removeConnection(this.connections.get(nodeId)!.peerDescriptor)
|
|
220
225
|
}
|
|
221
226
|
}
|
|
222
227
|
|
|
223
|
-
private removeConnection(
|
|
228
|
+
private removeConnection(peerDescriptor: PeerDescriptor): void {
|
|
229
|
+
const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
|
|
224
230
|
this.connections.delete(nodeId)
|
|
225
231
|
this.neighbors.remove(nodeId)
|
|
232
|
+
this.config.connectionLocker.unlockConnection(peerDescriptor, SERVICE_ID)
|
|
226
233
|
}
|
|
227
234
|
|
|
228
235
|
broadcast(msg: StreamMessage, previousNode?: DhtAddress): void {
|
|
@@ -234,7 +241,7 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
234
241
|
}
|
|
235
242
|
|
|
236
243
|
hasConnection(nodeId: DhtAddress, direction: ProxyDirection): boolean {
|
|
237
|
-
return this.connections.has(nodeId) && this.connections.get(nodeId) === direction
|
|
244
|
+
return this.connections.has(nodeId) && this.connections.get(nodeId)!.direction === direction
|
|
238
245
|
}
|
|
239
246
|
|
|
240
247
|
getDirection(): ProxyDirection {
|
|
@@ -245,7 +252,7 @@ export class ProxyClient extends EventEmitter<Events> {
|
|
|
245
252
|
const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
|
|
246
253
|
if (this.connections.has(nodeId)) {
|
|
247
254
|
this.config.connectionLocker.unlockConnection(peerDescriptor, SERVICE_ID)
|
|
248
|
-
this.removeConnection(
|
|
255
|
+
this.removeConnection(peerDescriptor)
|
|
249
256
|
await retry(() => this.updateConnections(), 'updating proxy connections', this.abortController.signal)
|
|
250
257
|
}
|
|
251
258
|
}
|
|
@@ -32,6 +32,10 @@ export class TemporaryConnectionRpcLocal implements ITemporaryConnectionRpc {
|
|
|
32
32
|
return this.temporaryNodes
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
hasNode(node: DhtAddress): boolean {
|
|
36
|
+
return this.temporaryNodes.has(node)
|
|
37
|
+
}
|
|
38
|
+
|
|
35
39
|
removeNode(nodeId: DhtAddress): void {
|
|
36
40
|
this.temporaryNodes.remove(nodeId)
|
|
37
41
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ConnectionManager, DhtNode, PeerDescriptor
|
|
1
|
+
import { ConnectionManager, DhtNode, PeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
3
3
|
import { waitForCondition } from '@streamr/utils'
|
|
4
|
-
import { createStreamMessage } from '../utils/utils'
|
|
4
|
+
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
5
5
|
import { createRandomGraphNode } from '../../src/logic/createRandomGraphNode'
|
|
6
6
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
7
7
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
@@ -10,11 +10,9 @@ import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
|
10
10
|
|
|
11
11
|
describe('random graph with real connections', () => {
|
|
12
12
|
|
|
13
|
-
const epPeerDescriptor: PeerDescriptor = {
|
|
14
|
-
nodeId: Uint8Array.from([1, 2, 3]),
|
|
15
|
-
type: NodeType.NODEJS,
|
|
13
|
+
const epPeerDescriptor: PeerDescriptor = createMockPeerDescriptor({
|
|
16
14
|
websocket: { host: '127.0.0.1', port: 12221, tls: false }
|
|
17
|
-
}
|
|
15
|
+
})
|
|
18
16
|
|
|
19
17
|
const streamPartId = StreamPartIDUtils.parse('random-graph#0')
|
|
20
18
|
// Currently the nodes here are practically layer0 nodes acting as layer1 nodes, for the purpose of this test
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
2
|
import {
|
|
3
3
|
ContentType,
|
|
4
4
|
EncryptionType,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from '@streamr/protocol'
|
|
11
11
|
import { EthereumAddress, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
|
|
12
12
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
13
|
+
import { createMockPeerDescriptor } from '../utils/utils'
|
|
13
14
|
|
|
14
15
|
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
15
16
|
|
|
@@ -21,15 +22,9 @@ describe('NetworkNode', () => {
|
|
|
21
22
|
let node1: NetworkNode
|
|
22
23
|
let node2: NetworkNode
|
|
23
24
|
|
|
24
|
-
const pd1: PeerDescriptor =
|
|
25
|
-
nodeId: new Uint8Array([1, 2, 3]),
|
|
26
|
-
type: NodeType.NODEJS
|
|
27
|
-
}
|
|
25
|
+
const pd1: PeerDescriptor = createMockPeerDescriptor()
|
|
28
26
|
|
|
29
|
-
const pd2: PeerDescriptor =
|
|
30
|
-
nodeId: new Uint8Array([1, 1, 1]),
|
|
31
|
-
type: NodeType.NODEJS
|
|
32
|
-
}
|
|
27
|
+
const pd2: PeerDescriptor = createMockPeerDescriptor()
|
|
33
28
|
|
|
34
29
|
beforeEach(async () => {
|
|
35
30
|
const simulator = new Simulator()
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DhtNode,
|
|
3
|
-
PeerDescriptor,
|
|
4
|
-
Simulator,
|
|
5
|
-
SimulatorTransport,
|
|
6
|
-
NodeType
|
|
7
|
-
} from '@streamr/dht'
|
|
1
|
+
import { DhtNode, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
8
2
|
import { StreamrNode, Events } from '../../src/logic/StreamrNode'
|
|
9
3
|
import { waitForEvent3, waitForCondition } from '@streamr/utils'
|
|
10
|
-
import { createStreamMessage } from '../utils/utils'
|
|
4
|
+
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
11
5
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
12
6
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
13
7
|
import { Layer0Node } from '../../src/logic/Layer0Node'
|
|
@@ -21,14 +15,8 @@ describe('StreamrNode', () => {
|
|
|
21
15
|
let node1: StreamrNode
|
|
22
16
|
let node2: StreamrNode
|
|
23
17
|
|
|
24
|
-
const peerDescriptor1: PeerDescriptor =
|
|
25
|
-
|
|
26
|
-
type: NodeType.NODEJS
|
|
27
|
-
}
|
|
28
|
-
const peerDescriptor2: PeerDescriptor = {
|
|
29
|
-
nodeId: new Uint8Array([1, 1, 1]),
|
|
30
|
-
type: NodeType.NODEJS
|
|
31
|
-
}
|
|
18
|
+
const peerDescriptor1: PeerDescriptor = createMockPeerDescriptor()
|
|
19
|
+
const peerDescriptor2: PeerDescriptor = createMockPeerDescriptor()
|
|
32
20
|
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
33
21
|
|
|
34
22
|
const msg = createStreamMessage(
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PeerDescriptor, Simulator, SimulatorTransport, LatencyType } from '@streamr/dht'
|
|
2
2
|
import { NetworkStack } from '../../src/NetworkStack'
|
|
3
3
|
import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
|
|
4
4
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
5
5
|
import { Any } from '../../src/proto/google/protobuf/any'
|
|
6
|
-
import { createStreamMessage } from '../utils/utils'
|
|
6
|
+
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
7
7
|
import { waitForCondition } from '@streamr/utils'
|
|
8
8
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
9
9
|
|
|
@@ -11,35 +11,11 @@ const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
|
|
|
11
11
|
|
|
12
12
|
describe('Joining stream parts on offline nodes', () => {
|
|
13
13
|
|
|
14
|
-
const entryPointPeerDescriptor: PeerDescriptor =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const node1PeerDescriptor: PeerDescriptor = {
|
|
21
|
-
nodeId: new Uint8Array([1, 1, 1]),
|
|
22
|
-
type: NodeType.NODEJS,
|
|
23
|
-
region: getRandomRegion()
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const node2PeerDescriptor: PeerDescriptor = {
|
|
27
|
-
nodeId: new Uint8Array([2, 2, 2]),
|
|
28
|
-
type: NodeType.NODEJS,
|
|
29
|
-
region: getRandomRegion()
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const offlineDescriptor1: PeerDescriptor = {
|
|
33
|
-
nodeId: new Uint8Array([3, 3, 3]),
|
|
34
|
-
type: NodeType.NODEJS,
|
|
35
|
-
region: getRandomRegion()
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const offlineDescriptor2: PeerDescriptor = {
|
|
39
|
-
nodeId: new Uint8Array([4, 4, 4]),
|
|
40
|
-
type: NodeType.NODEJS,
|
|
41
|
-
region: getRandomRegion()
|
|
42
|
-
}
|
|
14
|
+
const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
15
|
+
const node1PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
16
|
+
const node2PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
17
|
+
const offlineDescriptor1: PeerDescriptor = createMockPeerDescriptor()
|
|
18
|
+
const offlineDescriptor2: PeerDescriptor = createMockPeerDescriptor()
|
|
43
19
|
|
|
44
20
|
let entryPoint: NetworkStack
|
|
45
21
|
let node1: NetworkStack
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LatencyType,
|
|
1
|
+
import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
2
|
import {
|
|
3
3
|
ContentType,
|
|
4
4
|
EncryptionType,
|
|
@@ -22,11 +22,7 @@ describe('stream without default entrypoints', () => {
|
|
|
22
22
|
let entrypoint: NetworkNode
|
|
23
23
|
let nodes: NetworkNode[]
|
|
24
24
|
let receivedMessageCount: number
|
|
25
|
-
const entryPointPeerDescriptor: PeerDescriptor =
|
|
26
|
-
nodeId: new Uint8Array([1, 2, 3]),
|
|
27
|
-
type: NodeType.NODEJS,
|
|
28
|
-
region: getRandomRegion()
|
|
29
|
-
}
|
|
25
|
+
const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
30
26
|
|
|
31
27
|
const streamMessage = new StreamMessage({
|
|
32
28
|
messageId: new MessageID(
|
|
@@ -2,8 +2,7 @@ import { InspectSession, Events } from '../../src/logic/inspect/InspectSession'
|
|
|
2
2
|
import { MessageID } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
3
3
|
import { waitForEvent3 } from '../../../utils/dist/src/waitForEvent3'
|
|
4
4
|
import { utf8ToBinary } from '@streamr/utils'
|
|
5
|
-
import {
|
|
6
|
-
import { DhtAddress } from '@streamr/dht'
|
|
5
|
+
import { DhtAddress, createRandomDhtAddress } from '@streamr/dht'
|
|
7
6
|
|
|
8
7
|
describe('InspectSession', () => {
|
|
9
8
|
|
|
@@ -31,8 +30,8 @@ describe('InspectSession', () => {
|
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
beforeEach(() => {
|
|
34
|
-
inspectedNode =
|
|
35
|
-
anotherNode =
|
|
33
|
+
inspectedNode = createRandomDhtAddress()
|
|
34
|
+
anotherNode = createRandomDhtAddress()
|
|
36
35
|
inspectSession = new InspectSession({
|
|
37
36
|
inspectedNode
|
|
38
37
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
1
|
+
import { ListeningRpcCommunicator, createRandomDhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { utf8ToBinary } from '@streamr/utils'
|
|
3
3
|
import { Inspector } from '../../src/logic/inspect/Inspector'
|
|
4
4
|
import { MockTransport } from '../utils/mock/Transport'
|
|
5
|
-
import { createMockPeerDescriptor,
|
|
5
|
+
import { createMockPeerDescriptor, mockConnectionLocker } from '../utils/utils'
|
|
6
6
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
7
7
|
|
|
8
8
|
describe('Inspector', () => {
|
|
@@ -12,7 +12,7 @@ describe('Inspector', () => {
|
|
|
12
12
|
|
|
13
13
|
const inspectedDescriptor = createMockPeerDescriptor()
|
|
14
14
|
|
|
15
|
-
const nodeId =
|
|
15
|
+
const nodeId = createRandomDhtAddress()
|
|
16
16
|
let mockConnect: jest.Mock
|
|
17
17
|
|
|
18
18
|
const messageRef = {
|