@streamr/dht 0.0.1-tatum.6 → 0.0.1-tatum.8
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/connection/ConnectionLockHandler.d.ts +1 -1
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +10 -0
- package/dist/src/connection/{RemoteConnectionLocker.js → ConnectionLockRpcRemote.js} +21 -35
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -0
- package/dist/src/connection/ConnectionManager.d.ts +17 -41
- package/dist/src/connection/ConnectionManager.js +148 -212
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.js +16 -13
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +49 -0
- package/dist/src/connection/ConnectorFacade.js +83 -0
- package/dist/src/connection/ConnectorFacade.js.map +1 -0
- package/dist/src/connection/Handshaker.d.ts +1 -2
- package/dist/src/connection/Handshaker.js +1 -4
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +2 -6
- package/dist/src/connection/ManagedConnection.js +27 -36
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebRtcConnection.d.ts +1 -1
- package/dist/src/connection/ManagedWebRtcConnection.js +2 -2
- package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -1
- package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
- package/dist/src/connection/Simulator/Simulator.js +0 -5
- package/dist/src/connection/Simulator/Simulator.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -3
- package/dist/src/connection/Simulator/SimulatorConnector.js +12 -14
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +3 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
- package/dist/src/connection/WebRTC/{WebRtcConnector.d.ts → WebRtcConnectorRpcLocal.d.ts} +13 -13
- package/dist/src/connection/WebRTC/{WebRtcConnector.js → WebRtcConnectorRpcLocal.js} +46 -38
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.d.ts +11 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js +55 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/WebRTC/iceServerAsString.d.ts +1 -1
- package/dist/src/connection/WebSocket/{WebSocketConnector.d.ts → WebSocketConnectorRpcLocal.d.ts} +21 -11
- package/dist/src/connection/WebSocket/{WebSocketConnector.js → WebSocketConnectorRpcLocal.js} +80 -59
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.d.ts +8 -0
- package/dist/src/connection/WebSocket/{RemoteWebSocketConnector.js → WebSocketConnectorRpcRemote.js} +12 -16
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +18 -55
- package/dist/src/dht/DhtNode.js +122 -145
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/{RemoteExternalApi.d.ts → ExternalApiRpcRemote.d.ts} +2 -2
- package/dist/src/dht/{RemoteExternalApi.js → ExternalApiRpcRemote.js} +5 -6
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -0
- package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
- package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
- package/dist/src/dht/RemoteDhtNode.js.map +1 -0
- package/dist/src/dht/contact/ContactList.d.ts +0 -1
- package/dist/src/dht/contact/ContactList.js +0 -3
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
- package/dist/src/dht/contact/RandomContactList.js +0 -3
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
- package/dist/src/dht/contact/SortedContactList.js +0 -9
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -10
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +12 -11
- package/dist/src/dht/discovery/PeerDiscovery.js +33 -37
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/RecursiveFindSession.d.ts +9 -10
- package/dist/src/dht/find/RecursiveFindSession.js +13 -13
- package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
- package/dist/src/dht/find/RecursiveFinder.d.ts +9 -11
- package/dist/src/dht/find/RecursiveFinder.js +35 -36
- package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +1 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.js +4 -4
- package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.js +4 -3
- package/dist/src/dht/registerExternalApiRpcMethods.js.map +1 -1
- package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
- package/dist/src/dht/routing/DuplicateDetector.js +2 -7
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +12 -15
- package/dist/src/dht/routing/Router.js +30 -33
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/{RemoteRouter.d.ts → RouterRpcRemote.d.ts} +2 -2
- package/dist/src/dht/routing/{RemoteRouter.js → RouterRpcRemote.js} +5 -5
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
- package/dist/src/dht/routing/RoutingSession.js +6 -5
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/{DataStore.d.ts → StoreRpcLocal.d.ts} +6 -6
- package/dist/src/dht/store/{DataStore.js → StoreRpcLocal.js} +34 -34
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -0
- package/dist/src/dht/store/{RemoteStore.d.ts → StoreRpcRemote.d.ts} +2 -2
- package/dist/src/dht/store/{RemoteStore.js → StoreRpcRemote.js} +4 -4
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -0
- package/dist/src/exports.d.ts +2 -8
- package/dist/src/exports.js +2 -14
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +0 -1
- package/dist/src/helpers/PeerID.js +0 -6
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
- package/dist/src/helpers/kademliaId.d.ts +1 -0
- package/dist/src/helpers/kademliaId.js +14 -0
- package/dist/src/helpers/kademliaId.js.map +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/helpers/protoClasses.js +2 -2
- package/dist/src/helpers/protoClasses.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +29 -29
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +39 -39
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +49 -162
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +47 -88
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +15 -15
- package/dist/src/transport/RoutingRpcCommunicator.js +1 -0
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/package.json +10 -9
- package/protos/DhtRpc.proto +30 -60
- package/src/connection/ConnectionLockHandler.ts +1 -1
- package/src/connection/ConnectionLockRpcRemote.ts +62 -0
- package/src/connection/ConnectionManager.ts +178 -274
- package/src/connection/ConnectivityChecker.ts +15 -12
- package/src/connection/ConnectorFacade.ts +140 -0
- package/src/connection/Handshaker.ts +0 -5
- package/src/connection/ManagedConnection.ts +26 -40
- package/src/connection/ManagedWebRtcConnection.ts +0 -2
- package/src/connection/Simulator/Simulator.ts +0 -7
- package/src/connection/Simulator/SimulatorConnection.ts +16 -13
- package/src/connection/Simulator/SimulatorConnector.ts +13 -19
- package/src/connection/Simulator/SimulatorTransport.ts +6 -1
- package/src/connection/WebRTC/NodeWebRtcConnection.ts +15 -14
- package/src/connection/WebRTC/{WebRtcConnector.ts → WebRtcConnectorRpcLocal.ts} +68 -56
- package/src/connection/WebRTC/WebRtcConnectorRpcRemote.ts +71 -0
- package/src/connection/WebRTC/iceServerAsString.ts +1 -1
- package/src/connection/WebSocket/{WebSocketConnector.ts → WebSocketConnectorRpcLocal.ts} +102 -79
- package/src/connection/WebSocket/WebSocketConnectorRpcRemote.ts +45 -0
- package/src/connection/WebSocket/WebSocketServer.ts +26 -8
- package/src/dht/DhtNode.ts +176 -203
- package/src/dht/{RemoteExternalApi.ts → ExternalApiRpcRemote.ts} +3 -4
- package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
- package/src/dht/contact/ContactList.ts +0 -4
- package/src/dht/contact/RandomContactList.ts +0 -4
- package/src/dht/contact/SortedContactList.ts +0 -12
- package/src/dht/discovery/DiscoverySession.ts +20 -23
- package/src/dht/discovery/PeerDiscovery.ts +47 -45
- package/src/dht/find/RecursiveFindSession.ts +21 -22
- package/src/dht/find/RecursiveFinder.ts +45 -49
- package/src/dht/find/RemoteRecursiveFindSession.ts +6 -6
- package/src/dht/registerExternalApiRpcMethods.ts +8 -5
- package/src/dht/routing/DuplicateDetector.ts +3 -10
- package/src/dht/routing/Router.ts +39 -45
- package/src/dht/routing/{RemoteRouter.ts → RouterRpcRemote.ts} +4 -4
- package/src/dht/routing/RoutingSession.ts +15 -15
- package/src/dht/store/{DataStore.ts → StoreRpcLocal.ts} +42 -42
- package/src/dht/store/{RemoteStore.ts → StoreRpcRemote.ts} +2 -2
- package/src/exports.ts +2 -8
- package/src/helpers/PeerID.ts +0 -7
- package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
- package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
- package/src/helpers/kademliaId.ts +8 -0
- package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
- package/src/helpers/protoClasses.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +54 -54
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +15 -15
- package/src/proto/packages/dht/protos/DhtRpc.ts +77 -216
- package/src/transport/RoutingRpcCommunicator.ts +1 -0
- package/test/benchmark/KademliaCorrectness.test.ts +4 -2
- package/test/benchmark/RecursiveFind.test.ts +6 -6
- package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
- package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
- package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
- package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
- package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
- package/test/integration/ConnectionLocking.test.ts +32 -26
- package/test/integration/ConnectionManager.test.ts +90 -93
- package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
- package/test/integration/DhtRpc.test.ts +4 -6
- package/test/integration/Layer1-scale.test.ts +8 -8
- package/test/integration/MigrateData.test.ts +9 -9
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
- package/test/integration/RecursiveFind.test.ts +5 -5
- package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
- package/test/integration/RouteMessage.test.ts +7 -9
- package/test/integration/{RemoteRouter.test.ts → RouterRpcRemote.test.ts} +13 -14
- package/test/integration/RpcErrors.test.ts +25 -10
- package/test/integration/ScaleDownDht.test.ts +8 -8
- package/test/integration/SimultaneousConnections.test.ts +35 -36
- package/test/integration/Store.test.ts +8 -9
- package/test/integration/StoreAndDelete.test.ts +11 -11
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
- package/test/integration/{RemoteStore.test.ts → StoreRpcRemote.test.ts} +17 -18
- package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
- package/test/integration/WebRtcConnectorRpc.test.ts +17 -32
- package/test/integration/WebSocket.test.ts +4 -2
- package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
- package/test/integration/WebSocketConnectorRpc.test.ts +10 -15
- package/test/unit/DuplicateDetector.test.ts +3 -4
- package/test/unit/LocalDataStore.test.ts +6 -8
- package/test/unit/RandomContactList.test.ts +1 -1
- package/test/unit/RecursiveFinder.test.ts +13 -18
- package/test/unit/Router.test.ts +18 -21
- package/test/unit/WebSocketConnectorRpcLocal.test.ts +64 -0
- package/test/unit/WebSocketServer.test.ts +24 -12
- package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +1 -1
- package/test/utils/mock/RecursiveFinder.ts +2 -2
- package/test/utils/mock/Router.ts +9 -11
- package/test/utils/mock/Transport.ts +2 -2
- package/test/utils/utils.ts +55 -74
- package/dist/src/connection/RemoteConnectionLocker.d.ts +0 -13
- package/dist/src/connection/RemoteConnectionLocker.js.map +0 -1
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +0 -12
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +0 -74
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnector.js.map +0 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +0 -9
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnector.js.map +0 -1
- package/dist/src/dht/DhtPeer.js.map +0 -1
- package/dist/src/dht/RemoteExternalApi.js.map +0 -1
- package/dist/src/dht/routing/RemoteRouter.js.map +0 -1
- package/dist/src/dht/store/DataStore.js.map +0 -1
- package/dist/src/dht/store/RemoteStore.js.map +0 -1
- package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowser.js +0 -6
- package/dist/src/helpers/browser/isBrowser.js.map +0 -1
- package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
- package/dist/src/helpers/browser/isNodeJS.js +0 -6
- package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
- package/src/connection/RemoteConnectionLocker.ts +0 -84
- package/src/connection/WebRTC/RemoteWebrtcConnector.ts +0 -93
- package/src/connection/WebSocket/RemoteWebSocketConnector.ts +0 -49
- package/src/helpers/browser/isBrowser.ts +0 -1
- package/src/helpers/browser/isNodeJS.ts +0 -1
- package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
- package/test/integration/DhtWithMockConnections.test.ts +0 -46
- package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DhtPeer } from '../DhtPeer'
|
|
1
|
+
import { RemoteDhtNode } from '../RemoteDhtNode'
|
|
3
2
|
import { SortedContactList } from '../contact/SortedContactList'
|
|
4
3
|
import { PeerID, PeerIDKey } from '../../helpers/PeerID'
|
|
4
|
+
import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
5
5
|
import { Logger } from '@streamr/utils'
|
|
6
6
|
import EventEmitter from 'eventemitter3'
|
|
7
7
|
import { v4 } from 'uuid'
|
|
8
|
-
import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
9
|
-
import {
|
|
8
|
+
import { PeerDescriptor, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
9
|
+
import { RouterRpcRemote } from './RouterRpcRemote'
|
|
10
10
|
import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
11
|
-
import {
|
|
11
|
+
import { RouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
12
12
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
13
13
|
import { Contact } from '../contact/Contact'
|
|
14
14
|
|
|
@@ -18,19 +18,19 @@ const MAX_FAILED_HOPS = 2
|
|
|
18
18
|
|
|
19
19
|
class RemoteContact extends Contact {
|
|
20
20
|
|
|
21
|
-
private router:
|
|
21
|
+
private router: RouterRpcRemote
|
|
22
22
|
|
|
23
|
-
constructor(peer:
|
|
23
|
+
constructor(peer: RemoteDhtNode, ownPeerDescriptor: PeerDescriptor, rpcCommunicator: RoutingRpcCommunicator) {
|
|
24
24
|
super(peer.getPeerDescriptor())
|
|
25
|
-
this.router = new
|
|
25
|
+
this.router = new RouterRpcRemote(
|
|
26
26
|
ownPeerDescriptor,
|
|
27
27
|
peer.getPeerDescriptor(),
|
|
28
28
|
peer.getServiceId(),
|
|
29
|
-
toProtoRpcClient(new
|
|
29
|
+
toProtoRpcClient(new RouterRpcClient(rpcCommunicator.getRpcClientTransport()))
|
|
30
30
|
)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
getRouter():
|
|
33
|
+
getRouter(): RouterRpcRemote {
|
|
34
34
|
return this.router
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -58,7 +58,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
58
58
|
private contactList: SortedContactList<RemoteContact>
|
|
59
59
|
private readonly ownPeerDescriptor: PeerDescriptor
|
|
60
60
|
private readonly messageToRoute: RouteMessageWrapper
|
|
61
|
-
private connections: Map<PeerIDKey,
|
|
61
|
+
private connections: Map<PeerIDKey, RemoteDhtNode>
|
|
62
62
|
private readonly parallelism: number
|
|
63
63
|
private failedHopCounter = 0
|
|
64
64
|
private successfulHopCounter = 0
|
|
@@ -69,7 +69,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
69
69
|
rpcCommunicator: RoutingRpcCommunicator,
|
|
70
70
|
ownPeerDescriptor: PeerDescriptor,
|
|
71
71
|
messageToRoute: RouteMessageWrapper,
|
|
72
|
-
connections: Map<PeerIDKey,
|
|
72
|
+
connections: Map<PeerIDKey, RemoteDhtNode>,
|
|
73
73
|
parallelism: number,
|
|
74
74
|
mode: RoutingMode = RoutingMode.ROUTE,
|
|
75
75
|
destinationId?: Uint8Array,
|
|
@@ -122,7 +122,7 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
private onRequestSucceeded = (
|
|
125
|
+
private onRequestSucceeded = () => {
|
|
126
126
|
logger.trace('onRequestSucceeded() sessionId: ' + this.sessionId)
|
|
127
127
|
if (this.stopped) {
|
|
128
128
|
return
|
|
@@ -187,14 +187,14 @@ export class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
187
187
|
while ((this.ongoingRequests.size) < this.parallelism && (uncontacted.length > 0) && !this.stopped) {
|
|
188
188
|
const nextPeer = uncontacted.shift()
|
|
189
189
|
// eslint-disable-next-line max-len
|
|
190
|
-
logger.trace(`Sending routeMessage request
|
|
190
|
+
logger.trace(`Sending routeMessage request to contact: ${keyFromPeerDescriptor(nextPeer!.getPeerDescriptor())} (sessionId=${this.sessionId})`)
|
|
191
191
|
this.contactList.setContacted(nextPeer!.getPeerId())
|
|
192
192
|
this.ongoingRequests.add(nextPeer!.getPeerId().toKey())
|
|
193
193
|
setImmediate(async () => {
|
|
194
194
|
try {
|
|
195
195
|
const succeeded = await this.sendRouteMessageRequest(nextPeer!)
|
|
196
196
|
if (succeeded) {
|
|
197
|
-
this.onRequestSucceeded(
|
|
197
|
+
this.onRequestSucceeded()
|
|
198
198
|
} else {
|
|
199
199
|
this.onRequestFailed(nextPeer!.getPeerId())
|
|
200
200
|
}
|
|
@@ -7,20 +7,20 @@ import { Any } from '../../proto/google/protobuf/any'
|
|
|
7
7
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
8
8
|
import { DhtCallContext } from '../../rpc-protocol/DhtCallContext'
|
|
9
9
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
10
|
-
import {
|
|
10
|
+
import { StoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
11
11
|
import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
12
12
|
import { IRecursiveFinder } from '../find/RecursiveFinder'
|
|
13
|
-
import {
|
|
13
|
+
import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
14
14
|
import { Logger } from '@streamr/utils'
|
|
15
15
|
import { LocalDataStore } from './LocalDataStore'
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { IStoreRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
|
|
17
|
+
import { StoreRpcRemote } from './StoreRpcRemote'
|
|
18
18
|
import { Timestamp } from '../../proto/google/protobuf/timestamp'
|
|
19
19
|
import EventEmitter from 'eventemitter3'
|
|
20
20
|
import { Events } from '../DhtNode'
|
|
21
21
|
import { SortedContactList } from '../contact/SortedContactList'
|
|
22
22
|
import { Contact } from '../contact/Contact'
|
|
23
|
-
import {
|
|
23
|
+
import { RemoteDhtNode } from '../RemoteDhtNode'
|
|
24
24
|
|
|
25
25
|
interface DataStoreConfig {
|
|
26
26
|
rpcCommunicator: RoutingRpcCommunicator
|
|
@@ -30,14 +30,14 @@ interface DataStoreConfig {
|
|
|
30
30
|
serviceId: string
|
|
31
31
|
maxTtl: number
|
|
32
32
|
highestTtl: number
|
|
33
|
-
|
|
33
|
+
redundancyFactor: number
|
|
34
34
|
dhtNodeEmitter: EventEmitter<Events>
|
|
35
|
-
getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) =>
|
|
35
|
+
getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
const logger = new Logger(module)
|
|
39
39
|
|
|
40
|
-
export class
|
|
40
|
+
export class StoreRpcLocal implements IStoreRpc {
|
|
41
41
|
|
|
42
42
|
private readonly rpcCommunicator: RoutingRpcCommunicator
|
|
43
43
|
private readonly recursiveFinder: IRecursiveFinder
|
|
@@ -46,9 +46,9 @@ export class DataStore implements IStoreService {
|
|
|
46
46
|
private readonly serviceId: string
|
|
47
47
|
private readonly maxTtl: number
|
|
48
48
|
private readonly highestTtl: number
|
|
49
|
-
private readonly
|
|
49
|
+
private readonly redundancyFactor: number
|
|
50
50
|
private readonly dhtNodeEmitter: EventEmitter<Events>
|
|
51
|
-
private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) =>
|
|
51
|
+
private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
|
|
52
52
|
|
|
53
53
|
constructor(config: DataStoreConfig) {
|
|
54
54
|
this.rpcCommunicator = config.rpcCommunicator
|
|
@@ -58,7 +58,7 @@ export class DataStore implements IStoreService {
|
|
|
58
58
|
this.serviceId = config.serviceId
|
|
59
59
|
this.maxTtl = config.maxTtl
|
|
60
60
|
this.highestTtl = config.highestTtl
|
|
61
|
-
this.
|
|
61
|
+
this.redundancyFactor = config.redundancyFactor
|
|
62
62
|
this.dhtNodeEmitter = config.dhtNodeEmitter
|
|
63
63
|
this.getNodesClosestToIdFromBucket = config.getNodesClosestToIdFromBucket
|
|
64
64
|
this.rpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData',
|
|
@@ -68,7 +68,7 @@ export class DataStore implements IStoreService {
|
|
|
68
68
|
this.rpcCommunicator.registerRpcMethod(DeleteDataRequest, DeleteDataResponse, 'deleteData',
|
|
69
69
|
(request: DeleteDataRequest, context: ServerCallContext) => this.deleteData(request, context))
|
|
70
70
|
|
|
71
|
-
this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor
|
|
71
|
+
this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor) => {
|
|
72
72
|
this.localDataStore.getStore().forEach((dataMap, _dataKey) => {
|
|
73
73
|
dataMap.forEach((dataEntry) => {
|
|
74
74
|
if (this.shouldMigrateDataToNewNode(dataEntry.dataEntry, peerDescriptor)) {
|
|
@@ -114,10 +114,10 @@ export class DataStore implements IStoreService {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
// if new node is within the
|
|
117
|
+
// if new node is within the storageRedundancyFactor closest nodes to the data
|
|
118
118
|
// do migrate data to it
|
|
119
119
|
|
|
120
|
-
if (index < this.
|
|
120
|
+
if (index < this.redundancyFactor) {
|
|
121
121
|
this.localDataStore.setStale(dataId, dataEntry.storer!, false)
|
|
122
122
|
return true
|
|
123
123
|
} else {
|
|
@@ -127,19 +127,19 @@ export class DataStore implements IStoreService {
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
private async migrateDataToContact(dataEntry: DataEntry, contact: PeerDescriptor, doNotConnect: boolean = false): Promise<void> {
|
|
130
|
-
const
|
|
130
|
+
const rpcRemote = new StoreRpcRemote(
|
|
131
131
|
this.ownPeerDescriptor,
|
|
132
132
|
contact,
|
|
133
133
|
this.serviceId,
|
|
134
|
-
toProtoRpcClient(new
|
|
134
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
135
135
|
)
|
|
136
136
|
try {
|
|
137
|
-
const response = await
|
|
137
|
+
const response = await rpcRemote.migrateData({ dataEntry }, doNotConnect)
|
|
138
138
|
if (response.error) {
|
|
139
|
-
logger.trace('
|
|
139
|
+
logger.trace('migrateData() returned error: ' + response.error)
|
|
140
140
|
}
|
|
141
141
|
} catch (e) {
|
|
142
|
-
logger.trace('
|
|
142
|
+
logger.trace('migrateData() threw an exception ' + e)
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -150,8 +150,8 @@ export class DataStore implements IStoreService {
|
|
|
150
150
|
const successfulNodes: PeerDescriptor[] = []
|
|
151
151
|
const ttl = this.highestTtl // ToDo: make TTL decrease according to some nice curve
|
|
152
152
|
const storerTime = Timestamp.now()
|
|
153
|
-
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.
|
|
154
|
-
if (
|
|
153
|
+
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
|
|
154
|
+
if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
|
|
155
155
|
this.localDataStore.storeEntry({
|
|
156
156
|
kademliaId: key,
|
|
157
157
|
storer: this.ownPeerDescriptor,
|
|
@@ -165,22 +165,22 @@ export class DataStore implements IStoreService {
|
|
|
165
165
|
successfulNodes.push(closestNodes[i])
|
|
166
166
|
continue
|
|
167
167
|
}
|
|
168
|
-
const
|
|
168
|
+
const rpcRemote = new StoreRpcRemote(
|
|
169
169
|
this.ownPeerDescriptor,
|
|
170
170
|
closestNodes[i],
|
|
171
171
|
this.serviceId,
|
|
172
|
-
toProtoRpcClient(new
|
|
172
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
173
173
|
)
|
|
174
174
|
try {
|
|
175
|
-
const response = await
|
|
175
|
+
const response = await rpcRemote.storeData({ kademliaId: key, data, ttl, storerTime })
|
|
176
176
|
if (!response.error) {
|
|
177
177
|
successfulNodes.push(closestNodes[i])
|
|
178
|
-
logger.trace('
|
|
178
|
+
logger.trace('remote.storeData() returned success')
|
|
179
179
|
} else {
|
|
180
|
-
logger.trace('
|
|
180
|
+
logger.trace('remote.storeData() returned error: ' + response.error)
|
|
181
181
|
}
|
|
182
182
|
} catch (e) {
|
|
183
|
-
logger.trace('
|
|
183
|
+
logger.trace('remote.storeData() threw an exception ' + e)
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
return successfulNodes
|
|
@@ -188,8 +188,8 @@ export class DataStore implements IStoreService {
|
|
|
188
188
|
|
|
189
189
|
private selfIsOneOfClosestPeers(dataId: Uint8Array): boolean {
|
|
190
190
|
const ownPeerId = PeerID.fromValue(this.ownPeerDescriptor.kademliaId)
|
|
191
|
-
const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.
|
|
192
|
-
const sortedList = new SortedContactList<Contact>(ownPeerId, this.
|
|
191
|
+
const closestPeers = this.getNodesClosestToIdFromBucket(dataId, this.redundancyFactor)
|
|
192
|
+
const sortedList = new SortedContactList<Contact>(ownPeerId, this.redundancyFactor, undefined, true)
|
|
193
193
|
sortedList.addContact(new Contact(this.ownPeerDescriptor))
|
|
194
194
|
closestPeers.forEach((con) => sortedList.addContact(new Contact(con.getPeerDescriptor())))
|
|
195
195
|
return sortedList.getClosestContacts().some((node) => node.getPeerId().equals(ownPeerId))
|
|
@@ -200,28 +200,28 @@ export class DataStore implements IStoreService {
|
|
|
200
200
|
const result = await this.recursiveFinder.startRecursiveFind(key)
|
|
201
201
|
const closestNodes = result.closestNodes
|
|
202
202
|
const successfulNodes: PeerDescriptor[] = []
|
|
203
|
-
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.
|
|
204
|
-
if (
|
|
203
|
+
for (let i = 0; i < closestNodes.length && successfulNodes.length < this.redundancyFactor; i++) {
|
|
204
|
+
if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
|
|
205
205
|
this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.ownPeerDescriptor))
|
|
206
206
|
successfulNodes.push(closestNodes[i])
|
|
207
207
|
continue
|
|
208
208
|
}
|
|
209
|
-
const
|
|
209
|
+
const rpcRemote = new StoreRpcRemote(
|
|
210
210
|
this.ownPeerDescriptor,
|
|
211
211
|
closestNodes[i],
|
|
212
212
|
this.serviceId,
|
|
213
|
-
toProtoRpcClient(new
|
|
213
|
+
toProtoRpcClient(new StoreRpcClient(this.rpcCommunicator.getRpcClientTransport()))
|
|
214
214
|
)
|
|
215
215
|
try {
|
|
216
|
-
const response = await
|
|
216
|
+
const response = await rpcRemote.deleteData({ kademliaId: key })
|
|
217
217
|
if (response.deleted) {
|
|
218
|
-
logger.trace('
|
|
218
|
+
logger.trace('remote.deleteData() returned success')
|
|
219
219
|
} else {
|
|
220
|
-
logger.trace('could not delete data from ' +
|
|
220
|
+
logger.trace('could not delete data from ' + keyFromPeerDescriptor(closestNodes[i]))
|
|
221
221
|
}
|
|
222
222
|
successfulNodes.push(closestNodes[i])
|
|
223
223
|
} catch (e) {
|
|
224
|
-
logger.trace('
|
|
224
|
+
logger.trace('remote.deleteData() threw an exception ' + e)
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
}
|
|
@@ -246,7 +246,7 @@ export class DataStore implements IStoreService {
|
|
|
246
246
|
this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(kademliaId))
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
logger.trace(
|
|
249
|
+
logger.trace('storeData()')
|
|
250
250
|
return StoreDataResponse.create()
|
|
251
251
|
}
|
|
252
252
|
|
|
@@ -260,7 +260,7 @@ export class DataStore implements IStoreService {
|
|
|
260
260
|
|
|
261
261
|
// RPC service implementation
|
|
262
262
|
public async migrateData(request: MigrateDataRequest, context: ServerCallContext): Promise<MigrateDataResponse> {
|
|
263
|
-
logger.trace(
|
|
263
|
+
logger.trace('server-side migrateData()')
|
|
264
264
|
const dataEntry = request.dataEntry!
|
|
265
265
|
|
|
266
266
|
const wasStored = this.localDataStore.storeEntry(dataEntry)
|
|
@@ -271,7 +271,7 @@ export class DataStore implements IStoreService {
|
|
|
271
271
|
if (!this.selfIsOneOfClosestPeers(dataEntry.kademliaId)) {
|
|
272
272
|
this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(dataEntry.kademliaId))
|
|
273
273
|
}
|
|
274
|
-
logger.trace(
|
|
274
|
+
logger.trace('server-side migrateData() at end')
|
|
275
275
|
return MigrateDataResponse.create()
|
|
276
276
|
}
|
|
277
277
|
|
|
@@ -283,7 +283,7 @@ export class DataStore implements IStoreService {
|
|
|
283
283
|
const incomingPeerId = PeerID.fromValue(incomingPeer.kademliaId)
|
|
284
284
|
const closestToData = this.getNodesClosestToIdFromBucket(dataEntry.kademliaId, 10)
|
|
285
285
|
|
|
286
|
-
const sortedList = new SortedContactList<Contact>(dataId, this.
|
|
286
|
+
const sortedList = new SortedContactList<Contact>(dataId, this.redundancyFactor, undefined, true)
|
|
287
287
|
sortedList.addContact(new Contact(this.ownPeerDescriptor))
|
|
288
288
|
|
|
289
289
|
closestToData.forEach((con) => {
|
|
@@ -307,7 +307,7 @@ export class DataStore implements IStoreService {
|
|
|
307
307
|
})
|
|
308
308
|
}
|
|
309
309
|
} else {
|
|
310
|
-
// if we are the closest to the data, migrate to all
|
|
310
|
+
// if we are the closest to the data, migrate to all storageRedundancyFactor nearest
|
|
311
311
|
sortedList.getAllContacts().forEach((contact) => {
|
|
312
312
|
const contactPeerId = PeerID.fromValue(contact.getPeerDescriptor().kademliaId)
|
|
313
313
|
if (!incomingPeerId.equals(contactPeerId) && !ownPeerId.equals(contactPeerId)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Remote } from '../contact/Remote'
|
|
2
|
-
import {
|
|
2
|
+
import { IStoreRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
3
3
|
import {
|
|
4
4
|
DeleteDataRequest,
|
|
5
5
|
DeleteDataResponse,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from '../../proto/packages/dht/protos/DhtRpc'
|
|
11
11
|
import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
12
12
|
|
|
13
|
-
export class
|
|
13
|
+
export class StoreRpcRemote extends Remote<IStoreRpcClient> {
|
|
14
14
|
|
|
15
15
|
async storeData(request: StoreDataRequest): Promise<StoreDataResponse> {
|
|
16
16
|
const options = this.formDhtRpcOptions({
|
package/src/exports.ts
CHANGED
|
@@ -6,14 +6,8 @@ export { getRandomRegion, getRegionDelayMatrix } from './connection/Simulator/pi
|
|
|
6
6
|
export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/dht/protos/DhtRpc'
|
|
7
7
|
export { ITransport } from './transport/ITransport'
|
|
8
8
|
export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager'
|
|
9
|
-
export { PeerID, PeerIDKey } from './helpers/PeerID'
|
|
10
|
-
export { UUID } from './helpers/UUID'
|
|
11
9
|
export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions'
|
|
12
|
-
export { protoClasses } from './helpers/protoClasses'
|
|
13
|
-
export { SortedContactList } from './dht/contact/SortedContactList'
|
|
14
|
-
export { Contact } from './dht/contact/Contact'
|
|
15
10
|
export { Remote } from './dht/contact/Remote'
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export { IceServer } from './connection/WebRTC/WebRtcConnector'
|
|
11
|
+
export { areEqualPeerDescriptors } from './helpers/peerIdFromPeerDescriptor'
|
|
12
|
+
export { IceServer } from './connection/WebRTC/WebRtcConnectorRpcLocal'
|
|
19
13
|
export { DhtCallContext } from './rpc-protocol/DhtCallContext'
|
package/src/helpers/PeerID.ts
CHANGED
|
@@ -49,13 +49,6 @@ export class PeerID {
|
|
|
49
49
|
return new PeerID({ stringValue })
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
static generateRandom(): PeerID {
|
|
53
|
-
// generate 160 bit random Uint8array
|
|
54
|
-
const value = new Uint8Array(20)
|
|
55
|
-
crypto.randomFillSync(value)
|
|
56
|
-
return new PeerID({ value })
|
|
57
|
-
}
|
|
58
|
-
|
|
59
52
|
// TODO convert to static method?
|
|
60
53
|
// eslint-disable-next-line class-methods-use-this
|
|
61
54
|
private ip2Int(ip: string): number {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isBrowserEnvironment = (): boolean => false
|
|
@@ -9,6 +9,6 @@ export const keyFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerIDKey
|
|
|
9
9
|
return PeerID.fromValue(peerDescriptor.kademliaId).toKey()
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export const
|
|
12
|
+
export const areEqualPeerDescriptors = (peerDescriptor1: PeerDescriptor, peerDescriptor2: PeerDescriptor): boolean => {
|
|
13
13
|
return peerIdFromPeerDescriptor(peerDescriptor1).equals(peerIdFromPeerDescriptor(peerDescriptor2))
|
|
14
14
|
}
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
PeerDescriptor,
|
|
14
14
|
PingRequest,
|
|
15
15
|
PingResponse,
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
FindResponse,
|
|
17
|
+
FindRequest,
|
|
18
18
|
RouteMessageAck,
|
|
19
19
|
RouteMessageWrapper,
|
|
20
20
|
WebSocketConnectionRequest,
|
|
@@ -32,8 +32,8 @@ import {
|
|
|
32
32
|
export const protoClasses: Array<IMessageType<any>> = [
|
|
33
33
|
ClosestPeersRequest,
|
|
34
34
|
ClosestPeersResponse,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
FindRequest,
|
|
36
|
+
FindResponse,
|
|
37
37
|
PingRequest,
|
|
38
38
|
PingResponse,
|
|
39
39
|
LeaveNotice,
|