Skip to content

Commit c02a5d7

Browse files
committed
fix(rivetkit): fix hibernatable websocket last seen message index to be i64 instead of u64 (#3391)
1 parent 7c4e0f1 commit c02a5d7

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

rivetkit-typescript/packages/rivetkit/schemas/actor-persist/v2.bare

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ type PersistedConnection struct {
1111
parameters: data
1212
state: data
1313
subscriptions: list<PersistedSubscription>
14-
lastSeen: u64
14+
lastSeen: i64
1515
}
1616

1717
# MARK: Schedule Event
@@ -30,15 +30,15 @@ type PersistedScheduleEventKind union {
3030

3131
type PersistedScheduleEvent struct {
3232
eventId: str
33-
timestamp: u64
33+
timestamp: i64
3434
kind: PersistedScheduleEventKind
3535
}
3636

3737
# MARK: WebSocket
3838
type PersistedHibernatableWebSocket struct {
3939
requestId: data
40-
lastSeenTimestamp: u64
41-
msgIndex: u64
40+
lastSeenTimestamp: i64
41+
msgIndex: i64
4242
}
4343

4444
# MARK: Actor

rivetkit-typescript/packages/rivetkit/src/actor/instance.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,10 @@ export class ActorInstance<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
676676

677677
this.#onPersistSavedPromise?.resolve();
678678
} catch (error) {
679+
this.#rLog.error({
680+
msg: "error saving persist",
681+
error: stringifyError(error),
682+
});
679683
this.#onPersistSavedPromise?.reject(error);
680684
throw error;
681685
}

rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,14 @@ export class EngineActorDriver implements ActorDriver {
172172
}
173173

174174
// Check for existing WS
175-
const existingWs = handler.actor[
176-
PERSIST_SYMBOL
177-
].hibernatableWebSocket.find((ws) =>
175+
const hibernatableArray =
176+
handler.actor[PERSIST_SYMBOL].hibernatableWebSocket;
177+
logger().debug({
178+
msg: "checking hibernatable websockets",
179+
requestId: idToStr(requestId),
180+
existingHibernatableWebSockets: hibernatableArray.length,
181+
});
182+
const existingWs = hibernatableArray.find((ws) =>
178183
arrayBuffersEqual(ws.requestId, requestId),
179184
);
180185

@@ -350,6 +355,12 @@ export class EngineActorDriver implements ActorDriver {
350355

351356
handler.persistedData = data;
352357

358+
logger().debug({
359+
msg: "writing persisted data for actor",
360+
actorId,
361+
dataSize: data.byteLength,
362+
});
363+
353364
await this.#runner.kvPut(actorId, [[KEYS.PERSIST_DATA, data]]);
354365
}
355366

@@ -424,6 +435,13 @@ export class EngineActorDriver implements ActorDriver {
424435
persistedValue !== null
425436
? persistedValue
426437
: serializeEmptyPersistData(input);
438+
439+
logger().debug({
440+
msg: "loaded persisted data for actor",
441+
actorId,
442+
dataSize: handler.persistedData?.byteLength,
443+
wasInStorage: persistedValue !== null,
444+
});
427445
}
428446

429447
const name = actorConfig.name as string;

0 commit comments

Comments
 (0)