- New `ScriptIdentity { script_id, updated_at }` DTO.
- `ExecutorClient` trait gains an `execute_with_identity` method;
default impl forwards to `execute` so `RemoteExecutorClient` (and
cluster-mode transports later) keep working without bespoke caching.
- `LocalExecutorClient` overrides `execute_with_identity` to consult
an `LruCache<ScriptId, CachedScript>`. Cache hit only when the
cached entry's `updated_at` matches the caller's identity; mismatch
triggers a fresh `Engine::compile`. `Engine::execute_ast(&Arc<AST>, req)`
is called inside `spawn_blocking` exactly as `execute` does today.
- Cache size from `PICLOUD_SCRIPT_CACHE_SIZE` (default 256).
- Orchestrator's HTTP data-plane path and the dispatcher both switch
to `execute_with_identity`. `ResolvedTrigger` carries
`script_updated_at` for the dispatcher's identity construction.
Workspace builds; full test suite (~440 tests) green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
23 lines
814 B
Rust
23 lines
814 B
Rust
//! Per-node event ingress and dispatch.
|
|
//!
|
|
//! Owns the data-plane request path:
|
|
//! inbound event → resolve script → call `ExecutorClient::execute`
|
|
//!
|
|
//! Does not import `executor-core` types in its public surface beyond the
|
|
//! transport DTOs (`ExecRequest`/`ExecResponse`). The `ExecutorClient`
|
|
//! trait is the seam that lets the orchestrator call executor logic
|
|
//! in-process (single-node) or over HTTP (cluster).
|
|
|
|
pub mod api;
|
|
pub mod client;
|
|
pub mod gate;
|
|
pub mod inbox;
|
|
pub mod resolver;
|
|
pub mod routing;
|
|
|
|
pub use api::{data_plane_router, user_routes_router, DataPlaneState};
|
|
pub use client::{ExecutorClient, LocalExecutorClient, RemoteExecutorClient, ScriptIdentity};
|
|
pub use gate::{AcquireError, ExecutionGate};
|
|
pub use inbox::InboxRegistry;
|
|
pub use resolver::{ResolverError, ScriptResolver};
|