Skip to content

Commit 67289cd

Browse files
authored
Merge pull request #513 from MatrixAI/feature-agnostic_timeout
RPC timeout implementation
2 parents 4e2ab40 + ea283dd commit 67289cd

159 files changed

Lines changed: 2961 additions & 1028 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package-lock.json

Lines changed: 23 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@
8080
},
8181
"dependencies": {
8282
"@grpc/grpc-js": "1.6.7",
83-
"@matrixai/async-cancellable": "^1.0.2",
83+
"@matrixai/async-cancellable": "^1.0.4",
8484
"@matrixai/async-init": "^1.8.2",
8585
"@matrixai/async-locks": "^3.2.0",
8686
"@matrixai/db": "^5.1.0",
8787
"@matrixai/errors": "^1.1.7",
8888
"@matrixai/id": "^3.3.3",
8989
"@matrixai/logger": "^3.1.0",
9090
"@matrixai/resources": "^1.1.4",
91-
"@matrixai/timer": "^1.0.0",
91+
"@matrixai/timer": "^1.1.0",
9292
"@matrixai/workers": "^1.3.6",
9393
"@peculiar/asn1-pkcs8": "^2.3.0",
9494
"@peculiar/asn1-schema": "^2.3.0",
@@ -128,7 +128,7 @@
128128
"devDependencies": {
129129
"@babel/preset-env": "^7.13.10",
130130
"@fast-check/jest": "^1.1.0",
131-
"@streamparser/json": "^0.0.12",
131+
"@streamparser/json": "^0.0.13",
132132
"@swc/core": "^1.2.215",
133133
"@types/cross-spawn": "^6.0.2",
134134
"@types/google-protobuf": "^3.7.4",

src/PolykeyAgent.ts

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import { DB } from '@matrixai/db';
1212
import { CreateDestroyStartStop } from '@matrixai/async-init/dist/CreateDestroyStartStop';
1313
import RPCServer from './rpc/RPCServer';
1414
import WebSocketServer from './websockets/WebSocketServer';
15-
import * as middlewareUtils from './rpc/utils/middleware';
16-
import * as authMiddleware from './client/utils/authenticationMiddleware';
15+
import * as rpcUtilsMiddleware from './rpc/utils/middleware';
16+
import * as clientUtilsMiddleware from './client/utils/middleware';
1717
import { WorkerManager } from './workers';
1818
import * as networkUtils from './network/utils';
1919
import KeyRing from './keys/KeyRing';
@@ -56,10 +56,13 @@ type NetworkConfig = {
5656
// RPCServer for client service
5757
clientHost?: Host;
5858
clientPort?: Port;
59-
maxReadBufferBytes?: number;
60-
idleTimeout?: number;
61-
pingInterval?: number;
62-
pingTimeout?: number;
59+
maxReadableStreamBytes?: number;
60+
connectionIdleTimeoutTime?: number;
61+
pingIntervalTime?: number;
62+
pingTimeoutTime?: number;
63+
handlerTimeoutTime?: number;
64+
handlerTimeoutGraceTime?: number;
65+
clientParserBufferByteLimit?: number;
6366
};
6467

6568
interface PolykeyAgent extends CreateDestroyStartStop {}
@@ -193,7 +196,7 @@ class PolykeyAgent {
193196
...config.defaults.nodeConnectionManagerConfig,
194197
...utils.filterEmptyObject(nodeConnectionManagerConfig),
195198
};
196-
const _networkConfig = {
199+
const networkConfig_ = {
197200
...config.defaults.networkConfig,
198201
...utils.filterEmptyObject(networkConfig),
199202
};
@@ -437,13 +440,13 @@ class PolykeyAgent {
437440
sessionManager: sessionManager,
438441
vaultManager: vaultManager,
439442
}),
440-
middlewareFactory: middlewareUtils.defaultServerMiddlewareWrapper(
441-
authMiddleware.authenticationMiddlewareServer(
442-
sessionManager,
443-
keyRing,
444-
),
443+
middlewareFactory: rpcUtilsMiddleware.defaultServerMiddlewareWrapper(
444+
clientUtilsMiddleware.middlewareServer(sessionManager, keyRing),
445+
networkConfig_.clientParserBufferByteLimit,
445446
),
446447
sensitive: false,
448+
handlerTimeoutTime: networkConfig_.handlerTimeoutTime,
449+
handlerTimeoutGraceTime: networkConfig_.handlerTimeoutGraceTime,
447450
logger: logger.getChild('RPCServerClient'),
448451
});
449452
}
@@ -454,16 +457,16 @@ class PolykeyAgent {
454457
webSocketServerClient =
455458
webSocketServerClient ??
456459
(await WebSocketServer.createWebSocketServer({
457-
connectionCallback: (streamPair) =>
458-
rpcServerClient!.handleStream(streamPair, {}),
460+
connectionCallback: (rpcStream) =>
461+
rpcServerClient!.handleStream(rpcStream),
459462
fs,
460-
host: _networkConfig.clientHost,
461-
port: _networkConfig.clientPort,
463+
host: networkConfig_.clientHost,
464+
port: networkConfig_.clientPort,
462465
tlsConfig,
463-
maxReadBufferBytes: _networkConfig.maxReadBufferBytes,
464-
idleTimeout: _networkConfig.idleTimeout,
465-
pingInterval: _networkConfig.pingInterval,
466-
pingTimeout: _networkConfig.pingTimeout,
466+
maxReadableStreamBytes: networkConfig_.maxReadableStreamBytes,
467+
connectionIdleTimeoutTime: networkConfig_.connectionIdleTimeoutTime,
468+
pingIntervalTime: networkConfig_.pingIntervalTime,
469+
pingTimeoutTime: networkConfig_.pingTimeoutTime,
467470
logger: logger.getChild('WebSocketServer'),
468471
}));
469472
grpcServerAgent =
@@ -778,7 +781,7 @@ class PolykeyAgent {
778781
host: _networkConfig.clientHost,
779782
port: _networkConfig.clientPort,
780783
connectionCallback: (streamPair) =>
781-
this.rpcServerClient.handleStream(streamPair, {}),
784+
this.rpcServerClient.handleStream(streamPair),
782785
});
783786
// Agent server
784787
await this.grpcServerAgent.start({

src/PolykeyClient.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import path from 'path';
44
import Logger from '@matrixai/logger';
55
import { CreateDestroyStartStop } from '@matrixai/async-init/dist/CreateDestroyStartStop';
66
import RPCClient from './rpc/RPCClient';
7-
import * as middlewareUtils from './rpc/utils/middleware';
8-
import * as authMiddleware from './client/utils/authenticationMiddleware';
7+
import * as rpcUtilsMiddleware from './rpc/utils/middleware';
8+
import * as clientUtilsMiddleware from './client/utils/middleware';
99
import { Session } from './sessions';
1010
import * as errors from './errors';
1111
import * as utils from './utils';
@@ -29,6 +29,8 @@ class PolykeyClient<M extends ClientManifest> {
2929
session,
3030
manifest,
3131
streamFactory,
32+
streamKeepAliveTimeoutTime,
33+
parserBufferByteLimit,
3234
fs = require('fs'),
3335
logger = new Logger(this.name),
3436
fresh = false,
@@ -37,6 +39,8 @@ class PolykeyClient<M extends ClientManifest> {
3739
session?: Session;
3840
manifest: RPCClient<M> | M;
3941
streamFactory: StreamFactory;
42+
streamKeepAliveTimeoutTime?: number;
43+
parserBufferByteLimit?: number;
4044
fs?: FileSystem;
4145
logger?: Logger;
4246
fresh?: boolean;
@@ -60,9 +64,12 @@ class PolykeyClient<M extends ClientManifest> {
6064
: await RPCClient.createRPCClient<M>({
6165
manifest,
6266
streamFactory,
63-
middlewareFactory: middlewareUtils.defaultClientMiddlewareWrapper(
64-
authMiddleware.authenticationMiddlewareClient(session),
65-
),
67+
middlewareFactory:
68+
rpcUtilsMiddleware.defaultClientMiddlewareWrapper(
69+
clientUtilsMiddleware.middlewareClient(session),
70+
parserBufferByteLimit,
71+
),
72+
streamKeepAliveTimeoutTime,
6673
logger: logger.getChild(RPCClient.name),
6774
});
6875
const pkClient = new this({

src/bin/agent/CommandLockAll.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class CommandLockAll extends CommandPolykey {
5858
logger: this.logger.getChild(WebSocketClient.name),
5959
});
6060
pkClient = await PolykeyClient.createPolykeyClient({
61-
streamFactory: () => webSocketClient.startConnection(),
61+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
6262
nodePath: options.nodePath,
6363
manifest: clientManifest,
6464
logger: this.logger.getChild(PolykeyClient.name),

src/bin/agent/CommandStatus.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class CommandStatus extends CommandPolykey {
6363
logger: this.logger.getChild(WebSocketClient.name),
6464
});
6565
pkClient = await PolykeyClient.createPolykeyClient({
66-
streamFactory: () => webSocketClient.startConnection(),
66+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
6767
nodePath: options.nodePath,
6868
manifest: clientManifest,
6969
logger: this.logger.getChild(PolykeyClient.name),

src/bin/agent/CommandStop.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class CommandStop extends CommandPolykey {
6060
logger: this.logger.getChild(WebSocketClient.name),
6161
});
6262
pkClient = await PolykeyClient.createPolykeyClient({
63-
streamFactory: () => webSocketClient.startConnection(),
63+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
6464
nodePath: options.nodePath,
6565
manifest: clientManifest,
6666
logger: this.logger.getChild(PolykeyClient.name),

src/bin/agent/CommandUnlock.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class CommandUnlock extends CommandPolykey {
4747
logger: this.logger.getChild(WebSocketClient.name),
4848
});
4949
pkClient = await PolykeyClient.createPolykeyClient({
50-
streamFactory: () => webSocketClient.startConnection(),
50+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
5151
nodePath: options.nodePath,
5252
manifest: clientManifest,
5353
logger: this.logger.getChild(PolykeyClient.name),

src/bin/identities/CommandAllow.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class CommandAllow extends CommandPolykey {
6161
logger: this.logger.getChild(WebSocketClient.name),
6262
});
6363
pkClient = await PolykeyClient.createPolykeyClient({
64-
streamFactory: () => webSocketClient.startConnection(),
64+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
6565
nodePath: options.nodePath,
6666
manifest: clientManifest,
6767
logger: this.logger.getChild(PolykeyClient.name),

src/bin/identities/CommandAuthenticate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class CommandAuthenticate extends CommandPolykey {
5858
logger: this.logger.getChild(WebSocketClient.name),
5959
});
6060
pkClient = await PolykeyClient.createPolykeyClient({
61-
streamFactory: () => webSocketClient.startConnection(),
61+
streamFactory: (ctx) => webSocketClient.startConnection(ctx),
6262
nodePath: options.nodePath,
6363
manifest: clientManifest,
6464
logger: this.logger.getChild(PolykeyClient.name),

0 commit comments

Comments
 (0)