From 3acbad4a5c5f61972aba5335c64fbb1afda6ecd1 Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Wed, 5 Nov 2025 19:29:14 -0800 Subject: [PATCH] fix(rivetkit): fix initial hibernation state always being overridden with msgIndex of -1 --- .../src/drivers/engine/actor-driver.ts | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts index 8cfedae1fe..efd0a2e38a 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -181,11 +181,20 @@ export class EngineActorDriver implements ActorDriver { // Determine configuration for new WS let hibernationConfig: HibernationConfig; if (existingWs) { + logger().debug({ + msg: "found existing hibernatable websocket", + requestId: idToStr(requestId), + lastMsgIndex: existingWs.msgIndex, + }); hibernationConfig = { enabled: true, lastMsgIndex: Number(existingWs.msgIndex), }; } else { + logger().debug({ + msg: "no existing hibernatable websocket found", + requestId: idToStr(requestId), + }); if (path === PATH_CONNECT_WEBSOCKET) { hibernationConfig = { enabled: true, @@ -251,12 +260,24 @@ export class EngineActorDriver implements ActorDriver { } } - // Save hibernatable WebSocket - handler.actor[PERSIST_SYMBOL].hibernatableWebSocket.push({ - requestId, - lastSeenTimestamp: BigInt(Date.now()), - msgIndex: -1n, - }); + // Save or update hibernatable WebSocket + if (existingWs) { + logger().debug({ + msg: "updated existing hibernatable websocket timestamp", + requestId: idToStr(requestId), + }); + existingWs.lastSeenTimestamp = BigInt(Date.now()); + } else { + logger().debug({ + msg: "created new hibernatable websocket entry", + requestId: idToStr(requestId), + }); + handler.actor[PERSIST_SYMBOL].hibernatableWebSocket.push({ + requestId, + lastSeenTimestamp: BigInt(Date.now()), + msgIndex: -1n, + }); + } return hibernationConfig; },