Class MongoSessionStore<S>
- Type Parameters:
S- the type of custom session state
- All Implemented Interfaces:
SessionStore<S>,SnapshotReader<S>,SnapshotSubscriber,SnapshotWriter<S>
SessionStore and SnapshotSubscriber.
Persists session snapshots with the same sharded checkpoint + diff + pointer layout as the
Firestore, DynamoDB, Cosmos DB, and PostgreSQL backends (see FirestoreSessionStore),
sharing the pure logic in SnapshotSharding.
Storage layout (single collection)
All documents live in one collection (default database genkit, collection
genkit_sessions). Each document's _id is <prefix>::<recordId> where
prefix is the per-tenant prefix (default "global") and recordId discriminates
the record kind:
SNAP_<snapshotId>— one metadata document per snapshot.kindis"checkpoint"or"diff"; carriescheckpointId,checkpointShardCount,segmentPath,statePatch(RFC-6902 as a JSON string for diffs) anderror(JSON string).SHARD_<checkpointId>_<index>— a shard of the checkpoint state JSON.PTR_<sessionId>— the current leaf pointer for a session.
Concurrency
Shard and snapshot documents are idempotent by _id (upserted); updating an existing
snapshot id uses a version conditional replace, re-applying the (pure) mutator on
conflict. The session pointer is advanced monotonically (never backward) under the same
version concurrency. Shards are written before the snapshot document, which is written before
the pointer flips, so a reader following the pointer always sees complete data.
-
Constructor Summary
ConstructorsConstructorDescriptionMongoSessionStore(com.mongodb.client.MongoClient client) Creates a store with default options.MongoSessionStore(com.mongodb.client.MongoClient client, MongoSessionStoreOptions options) Creates a store. -
Method Summary
Modifier and TypeMethodDescriptionRetrieves a session snapshot.onSnapshotStateChange(String snapshotId, Consumer<SessionSnapshot<?>> cb, SessionStoreOptions storeOpts) Subscribes to status changes for the snapshot identified bysnapshotId.saveSnapshot(String snapshotId, SnapshotMutator<S> mutator, SessionStoreOptions storeOpts) Atomically reads the snapshot identified bysnapshotId(or creates a new one), appliesmutator, and persists the result.
-
Constructor Details
-
MongoSessionStore
public MongoSessionStore(com.mongodb.client.MongoClient client) Creates a store with default options.- Parameters:
client- the MongoDB client
-
MongoSessionStore
Creates a store.- Parameters:
client- the MongoDB clientoptions- the store options
-
-
Method Details
-
saveSnapshot
public String saveSnapshot(String snapshotId, SnapshotMutator<S> mutator, SessionStoreOptions storeOpts) Atomically reads the snapshot identified bysnapshotId(or creates a new one), appliesmutator, and persists the result.Implements the same identity/sessionId/status defaulting contract as the reference stores, then writes the snapshot (checkpoint shards + metadata document) and advances the session pointer.
- Specified by:
saveSnapshotin interfaceSnapshotWriter<S>- Parameters:
snapshotId- the ID of the snapshot to write; ifnullthe store mints a UUIDmutator- the pure read-modify-write function; receives the existing snapshot (ornull) and returns the snapshot to persist, ornullto declinestoreOpts- store options- Returns:
- the snapshot ID that was written, or
nullif the mutator declined
-
getSnapshot
Retrieves a session snapshot.When
GetSnapshotOptions.getSnapshotId()is set the store returns that specific snapshot. WhenGetSnapshotOptions.getSessionId()is set the store resolves and returns the latest leaf snapshot for that session. Returnsnullif no matching snapshot exists.By
snapshotId: loads the snapshot document and reconstructs its state from the checkpoint shards + orderedsegmentPathdiffs. BysessionId: reads the pointer, then loads and reconstructs the pointed snapshot.- Specified by:
getSnapshotin interfaceSnapshotReader<S>- Parameters:
opts- options specifying which snapshot to retrieve; exactly one ofsnapshotId/sessionIdmust be set- Returns:
- the matching snapshot, or
nullif none exists
-
onSnapshotStateChange
public AutoCloseable onSnapshotStateChange(String snapshotId, Consumer<SessionSnapshot<?>> cb, SessionStoreOptions storeOpts) Subscribes to status changes for the snapshot identified bysnapshotId.Invokes
cbimmediately with the current snapshot and again on every subsequent change. The returnedAutoCloseableunsubscribes when closed.The subscription polls
getSnapshot(com.google.genkit.ai.agent.GetSnapshotOptions)on a shared daemon scheduler and fires the callback whenever the serialized snapshot content changes. The callback also fires immediately if the snapshot already exists.- Specified by:
onSnapshotStateChangein interfaceSnapshotSubscriber- Parameters:
snapshotId- the snapshot to observecb- callback invoked with the updated snapshot on each changestoreOpts- store options- Returns:
- a handle that cancels the subscription when
AutoCloseable.close()is called
-