@tidblink/server 0.0.0-stage → 0.4.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +1182 -2
- package/dist/audio.d.ts +72 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +168 -0
- package/dist/audio.js.map +1 -0
- package/dist/backend-connection.d.ts +89 -0
- package/dist/backend-connection.d.ts.map +1 -0
- package/dist/backend-connection.js +300 -0
- package/dist/backend-connection.js.map +1 -0
- package/dist/backend-pool.d.ts +93 -0
- package/dist/backend-pool.d.ts.map +1 -0
- package/dist/backend-pool.js +419 -0
- package/dist/backend-pool.js.map +1 -0
- package/dist/client-tool-executor.d.ts +31 -0
- package/dist/client-tool-executor.d.ts.map +1 -0
- package/dist/client-tool-executor.js +190 -0
- package/dist/client-tool-executor.js.map +1 -0
- package/dist/client-tools.d.ts +21 -0
- package/dist/client-tools.d.ts.map +1 -0
- package/dist/client-tools.js +48 -0
- package/dist/client-tools.js.map +1 -0
- package/dist/connector-callback.d.ts +92 -0
- package/dist/connector-callback.d.ts.map +1 -0
- package/dist/connector-callback.js +155 -0
- package/dist/connector-callback.js.map +1 -0
- package/dist/connectors.d.ts +66 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +71 -0
- package/dist/connectors.js.map +1 -0
- package/dist/control.d.ts +17 -0
- package/dist/control.d.ts.map +1 -0
- package/dist/control.js +52 -0
- package/dist/control.js.map +1 -0
- package/dist/errors.d.ts +103 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +115 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +158 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +110 -0
- package/dist/events.js.map +1 -0
- package/dist/files.d.ts +129 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +388 -0
- package/dist/files.js.map +1 -0
- package/dist/history.d.ts +279 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +91 -0
- package/dist/history.js.map +1 -0
- package/dist/http.d.ts +88 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +302 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/organization.d.ts +87 -0
- package/dist/organization.d.ts.map +1 -0
- package/dist/organization.js +112 -0
- package/dist/organization.js.map +1 -0
- package/dist/realtime.d.ts +90 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +111 -0
- package/dist/realtime.js.map +1 -0
- package/dist/session-connection.d.ts +144 -0
- package/dist/session-connection.d.ts.map +1 -0
- package/dist/session-connection.js +334 -0
- package/dist/session-connection.js.map +1 -0
- package/dist/session-send.d.ts +49 -0
- package/dist/session-send.d.ts.map +1 -0
- package/dist/session-send.js +179 -0
- package/dist/session-send.js.map +1 -0
- package/dist/session.d.ts +165 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +253 -0
- package/dist/session.js.map +1 -0
- package/dist/skills.d.ts +103 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +98 -0
- package/dist/skills.js.map +1 -0
- package/dist/sse.d.ts +10 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +50 -0
- package/dist/sse.js.map +1 -0
- package/dist/template-switch.d.ts +51 -0
- package/dist/template-switch.d.ts.map +1 -0
- package/dist/template-switch.js +81 -0
- package/dist/template-switch.js.map +1 -0
- package/dist/templates.d.ts +129 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +92 -0
- package/dist/templates.js.map +1 -0
- package/dist/turn.d.ts +47 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +210 -0
- package/dist/turn.js.map +1 -0
- package/dist/usage.d.ts +278 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +22 -0
- package/dist/usage.js.map +1 -0
- package/dist/user.d.ts +55 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +52 -0
- package/dist/user.js.map +1 -0
- package/examples/control-turn.mjs +53 -0
- package/examples/create-session.mjs +82 -0
- package/examples/http-connector.mjs +127 -0
- package/examples/lamp-backend.mjs +175 -0
- package/examples/prepare-realtime-connection.mjs +72 -0
- package/examples/read-usage.mjs +44 -0
- package/examples/send-message.mjs +48 -0
- package/examples/submit-audio.mjs +57 -0
- package/examples/upload-file.mjs +58 -0
- package/package.json +59 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-connection.js","sourceRoot":"","sources":["../src/backend-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type WebSocketConstructor } from "./backend-connection.js";
|
|
2
|
+
/** The answer of a `session.attach` that took effect. */
|
|
3
|
+
export interface AttachResult {
|
|
4
|
+
/** The Session's attachment generation. */
|
|
5
|
+
generation: number;
|
|
6
|
+
/** Position of the Session's latest event when the attachment took effect. */
|
|
7
|
+
cursor: string;
|
|
8
|
+
}
|
|
9
|
+
/** Why the pool stopped serving an attachment. It does not retry it. */
|
|
10
|
+
export type AttachmentEnd =
|
|
11
|
+
/** An executing attachment on another connection took the Session. */
|
|
12
|
+
{
|
|
13
|
+
reason: "superseded";
|
|
14
|
+
}
|
|
15
|
+
/** The Session was deleted. */
|
|
16
|
+
| {
|
|
17
|
+
reason: "session_deleted";
|
|
18
|
+
}
|
|
19
|
+
/** `OrganizationClient.close()` closed every Backend Connection. */
|
|
20
|
+
| {
|
|
21
|
+
reason: "closed";
|
|
22
|
+
}
|
|
23
|
+
/** Re-attaching failed for good, for example after a revoked Key. */
|
|
24
|
+
| {
|
|
25
|
+
reason: "error";
|
|
26
|
+
error: unknown;
|
|
27
|
+
};
|
|
28
|
+
/** Requests over one Backend Connection. */
|
|
29
|
+
export interface BackendLink {
|
|
30
|
+
readonly open: boolean;
|
|
31
|
+
request<T = unknown>(method: string, params: Record<string, unknown>): Promise<T>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The pool's view of one Session Attachment. The pool calls it; a Session
|
|
35
|
+
* connection implements it.
|
|
36
|
+
*/
|
|
37
|
+
export interface PoolAttachment {
|
|
38
|
+
readonly sessionId: string;
|
|
39
|
+
/** Parameters of the next `session.attach`, recomputed for every (re)attach. */
|
|
40
|
+
attachParams(): Record<string, unknown>;
|
|
41
|
+
/** A (re)attach took effect on `link`, which now delivers the Session. */
|
|
42
|
+
attached(result: AttachResult, link: BackendLink): void;
|
|
43
|
+
/** A notification for this Session from the connection that holds it. */
|
|
44
|
+
notify(method: string, params: Record<string, unknown>, link: BackendLink): void;
|
|
45
|
+
/** The pool gave the attachment up; called at most once, never after `detach()`. */
|
|
46
|
+
ended(end: AttachmentEnd): void;
|
|
47
|
+
}
|
|
48
|
+
export interface BackendConnectionPoolOptions {
|
|
49
|
+
baseUrl: string;
|
|
50
|
+
apiKey: string;
|
|
51
|
+
WebSocket?: WebSocketConstructor | undefined;
|
|
52
|
+
/** Close a connection that has held nothing for this long. Default 5 seconds. */
|
|
53
|
+
idleCloseMs?: number;
|
|
54
|
+
/** See `OpenBackendTransportInput.openTimeoutMs`. */
|
|
55
|
+
openTimeoutMs?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The Backend Connections of one OrganizationClient. Connections open on
|
|
59
|
+
* demand and hold up to the `maxSessions` the core announces; further
|
|
60
|
+
* attachments open another connection, which the load balancer may place on
|
|
61
|
+
* another replica. A lost connection's attachments re-attach elsewhere with
|
|
62
|
+
* their latest parameters; `connection.drain` moves them before the core
|
|
63
|
+
* closes the connection. Connections that hold nothing close after a short
|
|
64
|
+
* idle period.
|
|
65
|
+
*/
|
|
66
|
+
export declare class BackendConnectionPool {
|
|
67
|
+
#private;
|
|
68
|
+
constructor(options: BackendConnectionPoolOptions);
|
|
69
|
+
/** Open Backend Connections, for diagnostics and tests. */
|
|
70
|
+
get connections(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Attach a Session and keep it attached until `detach()` or until the pool
|
|
73
|
+
* gives it up through `ended()`. Rejects when the first attach fails; one
|
|
74
|
+
* attachment per Session is allowed at a time.
|
|
75
|
+
*/
|
|
76
|
+
attach(attachment: PoolAttachment): Promise<AttachResult>;
|
|
77
|
+
/** Release an attachment. Best effort: a lost connection releases it anyway. */
|
|
78
|
+
detach(attachment: PoolAttachment): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Send a request that any connection of the Organization may carry, such as
|
|
81
|
+
* `tool.result`, retrying on another connection after transient failures
|
|
82
|
+
* until `retryUntil` (epoch milliseconds). Only idempotent requests belong here.
|
|
83
|
+
*/
|
|
84
|
+
request<T = unknown>(method: string, params: Record<string, unknown>, options?: {
|
|
85
|
+
retryUntil?: number;
|
|
86
|
+
}): Promise<T>;
|
|
87
|
+
/**
|
|
88
|
+
* End every attachment with reason `closed`, release them and close the
|
|
89
|
+
* connections. Later attaches are refused.
|
|
90
|
+
*/
|
|
91
|
+
close(): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=backend-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-pool.d.ts","sourceRoot":"","sources":["../src/backend-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAQjC,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,MAAM,aAAa;AACvB,sEAAsE;AACpE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE;AAC1B,+BAA+B;GAC7B;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE;AAC/B,oEAAoE;GAClE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE;AACtB,qEAAqE;GACnE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAExC,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACnF;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACxD,yEAAyE;IACzE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACjF,oFAAoF;IACpF,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC7C,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA4CD;;;;;;;;GAQG;AACH,qBAAa,qBAAqB;;gBAiBpB,OAAO,EAAE,4BAA4B;IAQjD,2DAA2D;IAC3D,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB/D,gFAAgF;IAC1E,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD;;;;OAIG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO,GACpC,OAAO,CAAC,CAAC,CAAC;IAwBb;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAyQ7B"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import { BackendTransport, backendConnectionUrl, } from "./backend-connection.js";
|
|
2
|
+
import { BackendConnectionClosedError, BackendRequestError, TiDBLinkError, } from "./errors.js";
|
|
3
|
+
import { sleep } from "./http.js";
|
|
4
|
+
const DEFAULT_IDLE_CLOSE_MS = 5_000;
|
|
5
|
+
/** Attempts of a first attach before its caller sees the failure. */
|
|
6
|
+
const FIRST_ATTACH_ATTEMPTS = 3;
|
|
7
|
+
/** Attaches in flight across the pool; the rest wait their turn. */
|
|
8
|
+
const ATTACH_CONCURRENCY = 32;
|
|
9
|
+
const MAX_BACKOFF_MS = 30_000;
|
|
10
|
+
/** Spread of re-attaches after a lost connection, so that peers do not arrive at once. */
|
|
11
|
+
const RECOVERY_JITTER_MS = 1_000;
|
|
12
|
+
/** How long `close()` waits for detach answers before closing the sockets. */
|
|
13
|
+
const CLOSE_GRACE_MS = 2_000;
|
|
14
|
+
const backoff = (failures) => {
|
|
15
|
+
const base = Math.min(MAX_BACKOFF_MS, 250 * 2 ** Math.min(failures, 10));
|
|
16
|
+
return Math.round(base / 2 + (Math.random() * base) / 2);
|
|
17
|
+
};
|
|
18
|
+
/** Failures a later attempt, possibly on another connection, can fix. */
|
|
19
|
+
const isTransient = (error) => (error instanceof BackendConnectionClosedError && error.retryable) ||
|
|
20
|
+
(error instanceof BackendRequestError && error.code === -32603);
|
|
21
|
+
const isAttachResult = (value) => typeof value === "object" &&
|
|
22
|
+
value !== null &&
|
|
23
|
+
Number.isSafeInteger(value.generation) &&
|
|
24
|
+
value.generation >= 0 &&
|
|
25
|
+
typeof value.cursor === "string" &&
|
|
26
|
+
value.cursor !== "";
|
|
27
|
+
/**
|
|
28
|
+
* The Backend Connections of one OrganizationClient. Connections open on
|
|
29
|
+
* demand and hold up to the `maxSessions` the core announces; further
|
|
30
|
+
* attachments open another connection, which the load balancer may place on
|
|
31
|
+
* another replica. A lost connection's attachments re-attach elsewhere with
|
|
32
|
+
* their latest parameters; `connection.drain` moves them before the core
|
|
33
|
+
* closes the connection. Connections that hold nothing close after a short
|
|
34
|
+
* idle period.
|
|
35
|
+
*/
|
|
36
|
+
export class BackendConnectionPool {
|
|
37
|
+
#url;
|
|
38
|
+
#apiKey;
|
|
39
|
+
#WebSocket;
|
|
40
|
+
#idleCloseMs;
|
|
41
|
+
#openTimeoutMs;
|
|
42
|
+
#slots = new Set();
|
|
43
|
+
/** Attachments the application keeps, attached or being re-attached. */
|
|
44
|
+
#wanted = new Map();
|
|
45
|
+
/** The connection currently routing each attachment. */
|
|
46
|
+
#where = new Map();
|
|
47
|
+
#opening;
|
|
48
|
+
#openFailures = 0;
|
|
49
|
+
#attaching = 0;
|
|
50
|
+
#attachQueue = [];
|
|
51
|
+
#closed = false;
|
|
52
|
+
constructor(options) {
|
|
53
|
+
this.#url = backendConnectionUrl(options.baseUrl);
|
|
54
|
+
this.#apiKey = options.apiKey;
|
|
55
|
+
this.#WebSocket = options.WebSocket;
|
|
56
|
+
this.#idleCloseMs = options.idleCloseMs ?? DEFAULT_IDLE_CLOSE_MS;
|
|
57
|
+
this.#openTimeoutMs = options.openTimeoutMs;
|
|
58
|
+
}
|
|
59
|
+
/** Open Backend Connections, for diagnostics and tests. */
|
|
60
|
+
get connections() {
|
|
61
|
+
return this.#slots.size;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Attach a Session and keep it attached until `detach()` or until the pool
|
|
65
|
+
* gives it up through `ended()`. Rejects when the first attach fails; one
|
|
66
|
+
* attachment per Session is allowed at a time.
|
|
67
|
+
*/
|
|
68
|
+
async attach(attachment) {
|
|
69
|
+
if (this.#closed)
|
|
70
|
+
throw new TiDBLinkError("This OrganizationClient is closed");
|
|
71
|
+
if (this.#wanted.has(attachment.sessionId))
|
|
72
|
+
throw new TiDBLinkError(`Session ${attachment.sessionId} is already connected through this OrganizationClient; reuse that connection or close it first`);
|
|
73
|
+
this.#wanted.set(attachment.sessionId, attachment);
|
|
74
|
+
try {
|
|
75
|
+
return await this.#attach(attachment, FIRST_ATTACH_ATTEMPTS);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (this.#wanted.get(attachment.sessionId) === attachment)
|
|
79
|
+
this.#wanted.delete(attachment.sessionId);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Release an attachment. Best effort: a lost connection releases it anyway. */
|
|
84
|
+
async detach(attachment) {
|
|
85
|
+
if (this.#wanted.get(attachment.sessionId) !== attachment)
|
|
86
|
+
return;
|
|
87
|
+
this.#wanted.delete(attachment.sessionId);
|
|
88
|
+
const slot = this.#where.get(attachment);
|
|
89
|
+
this.#where.delete(attachment);
|
|
90
|
+
if (!slot || slot.held.get(attachment.sessionId) !== attachment)
|
|
91
|
+
return;
|
|
92
|
+
this.#release(slot, attachment.sessionId);
|
|
93
|
+
try {
|
|
94
|
+
await slot.transport.request("session.detach", { sessionId: attachment.sessionId });
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// The attachment lapses with its connection.
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.#maybeIdle(slot);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Send a request that any connection of the Organization may carry, such as
|
|
105
|
+
* `tool.result`, retrying on another connection after transient failures
|
|
106
|
+
* until `retryUntil` (epoch milliseconds). Only idempotent requests belong here.
|
|
107
|
+
*/
|
|
108
|
+
async request(method, params, options = {}) {
|
|
109
|
+
const until = options.retryUntil ?? 0;
|
|
110
|
+
for (let failures = 0;; failures++) {
|
|
111
|
+
let slot;
|
|
112
|
+
try {
|
|
113
|
+
slot = await this.#anySlot();
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (!isTransient(error) || Date.now() >= until)
|
|
117
|
+
throw error;
|
|
118
|
+
await sleep(Math.min(backoff(failures), Math.max(0, until - Date.now())));
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
this.#cancelIdle(slot);
|
|
122
|
+
try {
|
|
123
|
+
return await slot.transport.request(method, params);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (!isTransient(error) || Date.now() >= until)
|
|
127
|
+
throw error;
|
|
128
|
+
if (error instanceof BackendRequestError)
|
|
129
|
+
await sleep(Math.min(backoff(failures), Math.max(0, until - Date.now())));
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
this.#maybeIdle(slot);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* End every attachment with reason `closed`, release them and close the
|
|
138
|
+
* connections. Later attaches are refused.
|
|
139
|
+
*/
|
|
140
|
+
async close() {
|
|
141
|
+
if (this.#closed)
|
|
142
|
+
return;
|
|
143
|
+
this.#closed = true;
|
|
144
|
+
const attachments = [...this.#wanted.values()];
|
|
145
|
+
this.#wanted.clear();
|
|
146
|
+
const detaches = [];
|
|
147
|
+
for (const attachment of attachments) {
|
|
148
|
+
const slot = this.#where.get(attachment);
|
|
149
|
+
this.#where.delete(attachment);
|
|
150
|
+
if (slot && slot.held.get(attachment.sessionId) === attachment) {
|
|
151
|
+
this.#release(slot, attachment.sessionId);
|
|
152
|
+
detaches.push(slot.transport
|
|
153
|
+
.request("session.detach", { sessionId: attachment.sessionId })
|
|
154
|
+
.catch(() => undefined));
|
|
155
|
+
}
|
|
156
|
+
safely(() => attachment.ended({ reason: "closed" }));
|
|
157
|
+
}
|
|
158
|
+
const grace = new AbortController();
|
|
159
|
+
await Promise.race([
|
|
160
|
+
Promise.allSettled(detaches),
|
|
161
|
+
sleep(CLOSE_GRACE_MS, grace.signal).catch(() => undefined),
|
|
162
|
+
]);
|
|
163
|
+
grace.abort();
|
|
164
|
+
for (const slot of this.#slots) {
|
|
165
|
+
clearTimeout(slot.idleTimer);
|
|
166
|
+
slot.transport.close(1000, "client closed");
|
|
167
|
+
}
|
|
168
|
+
this.#slots.clear();
|
|
169
|
+
}
|
|
170
|
+
async #attach(attachment, attempts) {
|
|
171
|
+
for (let failures = 0;;) {
|
|
172
|
+
if (this.#wanted.get(attachment.sessionId) !== attachment)
|
|
173
|
+
throw new TiDBLinkError("The Session connection was closed while attaching");
|
|
174
|
+
let slot;
|
|
175
|
+
try {
|
|
176
|
+
slot = await this.#reserveSlot();
|
|
177
|
+
const result = await this.#limited(() => slot.transport.request("session.attach", attachment.attachParams()));
|
|
178
|
+
if (!isAttachResult(result))
|
|
179
|
+
throw new TiDBLinkError("session.attach returned an invalid result");
|
|
180
|
+
if (this.#wanted.get(attachment.sessionId) !== attachment) {
|
|
181
|
+
// Closed while the attach was in flight: release what it took.
|
|
182
|
+
slot.transport
|
|
183
|
+
.request("session.detach", { sessionId: attachment.sessionId })
|
|
184
|
+
.catch(() => undefined);
|
|
185
|
+
throw new TiDBLinkError("The Session connection was closed while attaching");
|
|
186
|
+
}
|
|
187
|
+
slot.held.set(attachment.sessionId, attachment);
|
|
188
|
+
this.#where.set(attachment, slot);
|
|
189
|
+
attachment.attached(result, slot.transport);
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
failures += 1;
|
|
194
|
+
if (error instanceof BackendRequestError &&
|
|
195
|
+
slot &&
|
|
196
|
+
(error.reason === "connection_full" || error.reason === "connection_draining")) {
|
|
197
|
+
// Try another connection at once; a core that refuses every one still ends the loop.
|
|
198
|
+
if (error.reason === "connection_full")
|
|
199
|
+
slot.full = true;
|
|
200
|
+
else
|
|
201
|
+
slot.draining = true;
|
|
202
|
+
if (failures >= attempts)
|
|
203
|
+
throw error;
|
|
204
|
+
if (failures > 2)
|
|
205
|
+
await sleep(backoff(failures));
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (!isTransient(error) || failures >= attempts)
|
|
209
|
+
throw error;
|
|
210
|
+
await sleep(backoff(failures));
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
if (slot) {
|
|
214
|
+
slot.reserved -= 1;
|
|
215
|
+
this.#maybeIdle(slot);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/** Re-attach after a lost or draining connection, until it works or is given up. */
|
|
221
|
+
async #recover(attachment, jitterMs) {
|
|
222
|
+
try {
|
|
223
|
+
if (jitterMs)
|
|
224
|
+
await sleep(Math.round(Math.random() * jitterMs));
|
|
225
|
+
await this.#attach(attachment, Number.POSITIVE_INFINITY);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (this.#wanted.get(attachment.sessionId) !== attachment)
|
|
229
|
+
return;
|
|
230
|
+
this.#wanted.delete(attachment.sessionId);
|
|
231
|
+
safely(() => attachment.ended({ reason: "error", error }));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async #limited(task) {
|
|
235
|
+
if (this.#attaching >= ATTACH_CONCURRENCY)
|
|
236
|
+
await new Promise((resolve) => this.#attachQueue.push(resolve));
|
|
237
|
+
this.#attaching += 1;
|
|
238
|
+
try {
|
|
239
|
+
return await task();
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
this.#attaching -= 1;
|
|
243
|
+
this.#attachQueue.shift()?.();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** A connection with room for one more attachment, reserved for the caller. */
|
|
247
|
+
async #reserveSlot() {
|
|
248
|
+
for (;;) {
|
|
249
|
+
for (const slot of this.#slots)
|
|
250
|
+
if (slot.transport.open &&
|
|
251
|
+
!slot.draining &&
|
|
252
|
+
!slot.full &&
|
|
253
|
+
slot.held.size + slot.reserved < slot.transport.hello.maxSessions) {
|
|
254
|
+
// Reserve before yielding, so that concurrent attaches count each other.
|
|
255
|
+
slot.reserved += 1;
|
|
256
|
+
this.#cancelIdle(slot);
|
|
257
|
+
return slot;
|
|
258
|
+
}
|
|
259
|
+
await this.#openShared();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async #anySlot() {
|
|
263
|
+
let fallback;
|
|
264
|
+
for (const slot of this.#slots) {
|
|
265
|
+
if (!slot.transport.open)
|
|
266
|
+
continue;
|
|
267
|
+
if (!slot.draining)
|
|
268
|
+
return slot;
|
|
269
|
+
fallback ??= slot;
|
|
270
|
+
}
|
|
271
|
+
return fallback ?? (await this.#openShared());
|
|
272
|
+
}
|
|
273
|
+
/** One connection opens at a time; concurrent callers share it. */
|
|
274
|
+
#openShared() {
|
|
275
|
+
if (this.#closed)
|
|
276
|
+
return Promise.reject(new TiDBLinkError("This OrganizationClient is closed"));
|
|
277
|
+
this.#opening ??= this.#open().finally(() => {
|
|
278
|
+
this.#opening = undefined;
|
|
279
|
+
});
|
|
280
|
+
return this.#opening;
|
|
281
|
+
}
|
|
282
|
+
async #open() {
|
|
283
|
+
if (this.#openFailures)
|
|
284
|
+
await sleep(backoff(this.#openFailures));
|
|
285
|
+
let slot;
|
|
286
|
+
let transport;
|
|
287
|
+
try {
|
|
288
|
+
transport = await BackendTransport.open({
|
|
289
|
+
url: this.#url,
|
|
290
|
+
apiKey: this.#apiKey,
|
|
291
|
+
WebSocket: this.#WebSocket,
|
|
292
|
+
...(this.#openTimeoutMs === undefined ? {} : { openTimeoutMs: this.#openTimeoutMs }),
|
|
293
|
+
onNotification: (method, params) => {
|
|
294
|
+
if (slot)
|
|
295
|
+
this.#notify(slot, method, params);
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
this.#openFailures += 1;
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
this.#openFailures = 0;
|
|
304
|
+
slot = {
|
|
305
|
+
transport,
|
|
306
|
+
held: new Map(),
|
|
307
|
+
reserved: 0,
|
|
308
|
+
full: false,
|
|
309
|
+
draining: false,
|
|
310
|
+
idleTimer: undefined,
|
|
311
|
+
};
|
|
312
|
+
if (this.#closed) {
|
|
313
|
+
transport.close(1000, "client closed");
|
|
314
|
+
throw new TiDBLinkError("This OrganizationClient is closed");
|
|
315
|
+
}
|
|
316
|
+
this.#slots.add(slot);
|
|
317
|
+
const opened = slot;
|
|
318
|
+
void transport.closed.then((error) => this.#lost(opened, error));
|
|
319
|
+
this.#maybeIdle(slot);
|
|
320
|
+
return slot;
|
|
321
|
+
}
|
|
322
|
+
#notify(slot, method, params) {
|
|
323
|
+
if (method === "connection.drain") {
|
|
324
|
+
const closeAfterMs = Number(params.closeAfterMs);
|
|
325
|
+
this.#drain(slot, Number.isFinite(closeAfterMs) ? closeAfterMs : 0);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const sessionId = params.sessionId;
|
|
329
|
+
if (typeof sessionId !== "string")
|
|
330
|
+
return;
|
|
331
|
+
const attachment = slot.held.get(sessionId);
|
|
332
|
+
if (!attachment)
|
|
333
|
+
return;
|
|
334
|
+
if (method === "session.detached") {
|
|
335
|
+
this.#release(slot, sessionId);
|
|
336
|
+
this.#where.delete(attachment);
|
|
337
|
+
if (this.#wanted.get(sessionId) === attachment)
|
|
338
|
+
this.#wanted.delete(sessionId);
|
|
339
|
+
safely(() => attachment.ended({
|
|
340
|
+
reason: params.reason === "session_deleted" ? "session_deleted" : "superseded",
|
|
341
|
+
}));
|
|
342
|
+
this.#maybeIdle(slot);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
safely(() => attachment.notify(method, params, slot.transport));
|
|
346
|
+
}
|
|
347
|
+
/** Move every attachment to another connection, then close this one. */
|
|
348
|
+
#drain(slot, closeAfterMs) {
|
|
349
|
+
if (slot.draining && slot.held.size === 0)
|
|
350
|
+
return;
|
|
351
|
+
slot.draining = true;
|
|
352
|
+
const deadline = Date.now() + closeAfterMs;
|
|
353
|
+
const moving = [...slot.held.values()];
|
|
354
|
+
// Stop routing now: each re-attach resumes from what its Session processed.
|
|
355
|
+
slot.held.clear();
|
|
356
|
+
const moves = moving.map((attachment) => {
|
|
357
|
+
this.#where.delete(attachment);
|
|
358
|
+
return this.#recover(attachment, 0);
|
|
359
|
+
});
|
|
360
|
+
void (async () => {
|
|
361
|
+
await Promise.allSettled(moves);
|
|
362
|
+
// Let claims and results in flight finish, then close before the core does.
|
|
363
|
+
while (slot.transport.open && slot.transport.pendingRequests > 0 && Date.now() < deadline)
|
|
364
|
+
await sleep(50);
|
|
365
|
+
slot.transport.close(1000, "drained");
|
|
366
|
+
})();
|
|
367
|
+
}
|
|
368
|
+
#lost(slot, error) {
|
|
369
|
+
this.#slots.delete(slot);
|
|
370
|
+
clearTimeout(slot.idleTimer);
|
|
371
|
+
const held = [...slot.held.values()];
|
|
372
|
+
slot.held.clear();
|
|
373
|
+
for (const attachment of held) {
|
|
374
|
+
this.#where.delete(attachment);
|
|
375
|
+
if (this.#wanted.get(attachment.sessionId) !== attachment)
|
|
376
|
+
continue;
|
|
377
|
+
if (error.retryable && !this.#closed) {
|
|
378
|
+
void this.#recover(attachment, RECOVERY_JITTER_MS);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
this.#wanted.delete(attachment.sessionId);
|
|
382
|
+
safely(() => attachment.ended({ reason: "error", error }));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
#release(slot, sessionId) {
|
|
387
|
+
slot.held.delete(sessionId);
|
|
388
|
+
slot.full = false;
|
|
389
|
+
}
|
|
390
|
+
#cancelIdle(slot) {
|
|
391
|
+
clearTimeout(slot.idleTimer);
|
|
392
|
+
slot.idleTimer = undefined;
|
|
393
|
+
}
|
|
394
|
+
#maybeIdle(slot) {
|
|
395
|
+
if (slot.idleTimer || !this.#slots.has(slot) || slot.held.size || slot.reserved)
|
|
396
|
+
return;
|
|
397
|
+
slot.idleTimer = setTimeout(() => {
|
|
398
|
+
slot.idleTimer = undefined;
|
|
399
|
+
if (!this.#slots.has(slot) || slot.held.size || slot.reserved)
|
|
400
|
+
return;
|
|
401
|
+
// Claims and results may still be in flight; look again later.
|
|
402
|
+
if (slot.transport.pendingRequests)
|
|
403
|
+
return this.#maybeIdle(slot);
|
|
404
|
+
this.#slots.delete(slot);
|
|
405
|
+
slot.transport.close(1000, "idle");
|
|
406
|
+
}, this.#idleCloseMs);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
function safely(callback) {
|
|
410
|
+
try {
|
|
411
|
+
callback();
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
queueMicrotask(() => {
|
|
415
|
+
throw error;
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=backend-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-pool.js","sourceRoot":"","sources":["../src/backend-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BackendConnectionPool, BackendLink } from "./backend-pool.js";
|
|
2
|
+
import { TiDBLinkError } from "./errors.js";
|
|
3
|
+
import type { ClientToolHandlers } from "./session-connection.js";
|
|
4
|
+
/**
|
|
5
|
+
* Raised through `onError` when the core did not accept a Client Tool
|
|
6
|
+
* result. `reason` is the core's: `call_settled` (the call already had an
|
|
7
|
+
* outcome, for example its deadline passed), `not_claimed` or
|
|
8
|
+
* `call_not_found`.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ClientToolResultRefusedError extends TiDBLinkError {
|
|
11
|
+
readonly callId: string;
|
|
12
|
+
readonly reason: string;
|
|
13
|
+
constructor(callId: string, reason: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Executes the Client Tool calls an executing Session connection receives:
|
|
17
|
+
* claim first, run only after `claimed: true`, then submit the result over any
|
|
18
|
+
* Backend Connection until the call's deadline. Each callId runs at most once.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ClientToolExecutor {
|
|
21
|
+
#private;
|
|
22
|
+
constructor(input: {
|
|
23
|
+
pool: BackendConnectionPool;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
handlers: ClientToolHandlers;
|
|
26
|
+
report: (error: unknown) => void;
|
|
27
|
+
});
|
|
28
|
+
/** Handle one `tool.call` from the connection that delivered it. */
|
|
29
|
+
receive(params: Record<string, unknown>, link: BackendLink): void;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=client-tool-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-tool-executor.d.ts","sourceRoot":"","sources":["../src/client-tool-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAGL,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAkCjC;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,aAAa;IAE3D,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;CAI1B;AA4CD;;;;GAIG;AACH,qBAAa,kBAAkB;;gBAOjB,KAAK,EAAE;QACjB,IAAI,EAAE,qBAAqB,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,kBAAkB,CAAC;QAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAClC;IAOD,oEAAoE;IACpE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;CA6HlE"}
|