diff --git a/rivetkit-typescript/packages/rivetkit/schemas/actor-persist/v2.bare b/rivetkit-typescript/packages/rivetkit/schemas/actor-persist/v2.bare index 89091d8976..ff0ab26b32 100644 --- a/rivetkit-typescript/packages/rivetkit/schemas/actor-persist/v2.bare +++ b/rivetkit-typescript/packages/rivetkit/schemas/actor-persist/v2.bare @@ -11,7 +11,7 @@ type PersistedConnection struct { parameters: data state: data subscriptions: list - lastSeen: u64 + lastSeen: i64 } # MARK: Schedule Event @@ -30,15 +30,15 @@ type PersistedScheduleEventKind union { type PersistedScheduleEvent struct { eventId: str - timestamp: u64 + timestamp: i64 kind: PersistedScheduleEventKind } # MARK: WebSocket type PersistedHibernatableWebSocket struct { requestId: data - lastSeenTimestamp: u64 - msgIndex: u64 + lastSeenTimestamp: i64 + msgIndex: i64 } # MARK: Actor diff --git a/rivetkit-typescript/packages/rivetkit/src/actor/instance.ts b/rivetkit-typescript/packages/rivetkit/src/actor/instance.ts index 5c90a4c684..a013b3166e 100644 --- a/rivetkit-typescript/packages/rivetkit/src/actor/instance.ts +++ b/rivetkit-typescript/packages/rivetkit/src/actor/instance.ts @@ -676,6 +676,10 @@ export class ActorInstance { this.#onPersistSavedPromise?.resolve(); } catch (error) { + this.#rLog.error({ + msg: "error saving persist", + error: stringifyError(error), + }); this.#onPersistSavedPromise?.reject(error); throw error; } 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 5e97ce3647..9da4cfd9bd 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -172,9 +172,14 @@ export class EngineActorDriver implements ActorDriver { } // Check for existing WS - const existingWs = handler.actor[ - PERSIST_SYMBOL - ].hibernatableWebSocket.find((ws) => + const hibernatableArray = + handler.actor[PERSIST_SYMBOL].hibernatableWebSocket; + logger().debug({ + msg: "checking hibernatable websockets", + requestId: idToStr(requestId), + existingHibernatableWebSockets: hibernatableArray.length, + }); + const existingWs = hibernatableArray.find((ws) => arrayBuffersEqual(ws.requestId, requestId), ); @@ -350,6 +355,12 @@ export class EngineActorDriver implements ActorDriver { handler.persistedData = data; + logger().debug({ + msg: "writing persisted data for actor", + actorId, + dataSize: data.byteLength, + }); + await this.#runner.kvPut(actorId, [[KEYS.PERSIST_DATA, data]]); } @@ -424,6 +435,13 @@ export class EngineActorDriver implements ActorDriver { persistedValue !== null ? persistedValue : serializeEmptyPersistData(input); + + logger().debug({ + msg: "loaded persisted data for actor", + actorId, + dataSize: handler.persistedData?.byteLength, + wasInStorage: persistedValue !== null, + }); } const name = actorConfig.name as string;