@streamr/trackerless-network 100.0.0-pretestnet.6 → 100.0.0-rc.1
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/README.md +57 -0
- package/dist/package.json +12 -12
- package/dist/src/NetworkNode.d.ts +6 -5
- package/dist/src/NetworkNode.js +9 -2
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +13 -9
- package/dist/src/NetworkStack.js +80 -12
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +4 -3
- package/dist/src/exports.js +12 -1
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/DeliveryRpcLocal.d.ts +4 -5
- package/dist/src/logic/DeliveryRpcLocal.js +6 -5
- package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/DeliveryRpcRemote.d.ts +5 -4
- package/dist/src/logic/DeliveryRpcRemote.js +4 -3
- package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
- package/dist/src/logic/DuplicateMessageDetector.d.ts +3 -3
- package/dist/src/logic/DuplicateMessageDetector.js +10 -6
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +8 -5
- package/dist/src/logic/EntryPointDiscovery.js +24 -15
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/Layer0Node.d.ts +6 -4
- package/dist/src/logic/Layer1Node.d.ts +12 -6
- package/dist/src/logic/NodeList.d.ts +13 -15
- package/dist/src/logic/NodeList.js +19 -16
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +26 -22
- package/dist/src/logic/RandomGraphNode.js +85 -52
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +6 -6
- package/dist/src/logic/StreamrNode.js +53 -37
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +2 -2
- package/dist/src/logic/createRandomGraphNode.js +33 -21
- package/dist/src/logic/createRandomGraphNode.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/InspectSession.d.ts +4 -3
- package/dist/src/logic/inspect/InspectSession.js +6 -2
- package/dist/src/logic/inspect/InspectSession.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.d.ts +11 -16
- package/dist/src/logic/inspect/Inspector.js +21 -9
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +7 -9
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +55 -32
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +8 -6
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +25 -16
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +9 -15
- package/dist/src/logic/neighbor-discovery/Handshaker.js +68 -44
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +8 -10
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +12 -2
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +7 -10
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +11 -9
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +8 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +33 -24
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +5 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +4 -5
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.d.ts +9 -0
- package/dist/src/logic/node-info/NodeInfoClient.js +21 -0
- package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +12 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js +22 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +6 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js +11 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js.map +1 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.js +7 -3
- package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -1
- package/dist/src/logic/propagation/Propagation.d.ts +4 -4
- package/dist/src/logic/propagation/Propagation.js +4 -0
- package/dist/src/logic/propagation/Propagation.js.map +1 -1
- package/dist/src/logic/propagation/PropagationTaskStore.d.ts +2 -2
- package/dist/src/logic/propagation/PropagationTaskStore.js +1 -0
- package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +87 -53
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +7 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +32 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -0
- package/dist/src/logic/proxy/ProxyClient.d.ts +8 -6
- package/dist/src/logic/proxy/ProxyClient.js +40 -28
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +6 -7
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +8 -8
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +3 -3
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +9 -4
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +21 -6
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +4 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +13 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/utils.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.js +8 -8
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.js +2 -4
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.js +10 -10
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +36 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +54 -52
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +184 -234
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +118 -168
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +20 -29
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +42 -5
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +52 -19
- 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 +193 -28
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +129 -20
- 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 +20 -3
- package/dist/test/benchmark/first-message.js +14 -15
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -4
- package/dist/test/utils/utils.js +20 -19
- package/dist/test/utils/utils.js.map +1 -1
- package/jest.config.js +3 -38
- package/package.json +12 -12
- package/protos/NetworkRpc.proto +57 -12
- package/src/NetworkNode.ts +13 -6
- package/src/NetworkStack.ts +94 -16
- package/src/exports.ts +11 -3
- package/src/logic/DeliveryRpcLocal.ts +7 -8
- package/src/logic/DeliveryRpcRemote.ts +7 -5
- package/src/logic/DuplicateMessageDetector.ts +7 -7
- package/src/logic/EntryPointDiscovery.ts +26 -19
- package/src/logic/Layer0Node.ts +6 -4
- package/src/logic/Layer1Node.ts +21 -6
- package/src/logic/NodeList.ts +26 -27
- package/src/logic/RandomGraphNode.ts +158 -78
- package/src/logic/StreamrNode.ts +58 -41
- package/src/logic/createRandomGraphNode.ts +37 -25
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/inspect/InspectSession.ts +8 -4
- package/src/logic/inspect/Inspector.ts +34 -24
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +72 -38
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +32 -20
- package/src/logic/neighbor-discovery/Handshaker.ts +90 -75
- package/src/logic/neighbor-discovery/NeighborFinder.ts +18 -13
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +19 -20
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +43 -33
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +6 -6
- package/src/logic/node-info/NodeInfoClient.ts +23 -0
- package/src/logic/node-info/NodeInfoRpcLocal.ts +28 -0
- package/src/logic/node-info/NodeInfoRpcRemote.ts +11 -0
- package/src/logic/propagation/Propagation.ts +7 -6
- package/src/logic/propagation/PropagationTaskStore.ts +2 -2
- package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +1 -1
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +1 -2
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +95 -69
- package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +37 -0
- package/src/logic/proxy/ProxyClient.ts +60 -40
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +15 -19
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +3 -3
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +30 -10
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +14 -4
- package/src/proto/google/protobuf/any.ts +4 -4
- package/src/proto/google/protobuf/empty.ts +2 -4
- package/src/proto/google/protobuf/timestamp.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +50 -66
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +21 -30
- package/src/proto/packages/dht/protos/DhtRpc.ts +242 -316
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +49 -7
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +21 -4
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +251 -44
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
- package/test/benchmark/first-message.ts +38 -17
- package/test/end-to-end/inspect.test.ts +16 -4
- package/test/end-to-end/proxy-and-full-node.test.ts +26 -13
- package/test/end-to-end/proxy-connections.test.ts +23 -11
- package/test/end-to-end/proxy-key-exchange.test.ts +25 -15
- package/test/end-to-end/random-graph-with-real-connections.test.ts +35 -32
- package/test/end-to-end/webrtc-full-node-network.test.ts +11 -12
- package/test/end-to-end/websocket-full-node-network.test.ts +12 -12
- package/test/integration/DeliveryRpcRemote.test.ts +6 -9
- package/test/integration/HandshakeRpcRemote.test.ts +6 -8
- package/test/integration/Handshakes.test.ts +29 -27
- package/test/integration/Inspect.test.ts +0 -2
- package/test/integration/NeighborUpdateRpcRemote.test.ts +6 -7
- package/test/integration/NetworkNode.test.ts +27 -12
- package/test/integration/NetworkRpc.test.ts +3 -5
- package/test/integration/NetworkStack.test.ts +2 -2
- package/test/integration/NodeInfoRpc.test.ts +104 -0
- package/test/integration/Propagation.test.ts +3 -3
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +24 -25
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +26 -24
- 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 +22 -23
- package/test/integration/streamEntryPointReplacing.test.ts +94 -0
- package/test/unit/DeliveryRpcLocal.test.ts +2 -1
- package/test/unit/EntrypointDiscovery.test.ts +11 -8
- package/test/unit/GroupKeyResponseTranslator.test.ts +1 -1
- package/test/unit/HandshakeRpcLocal.test.ts +80 -28
- package/test/unit/Handshaker.test.ts +14 -9
- package/test/unit/InspectSession.test.ts +5 -6
- package/test/unit/Inspector.test.ts +3 -4
- package/test/unit/NeighborFinder.test.ts +12 -9
- package/test/unit/NeighborUpdateRpcLocal.test.ts +139 -0
- package/test/unit/NodeList.test.ts +77 -80
- package/test/unit/Propagation.test.ts +21 -16
- package/test/unit/ProxyConnectionRpcRemote.test.ts +18 -12
- package/test/unit/RandomGraphNode.test.ts +23 -20
- package/test/unit/StreamMessageTranslator.test.ts +10 -8
- package/test/unit/StreamPartIDDataKey.test.ts +12 -0
- package/test/unit/StreamrNode.test.ts +2 -0
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +38 -0
- package/test/unit/oldStreamMessageBinaryUtils.test.ts +39 -0
- package/test/utils/mock/MockHandshaker.ts +6 -5
- package/test/utils/mock/MockLayer0Node.ts +7 -2
- package/test/utils/mock/MockLayer1Node.ts +5 -2
- package/test/utils/mock/MockNeighborFinder.ts +3 -2
- package/test/utils/mock/MockNeighborUpdateManager.ts +3 -2
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/utils.ts +40 -25
- package/tsconfig.jest.json +5 -4
- package/tsconfig.node.json +2 -2
- package/dist/src/identifiers.d.ts +0 -4
- package/dist/src/identifiers.js +0 -9
- package/dist/src/identifiers.js.map +0 -1
- package/src/identifiers.ts +0 -8
- package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
package/src/logic/StreamrNode.ts
CHANGED
|
@@ -3,7 +3,9 @@ import {
|
|
|
3
3
|
DhtNode,
|
|
4
4
|
ITransport,
|
|
5
5
|
PeerDescriptor,
|
|
6
|
-
EXISTING_CONNECTION_TIMEOUT
|
|
6
|
+
EXISTING_CONNECTION_TIMEOUT,
|
|
7
|
+
DhtAddress,
|
|
8
|
+
getNodeIdFromPeerDescriptor
|
|
7
9
|
} from '@streamr/dht'
|
|
8
10
|
import { StreamID, StreamPartID, StreamPartIDUtils, toStreamPartID } from '@streamr/protocol'
|
|
9
11
|
import {
|
|
@@ -16,8 +18,7 @@ import {
|
|
|
16
18
|
} from '@streamr/utils'
|
|
17
19
|
import { EventEmitter } from 'eventemitter3'
|
|
18
20
|
import { sampleSize } from 'lodash'
|
|
19
|
-
import {
|
|
20
|
-
import { ProxyDirection, StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
21
|
+
import { ProxyDirection, StreamPartitionInfo, StreamMessage } from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
21
22
|
import { Layer0Node } from './Layer0Node'
|
|
22
23
|
import { Layer1Node } from './Layer1Node'
|
|
23
24
|
import { RandomGraphNode } from './RandomGraphNode'
|
|
@@ -44,8 +45,6 @@ export interface Events {
|
|
|
44
45
|
|
|
45
46
|
const logger = new Logger(module)
|
|
46
47
|
|
|
47
|
-
let cleanUp: () => Promise<void> = async () => { }
|
|
48
|
-
|
|
49
48
|
interface Metrics extends MetricsDefinition {
|
|
50
49
|
broadcastMessagesPerSecond: Metric
|
|
51
50
|
broadcastBytesPerSecond: Metric
|
|
@@ -53,7 +52,7 @@ interface Metrics extends MetricsDefinition {
|
|
|
53
52
|
|
|
54
53
|
export interface StreamrNodeConfig {
|
|
55
54
|
metricsContext?: MetricsContext
|
|
56
|
-
|
|
55
|
+
streamPartitionNeighborTargetCount?: number
|
|
57
56
|
streamPartitionMinPropagationTargets?: number
|
|
58
57
|
acceptProxyConnections?: boolean
|
|
59
58
|
rpcRequestTimeout?: number
|
|
@@ -93,7 +92,6 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
93
92
|
this.layer0Node = startedAndJoinedLayer0Node
|
|
94
93
|
this.transport = transport
|
|
95
94
|
this.connectionLocker = connectionLocker
|
|
96
|
-
cleanUp = () => this.destroy()
|
|
97
95
|
}
|
|
98
96
|
|
|
99
97
|
async destroy(): Promise<void> {
|
|
@@ -112,10 +110,13 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
112
110
|
|
|
113
111
|
broadcast(msg: StreamMessage): void {
|
|
114
112
|
const streamPartId = toStreamPartID(msg.messageId!.streamId as StreamID, msg.messageId!.streamPartition)
|
|
113
|
+
logger.debug(`Broadcasting to stream part ${streamPartId}`)
|
|
115
114
|
this.joinStreamPart(streamPartId)
|
|
116
115
|
this.streamParts.get(streamPartId)!.broadcast(msg)
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
if (msg.body.oneofKind === 'contentMessage') {
|
|
117
|
+
this.metrics.broadcastMessagesPerSecond.record(1)
|
|
118
|
+
this.metrics.broadcastBytesPerSecond.record(msg.body.contentMessage.content.length)
|
|
119
|
+
}
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
async leaveStreamPart(streamPartId: StreamPartID): Promise<void> {
|
|
@@ -127,26 +128,25 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
joinStreamPart(streamPartId: StreamPartID): void {
|
|
130
|
-
logger.debug(`Join stream part ${streamPartId}`)
|
|
131
131
|
let streamPart = this.streamParts.get(streamPartId)
|
|
132
132
|
if (streamPart !== undefined) {
|
|
133
133
|
return
|
|
134
134
|
}
|
|
135
|
+
logger.debug(`Join stream part ${streamPartId}`)
|
|
135
136
|
const layer1Node = this.createLayer1Node(streamPartId, this.knownStreamPartEntryPoints.get(streamPartId) ?? [])
|
|
136
|
-
const node = this.createRandomGraphNode(streamPartId, layer1Node)
|
|
137
137
|
const entryPointDiscovery = new EntryPointDiscovery({
|
|
138
138
|
streamPartId,
|
|
139
139
|
localPeerDescriptor: this.getPeerDescriptor(),
|
|
140
140
|
layer1Node,
|
|
141
|
-
|
|
141
|
+
fetchEntryPointData: (key) => this.layer0Node!.fetchDataFromDht(key),
|
|
142
142
|
storeEntryPointData: (key, data) => this.layer0Node!.storeDataToDht(key, data),
|
|
143
|
-
deleteEntryPointData: async (key) =>
|
|
144
|
-
if (this.destroyed) {
|
|
145
|
-
return
|
|
146
|
-
}
|
|
147
|
-
return this.layer0Node!.deleteDataFromDht(key)
|
|
148
|
-
}
|
|
143
|
+
deleteEntryPointData: async (key) => this.layer0Node!.deleteDataFromDht(key, false)
|
|
149
144
|
})
|
|
145
|
+
const node = this.createRandomGraphNode(
|
|
146
|
+
streamPartId,
|
|
147
|
+
layer1Node,
|
|
148
|
+
() => entryPointDiscovery.isLocalNodeEntryPoint()
|
|
149
|
+
)
|
|
150
150
|
streamPart = {
|
|
151
151
|
proxied: false,
|
|
152
152
|
layer1Node,
|
|
@@ -163,6 +163,14 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
163
163
|
node.on('message', (message: StreamMessage) => {
|
|
164
164
|
this.emit('newMessage', message)
|
|
165
165
|
})
|
|
166
|
+
const handleEntryPointLeave = async () => {
|
|
167
|
+
if (this.destroyed || entryPointDiscovery.isLocalNodeEntryPoint() || this.knownStreamPartEntryPoints.has(streamPartId)) {
|
|
168
|
+
return
|
|
169
|
+
}
|
|
170
|
+
const entryPoints = await entryPointDiscovery.discoverEntryPointsFromDht(0)
|
|
171
|
+
await entryPointDiscovery.storeSelfAsEntryPointIfNecessary(entryPoints.discoveredEntryPoints.length)
|
|
172
|
+
}
|
|
173
|
+
node.on('entryPointLeaveDetected', () => handleEntryPointLeave())
|
|
166
174
|
setImmediate(async () => {
|
|
167
175
|
try {
|
|
168
176
|
await this.startLayersAndJoinDht(streamPartId, entryPointDiscovery)
|
|
@@ -186,7 +194,10 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
186
194
|
entryPoints.length
|
|
187
195
|
)
|
|
188
196
|
entryPoints = entryPoints.concat(discoveryResult.discoveredEntryPoints)
|
|
189
|
-
await
|
|
197
|
+
await Promise.all([
|
|
198
|
+
streamPart.layer1Node.joinDht(sampleSize(entryPoints, NETWORK_SPLIT_AVOIDANCE_LIMIT)),
|
|
199
|
+
streamPart.layer1Node.joinRing()
|
|
200
|
+
])
|
|
190
201
|
if (discoveryResult.entryPointsFromDht) {
|
|
191
202
|
await entryPointDiscovery.storeSelfAsEntryPointIfNecessary(entryPoints.length)
|
|
192
203
|
}
|
|
@@ -198,13 +209,17 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
198
209
|
serviceId: 'layer1::' + streamPartId,
|
|
199
210
|
peerDescriptor: this.layer0Node!.getLocalPeerDescriptor(),
|
|
200
211
|
entryPoints,
|
|
201
|
-
numberOfNodesPerKBucket: 4,
|
|
212
|
+
numberOfNodesPerKBucket: 4, // TODO use config option or named constant?
|
|
202
213
|
rpcRequestTimeout: EXISTING_CONNECTION_TIMEOUT,
|
|
203
|
-
dhtJoinTimeout: 20000
|
|
214
|
+
dhtJoinTimeout: 20000 // TODO use config option or named constant?
|
|
204
215
|
})
|
|
205
216
|
}
|
|
206
217
|
|
|
207
|
-
private createRandomGraphNode(
|
|
218
|
+
private createRandomGraphNode(
|
|
219
|
+
streamPartId: StreamPartID,
|
|
220
|
+
layer1Node: Layer1Node,
|
|
221
|
+
isLocalNodeEntryPoint: () => boolean
|
|
222
|
+
) {
|
|
208
223
|
return createRandomGraphNode({
|
|
209
224
|
streamPartId,
|
|
210
225
|
transport: this.transport!,
|
|
@@ -212,9 +227,10 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
212
227
|
connectionLocker: this.connectionLocker!,
|
|
213
228
|
localPeerDescriptor: this.layer0Node!.getLocalPeerDescriptor(),
|
|
214
229
|
minPropagationTargets: this.config.streamPartitionMinPropagationTargets,
|
|
215
|
-
|
|
230
|
+
neighborTargetCount: this.config.streamPartitionNeighborTargetCount,
|
|
216
231
|
acceptProxyConnections: this.config.acceptProxyConnections,
|
|
217
|
-
rpcRequestTimeout: this.config.rpcRequestTimeout
|
|
232
|
+
rpcRequestTimeout: this.config.rpcRequestTimeout,
|
|
233
|
+
isLocalNodeEntryPoint
|
|
218
234
|
})
|
|
219
235
|
}
|
|
220
236
|
|
|
@@ -225,6 +241,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
225
241
|
userId: EthereumAddress,
|
|
226
242
|
connectionCount?: number
|
|
227
243
|
): Promise<void> {
|
|
244
|
+
// TODO explicit default value for "acceptProxyConnections" or make it required
|
|
228
245
|
if (this.config.acceptProxyConnections) {
|
|
229
246
|
throw new Error('cannot set proxies when acceptProxyConnections=true')
|
|
230
247
|
}
|
|
@@ -272,6 +289,20 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
272
289
|
return false
|
|
273
290
|
}
|
|
274
291
|
|
|
292
|
+
// TODO inline this method?
|
|
293
|
+
getNodeInfo(): StreamPartitionInfo[] {
|
|
294
|
+
const streamParts = Array.from(this.streamParts.entries()).filter(([_, node]) => node.proxied === false)
|
|
295
|
+
return streamParts.map(([streamPartId]) => {
|
|
296
|
+
const stream = this.streamParts.get(streamPartId)! as { node: RandomGraphNode, layer1Node: Layer1Node }
|
|
297
|
+
return {
|
|
298
|
+
id: streamPartId,
|
|
299
|
+
controlLayerNeighbors: stream.layer1Node.getNeighbors(),
|
|
300
|
+
deliveryLayerNeighbors: stream.node.getNeighbors()
|
|
301
|
+
}
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
|
|
275
306
|
setStreamPartEntryPoints(streamPartId: StreamPartID, entryPoints: PeerDescriptor[]): void {
|
|
276
307
|
this.knownStreamPartEntryPoints.set(streamPartId, entryPoints)
|
|
277
308
|
}
|
|
@@ -295,14 +326,14 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
295
326
|
return this.layer0Node!.getLocalPeerDescriptor()
|
|
296
327
|
}
|
|
297
328
|
|
|
298
|
-
getNodeId():
|
|
329
|
+
getNodeId(): DhtAddress {
|
|
299
330
|
return getNodeIdFromPeerDescriptor(this.layer0Node!.getLocalPeerDescriptor())
|
|
300
331
|
}
|
|
301
332
|
|
|
302
|
-
getNeighbors(streamPartId: StreamPartID):
|
|
333
|
+
getNeighbors(streamPartId: StreamPartID): DhtAddress[] {
|
|
303
334
|
const streamPart = this.streamParts.get(streamPartId)
|
|
304
335
|
return (streamPart !== undefined) && (streamPart.proxied === false)
|
|
305
|
-
? streamPart.node.
|
|
336
|
+
? streamPart.node.getNeighbors().map((n) => getNodeIdFromPeerDescriptor(n))
|
|
306
337
|
: []
|
|
307
338
|
}
|
|
308
339
|
|
|
@@ -310,17 +341,3 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
310
341
|
return Array.from(this.streamParts.keys()).map((id) => StreamPartIDUtils.parse(id))
|
|
311
342
|
}
|
|
312
343
|
}
|
|
313
|
-
|
|
314
|
-
[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `unhandledRejection`, `SIGTERM`].forEach((term) => {
|
|
315
|
-
process.on(term, async () => {
|
|
316
|
-
await cleanUp()
|
|
317
|
-
process.exit()
|
|
318
|
-
})
|
|
319
|
-
})
|
|
320
|
-
|
|
321
|
-
declare let window: any
|
|
322
|
-
if (typeof window === 'object') {
|
|
323
|
-
window.addEventListener('unload', async () => {
|
|
324
|
-
await cleanUp()
|
|
325
|
-
})
|
|
326
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ListeningRpcCommunicator } from '@streamr/dht'
|
|
1
|
+
import { DhtAddress, ListeningRpcCommunicator, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { Handshaker } from './neighbor-discovery/Handshaker'
|
|
3
3
|
import { NeighborFinder } from './neighbor-discovery/NeighborFinder'
|
|
4
4
|
import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager'
|
|
@@ -10,15 +10,14 @@ import { MarkOptional } from 'ts-essentials'
|
|
|
10
10
|
import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
|
|
11
11
|
import { Inspector } from './inspect/Inspector'
|
|
12
12
|
import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
|
|
13
|
-
import { NodeID, getNodeIdFromPeerDescriptor } from '../identifiers'
|
|
14
13
|
import { formStreamPartDeliveryServiceId } from './formStreamPartDeliveryServiceId'
|
|
15
14
|
|
|
16
15
|
type RandomGraphNodeConfig = MarkOptional<StrictRandomGraphNodeConfig,
|
|
17
|
-
'nearbyNodeView' | 'randomNodeView' | '
|
|
18
|
-
| 'handshaker' | 'neighborFinder' | 'neighborUpdateManager' | '
|
|
16
|
+
'nearbyNodeView' | 'randomNodeView' | 'neighbors' | 'leftNodeView' | 'rightNodeView' | 'propagation'
|
|
17
|
+
| 'handshaker' | 'neighborFinder' | 'neighborUpdateManager' | 'neighborTargetCount'
|
|
19
18
|
| 'rpcCommunicator' | 'nodeViewSize'
|
|
20
19
|
| 'inspector' | 'temporaryConnectionRpcLocal'> & {
|
|
21
|
-
|
|
20
|
+
maxContactCount?: number
|
|
22
21
|
minPropagationTargets?: number
|
|
23
22
|
acceptProxyConnections?: boolean
|
|
24
23
|
neighborUpdateInterval?: number
|
|
@@ -30,19 +29,23 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
30
29
|
formStreamPartDeliveryServiceId(config.streamPartId),
|
|
31
30
|
config.transport
|
|
32
31
|
)
|
|
33
|
-
const
|
|
34
|
-
const
|
|
32
|
+
const neighborTargetCount = config.neighborTargetCount ?? 4
|
|
33
|
+
const maxContactCount = config.maxContactCount ?? 20
|
|
35
34
|
const minPropagationTargets = config.minPropagationTargets ?? 2
|
|
36
35
|
const acceptProxyConnections = config.acceptProxyConnections ?? false
|
|
37
36
|
const neighborUpdateInterval = config.neighborUpdateInterval ?? 10000
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
37
|
+
const neighbors = config.neighbors ?? new NodeList(ownNodeId, maxContactCount)
|
|
38
|
+
const leftNodeView = config.leftNodeView ?? new NodeList(ownNodeId, maxContactCount)
|
|
39
|
+
const rightNodeView = config.rightNodeView ?? new NodeList(ownNodeId, maxContactCount)
|
|
40
|
+
const nearbyNodeView = config.nearbyNodeView ?? new NodeList(ownNodeId, maxContactCount)
|
|
41
|
+
const randomNodeView = config.randomNodeView ?? new NodeList(ownNodeId, maxContactCount)
|
|
42
|
+
const ongoingHandshakes = new Set<DhtAddress>()
|
|
41
43
|
|
|
42
44
|
const temporaryConnectionRpcLocal = new TemporaryConnectionRpcLocal({
|
|
43
|
-
streamPartId: config.streamPartId,
|
|
44
45
|
rpcCommunicator,
|
|
45
|
-
localPeerDescriptor: config.localPeerDescriptor
|
|
46
|
+
localPeerDescriptor: config.localPeerDescriptor,
|
|
47
|
+
streamPartId: config.streamPartId,
|
|
48
|
+
connectionLocker: config.connectionLocker
|
|
46
49
|
})
|
|
47
50
|
const proxyConnectionRpcLocal = acceptProxyConnections ? new ProxyConnectionRpcLocal({
|
|
48
51
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
@@ -51,8 +54,8 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
51
54
|
}) : undefined
|
|
52
55
|
const propagation = config.propagation ?? new Propagation({
|
|
53
56
|
minPropagationTargets,
|
|
54
|
-
sendToNeighbor: async (neighborId:
|
|
55
|
-
const remote =
|
|
57
|
+
sendToNeighbor: async (neighborId: DhtAddress, msg: StreamMessage): Promise<void> => {
|
|
58
|
+
const remote = neighbors.get(neighborId) ?? temporaryConnectionRpcLocal.getNodes().get(neighborId)
|
|
56
59
|
const proxyConnection = proxyConnectionRpcLocal?.getConnection(neighborId)
|
|
57
60
|
if (remote) {
|
|
58
61
|
await remote.sendStreamMessage(msg)
|
|
@@ -66,28 +69,35 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
66
69
|
const handshaker = config.handshaker ?? new Handshaker({
|
|
67
70
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
68
71
|
streamPartId: config.streamPartId,
|
|
69
|
-
connectionLocker: config.connectionLocker,
|
|
70
72
|
rpcCommunicator,
|
|
73
|
+
neighbors,
|
|
74
|
+
leftNodeView,
|
|
75
|
+
rightNodeView,
|
|
71
76
|
nearbyNodeView,
|
|
72
77
|
randomNodeView,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
maxNeighborCount: neighborTargetCount,
|
|
79
|
+
rpcRequestTimeout: config.rpcRequestTimeout,
|
|
80
|
+
ongoingHandshakes
|
|
76
81
|
})
|
|
77
82
|
const neighborFinder = config.neighborFinder ?? new NeighborFinder({
|
|
78
|
-
|
|
83
|
+
neighbors,
|
|
84
|
+
leftNodeView,
|
|
85
|
+
rightNodeView,
|
|
79
86
|
nearbyNodeView,
|
|
87
|
+
randomNodeView,
|
|
80
88
|
doFindNeighbors: (excludedIds) => handshaker.attemptHandshakesOnContacts(excludedIds),
|
|
81
|
-
minCount:
|
|
89
|
+
minCount: neighborTargetCount
|
|
82
90
|
})
|
|
83
91
|
const neighborUpdateManager = config.neighborUpdateManager ?? new NeighborUpdateManager({
|
|
84
|
-
|
|
92
|
+
neighbors,
|
|
85
93
|
nearbyNodeView,
|
|
86
94
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
87
95
|
neighborFinder,
|
|
88
96
|
streamPartId: config.streamPartId,
|
|
89
97
|
rpcCommunicator,
|
|
90
|
-
neighborUpdateInterval
|
|
98
|
+
neighborUpdateInterval,
|
|
99
|
+
neighborTargetCount,
|
|
100
|
+
ongoingHandshakes
|
|
91
101
|
})
|
|
92
102
|
const inspector = config.inspector ?? new Inspector({
|
|
93
103
|
localPeerDescriptor: config.localPeerDescriptor,
|
|
@@ -97,16 +107,18 @@ const createConfigWithDefaults = (config: RandomGraphNodeConfig): StrictRandomGr
|
|
|
97
107
|
})
|
|
98
108
|
return {
|
|
99
109
|
...config,
|
|
110
|
+
neighbors,
|
|
111
|
+
leftNodeView,
|
|
112
|
+
rightNodeView,
|
|
100
113
|
nearbyNodeView,
|
|
101
114
|
randomNodeView,
|
|
102
|
-
targetNeighbors,
|
|
103
115
|
rpcCommunicator,
|
|
104
116
|
handshaker,
|
|
105
117
|
neighborFinder,
|
|
106
118
|
neighborUpdateManager,
|
|
107
119
|
propagation,
|
|
108
|
-
|
|
109
|
-
nodeViewSize:
|
|
120
|
+
neighborTargetCount,
|
|
121
|
+
nodeViewSize: maxContactCount,
|
|
110
122
|
proxyConnectionRpcLocal,
|
|
111
123
|
inspector,
|
|
112
124
|
temporaryConnectionRpcLocal
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { ServiceID } from '@streamr/dht'
|
|
1
2
|
import { StreamPartID } from '@streamr/protocol'
|
|
2
3
|
|
|
3
|
-
export const formStreamPartDeliveryServiceId = (streamPartId: StreamPartID):
|
|
4
|
+
export const formStreamPartDeliveryServiceId = (streamPartId: StreamPartID): ServiceID => {
|
|
4
5
|
return `stream-part-delivery-${streamPartId}`
|
|
5
6
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { EventEmitter } from 'eventemitter3'
|
|
2
|
-
import { NodeID } from '../../identifiers'
|
|
3
2
|
import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
4
3
|
import { binaryToHex } from '@streamr/utils'
|
|
4
|
+
import { DhtAddress } from '@streamr/dht'
|
|
5
5
|
|
|
6
6
|
export interface Events {
|
|
7
7
|
done: () => void
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
interface InspectSessionConfig {
|
|
11
|
-
inspectedNode:
|
|
11
|
+
inspectedNode: DhtAddress
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
const createMessageKey = (messageId: MessageID): string => {
|
|
@@ -18,14 +18,14 @@ export class InspectSession extends EventEmitter<Events> {
|
|
|
18
18
|
|
|
19
19
|
// Boolean indicates if the message has been received by the inspected node
|
|
20
20
|
private readonly inspectionMessages: Map<string, boolean> = new Map()
|
|
21
|
-
private readonly inspectedNode:
|
|
21
|
+
private readonly inspectedNode: DhtAddress
|
|
22
22
|
|
|
23
23
|
constructor(config: InspectSessionConfig) {
|
|
24
24
|
super()
|
|
25
25
|
this.inspectedNode = config.inspectedNode
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
markMessage(senderId:
|
|
28
|
+
markMessage(senderId: DhtAddress, messageId: MessageID): void {
|
|
29
29
|
const messageKey = createMessageKey(messageId)
|
|
30
30
|
if (!this.inspectionMessages.has(messageKey)) {
|
|
31
31
|
this.inspectionMessages.set(messageKey, senderId === this.inspectedNode)
|
|
@@ -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
|
}
|
|
@@ -1,55 +1,65 @@
|
|
|
1
|
-
import { PeerDescriptor, ConnectionLocker } from '@streamr/dht'
|
|
1
|
+
import { PeerDescriptor, ConnectionLocker, LockID, DhtAddress, getNodeIdFromPeerDescriptor, ListeningRpcCommunicator } from '@streamr/dht'
|
|
2
2
|
import { MessageID } from '../../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
3
3
|
import { InspectSession, Events as InspectSessionEvents } from './InspectSession'
|
|
4
4
|
import { TemporaryConnectionRpcClient } from '../../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
5
|
-
import { ProtoRpcClient, RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
|
|
6
5
|
import { Logger, waitForEvent3 } from '@streamr/utils'
|
|
7
6
|
import { TemporaryConnectionRpcRemote } from '../temporary-connection/TemporaryConnectionRpcRemote'
|
|
8
|
-
import { NodeID, getNodeIdFromPeerDescriptor } from '../../identifiers'
|
|
9
7
|
import { StreamPartID } from '@streamr/protocol'
|
|
10
8
|
|
|
11
9
|
interface InspectorConfig {
|
|
12
10
|
localPeerDescriptor: PeerDescriptor
|
|
13
11
|
streamPartId: StreamPartID
|
|
14
|
-
rpcCommunicator:
|
|
12
|
+
rpcCommunicator: ListeningRpcCommunicator
|
|
15
13
|
connectionLocker: ConnectionLocker
|
|
16
14
|
inspectionTimeout?: number
|
|
17
|
-
openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export interface IInspector {
|
|
21
|
-
inspect(peerDescriptor: PeerDescriptor): Promise<boolean>
|
|
22
|
-
markMessage(sender: NodeID, messageId: MessageID): void
|
|
23
|
-
isInspected(nodeId: NodeID): boolean
|
|
24
|
-
stop(): void
|
|
15
|
+
openInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>
|
|
16
|
+
closeInspectConnection?: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>
|
|
25
17
|
}
|
|
26
18
|
|
|
27
19
|
const logger = new Logger(module)
|
|
28
20
|
const DEFAULT_TIMEOUT = 60 * 1000
|
|
29
21
|
|
|
30
|
-
export class Inspector
|
|
22
|
+
export class Inspector {
|
|
31
23
|
|
|
32
|
-
private readonly sessions: Map<
|
|
24
|
+
private readonly sessions: Map<DhtAddress, InspectSession> = new Map()
|
|
33
25
|
private readonly streamPartId: StreamPartID
|
|
34
|
-
private readonly client: ProtoRpcClient<TemporaryConnectionRpcClient>
|
|
35
26
|
private readonly localPeerDescriptor: PeerDescriptor
|
|
27
|
+
private readonly rpcCommunicator: ListeningRpcCommunicator
|
|
36
28
|
private readonly connectionLocker: ConnectionLocker
|
|
37
29
|
private readonly inspectionTimeout: number
|
|
38
|
-
private readonly openInspectConnection: (peerDescriptor: PeerDescriptor, lockId:
|
|
30
|
+
private readonly openInspectConnection: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>
|
|
31
|
+
private readonly closeInspectConnection: (peerDescriptor: PeerDescriptor, lockId: LockID) => Promise<void>
|
|
39
32
|
|
|
40
33
|
constructor(config: InspectorConfig) {
|
|
41
34
|
this.streamPartId = config.streamPartId
|
|
42
35
|
this.localPeerDescriptor = config.localPeerDescriptor
|
|
43
|
-
this.
|
|
36
|
+
this.rpcCommunicator = config.rpcCommunicator
|
|
44
37
|
this.connectionLocker = config.connectionLocker
|
|
45
38
|
this.inspectionTimeout = config.inspectionTimeout ?? DEFAULT_TIMEOUT
|
|
46
39
|
this.openInspectConnection = config.openInspectConnection ?? this.defaultOpenInspectConnection
|
|
40
|
+
this.closeInspectConnection = config.closeInspectConnection ?? this.defaultCloseInspectConnection
|
|
47
41
|
}
|
|
48
42
|
|
|
49
|
-
async defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId:
|
|
50
|
-
const rpcRemote = new TemporaryConnectionRpcRemote(
|
|
43
|
+
async defaultOpenInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void> {
|
|
44
|
+
const rpcRemote = new TemporaryConnectionRpcRemote(
|
|
45
|
+
this.localPeerDescriptor,
|
|
46
|
+
peerDescriptor,
|
|
47
|
+
this.rpcCommunicator,
|
|
48
|
+
TemporaryConnectionRpcClient
|
|
49
|
+
)
|
|
51
50
|
await rpcRemote.openConnection()
|
|
52
|
-
this.connectionLocker.
|
|
51
|
+
this.connectionLocker.weakLockConnection(getNodeIdFromPeerDescriptor(peerDescriptor), lockId)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async defaultCloseInspectConnection(peerDescriptor: PeerDescriptor, lockId: LockID): Promise<void> {
|
|
55
|
+
const rpcRemote = new TemporaryConnectionRpcRemote(
|
|
56
|
+
this.localPeerDescriptor,
|
|
57
|
+
peerDescriptor,
|
|
58
|
+
this.rpcCommunicator,
|
|
59
|
+
TemporaryConnectionRpcClient
|
|
60
|
+
)
|
|
61
|
+
await rpcRemote.closeConnection()
|
|
62
|
+
this.connectionLocker.weakUnlockConnection(getNodeIdFromPeerDescriptor(peerDescriptor), lockId)
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
async inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
|
|
@@ -67,17 +77,17 @@ export class Inspector implements IInspector {
|
|
|
67
77
|
} catch (err) {
|
|
68
78
|
logger.trace('Inspect session timed out, removing')
|
|
69
79
|
} finally {
|
|
80
|
+
await this.closeInspectConnection(peerDescriptor, lockId)
|
|
70
81
|
this.sessions.delete(nodeId)
|
|
71
|
-
this.connectionLocker.unlockConnection(peerDescriptor, lockId)
|
|
72
82
|
}
|
|
73
|
-
return success || session.getInspectedMessageCount() < 1
|
|
83
|
+
return success || session.getInspectedMessageCount() < 1 || session.onlyMarkedByInspectedNode()
|
|
74
84
|
}
|
|
75
85
|
|
|
76
|
-
markMessage(sender:
|
|
86
|
+
markMessage(sender: DhtAddress, messageId: MessageID): void {
|
|
77
87
|
this.sessions.forEach((session) => session.markMessage(sender, messageId))
|
|
78
88
|
}
|
|
79
89
|
|
|
80
|
-
isInspected(nodeId:
|
|
90
|
+
isInspected(nodeId: DhtAddress): boolean {
|
|
81
91
|
return this.sessions.has(nodeId)
|
|
82
92
|
}
|
|
83
93
|
|