mirror of
https://github.com/openai/codex.git
synced 2026-08-25 13:28:55 +00:00
## Why Durable thread queues can be updated through another SQLite connection, but loaded idle threads need to notice those updates before they can dispatch the new messages. ## What changed - Track a durable revision for each thread queue, including backfilling existing queues and updating revisions on inserts, updates, and deletes. - Poll SQLite's data version and query revisions to find changed queues for loaded threads. - Wake idle threads with pending external messages, discover queued work when threads are loaded or resumed, and retry each thread independently so one blocked queue does not stall others. ## Testing - Cover cross-runtime queue writes, edits, independent dispatch, wake retries, and resumed threads. - Cover migration backfills and revision tracking for queue updates and deletes. GitOrigin-RevId: 906d902bbf6a760be206a1b2c08fd71427b63c46
22 lines
637 B
Rust
22 lines
637 B
Rust
//! Durable, storage-neutral user-message queue and idle dispatch.
|
|
|
|
use std::sync::Arc;
|
|
|
|
use codex_extension_api::ExtensionRegistryBuilder;
|
|
|
|
mod service;
|
|
|
|
pub use service::QueueServiceError;
|
|
pub use service::QueuedItem;
|
|
pub use service::QueuedItemService;
|
|
|
|
/// Registers the caller-owned queue before lower-priority idle contributors.
|
|
pub fn install<C>(registry: &mut ExtensionRegistryBuilder<C>, service: Arc<QueuedItemService>)
|
|
where
|
|
C: Send + Sync + 'static,
|
|
{
|
|
let watcher = Arc::downgrade(&service);
|
|
registry.thread_lifecycle_contributor(service);
|
|
tokio::spawn(QueuedItemService::watch_external_messages(watcher));
|
|
}
|