Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type PersistedConnection struct {
parameters: data
state: data
subscriptions: list<PersistedSubscription>
lastSeen: u64
lastSeen: i64
}

# MARK: Schedule Event
Expand All @@ -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
Expand Down
4 changes: 4 additions & 0 deletions rivetkit-typescript/packages/rivetkit/src/actor/instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,10 @@ export class ActorInstance<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {

this.#onPersistSavedPromise?.resolve();
} catch (error) {
this.#rLog.error({
msg: "error saving persist",
error: stringifyError(error),
});
this.#onPersistSavedPromise?.reject(error);
throw error;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
);

Expand Down Expand Up @@ -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]]);
}

Expand Down Expand Up @@ -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;
Expand Down
Loading