Description
WindowedStore and SessionStore do not implement a strict retention time in general. We should consider to make retention time strict: even if we still have some record in the store (due to the segmented implementation), we might want to filter expired records on-read. This might benefit PAPI users.
Atm, InMemoryWindow store does already enforce a strict retention time.
As an alternative, we could also inject such a filter in the wrapping `MeteredStore` – this might lift the burden from users who implement a custom state store.
As an alternative, we could change all DSL operators to verify if data from a state store is already expired or not. It might be better to push this responsibility into the stores though.
It's especially an issue for stream-stream joins, because the operator relies on the retention time to implement it's grace period.