1.8 KiB
Patch: Reusable Esper runtime execution-state cleanup
Purpose
Prevent retained Esper state from leaking between pipeline executions when DriverWorkingTimeReusableProjectionBuilder reuses a pooled runtime.
Runtime lifecycle
A pooled runtime now follows this lifecycle:
acquire runtime
-> clear execution state before sending events
-> execute the complete derived-projection module
-> detach result listeners
-> clear execution state again in finally
-> return only a clean runtime to the pool
If execution or cleanup fails, the runtime is marked unsafe and destroyed instead of being pooled.
Resettable input retention
The statement-local usages of:
TachographVehicleUsageIntervalInputEvent#keepall
have been replaced with the public named window:
TachographVehicleUsageIntervalInputWindow#keepall
The window is populated from TachographVehicleUsageIntervalInputEvent and is part of the cleanup contract. This prevents odometer and vehicle-usage evidence from a previous execution from participating in a later execution.
The earlier VuCardAbsentIntervalWindow fix is retained.
Cleanup contract
All public named windows in driver-working-time-derived-projections.epl, including the context-scoped PreviousVehicleUsageInterval, have corresponding fire-and-forget delete queries.
A regression test scans the EPL and fails when a newly introduced public named window is not added to the cleanup contract.
Metrics
Runtime logging now reports separate values:
runtimeResetBeforeMsruntimeResetAfterMs
Tests
Added/retained tests for:
- identical results when a warm runtime is reused;
- no doubled card-absent coverage and coverage not exceeding 100%;
- no retained vehicle-usage/odometer evidence in the next execution;
- cleanup-query coverage for every public named window.