mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-09 03:22:40 +00:00
fix(scripts): clear RPC RTT send failure timers
This commit is contained in:
@@ -720,18 +720,19 @@ export function createGatewayClient({ WebSocket, openTimeoutMs = 8_000, url }) {
|
||||
reject(new Error(`timeout waiting for ${method}`));
|
||||
}, timeoutMs);
|
||||
pending.set(id, { resolve, reject, timeout });
|
||||
ws.send(JSON.stringify({ type: "req", id, method, params }), (error) => {
|
||||
const rejectSendFailure = (error) => {
|
||||
if (!error) {
|
||||
return;
|
||||
}
|
||||
const waiter = pending.get(id);
|
||||
if (!waiter) {
|
||||
return;
|
||||
}
|
||||
pending.delete(id);
|
||||
clearTimeout(waiter.timeout);
|
||||
waiter.reject(error instanceof Error ? error : new Error(String(error)));
|
||||
});
|
||||
clearTimeout(timeout);
|
||||
reject(error instanceof Error ? error : new Error(String(error)));
|
||||
};
|
||||
try {
|
||||
ws.send(JSON.stringify({ type: "req", id, method, params }), rejectSendFailure);
|
||||
} catch (error) {
|
||||
rejectSendFailure(error);
|
||||
}
|
||||
});
|
||||
const close = () => {
|
||||
rejectPending(new Error("gateway websocket client closed"));
|
||||
|
||||
@@ -102,6 +102,30 @@ describe("scripts/measure-rpc-rtt.mjs", () => {
|
||||
expect(socket.closed).toBe(true);
|
||||
});
|
||||
|
||||
it("clears pending websocket request timers when send throws synchronously", async () => {
|
||||
vi.useFakeTimers();
|
||||
FakeWebSocket.instances = [];
|
||||
const client = createGatewayClient({
|
||||
WebSocket: FakeWebSocket,
|
||||
url: "ws://127.0.0.1:12345",
|
||||
});
|
||||
const socket = FakeWebSocket.instances[0];
|
||||
if (!socket) {
|
||||
throw new Error("fake websocket was not created");
|
||||
}
|
||||
socket.readyState = FakeWebSocket.OPEN;
|
||||
socket.send = () => {
|
||||
throw new Error("socket closed during send");
|
||||
};
|
||||
|
||||
await expect(client.request("health", {}, 10_000)).rejects.toThrow(
|
||||
"socket closed during send",
|
||||
);
|
||||
|
||||
expect(vi.getTimerCount()).toBe(0);
|
||||
client.close();
|
||||
});
|
||||
|
||||
it("parses bounded RPC RTT options strictly", () => {
|
||||
expect(
|
||||
parseArgs([
|
||||
|
||||
Reference in New Issue
Block a user