1.3 KiB
1.3 KiB
Fix: cardAbsentCoveragePercent above 100% on reused Esper runtime
Root cause
DriverWorkingTimeReusableProjectionBuilder pools Esper runtimes. The EPL used
VuCardAbsentInterval#keepall as a statement-local data window, but the runtime
cleanup did not clear that retained state before the next execution.
When the same pooled runtime processed a second request, the previous execution's
card-absent intervals remained in the overlap calculation. New intervals were
added again, so cardAbsentDurationSeconds was doubled while the output listener
still reported only the newly emitted VuCardAbsentInterval events.
This is source-independent. It appeared in the DB result because that request was executed after the file-session request on the same pooled runtime.
Changes
- Added public named window
VuCardAbsentIntervalWindow#keepall. - Routed generated
VuCardAbsentIntervalevents into the named window. - Changed rest-coverage overlap calculations to read from the named window.
- Added
delete from VuCardAbsentIntervalWindowto reusable-runtime cleanup. - Applied the same EPL structure to the legacy/reference projection bundle.
- Added a regression test that executes the same input twice on the same builder and verifies coverage does not double and remains at or below 100%.