Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
Description
Right now, the state that a WindowFunction or ProcessWindowFunction can access is scoped to the key of the window but not the window itself. That is, state is global across all windows for a given key.
For some use cases it is beneficial to keep state scoped to a window. For example, if you expect to have several Trigger firings (due to early and late firings) a user can keep state per window to keep some information between those firings.
The per-window state has to be cleaned up in some way. For this I see two options:
- Keep track of all state that a user uses and clean up when we reach the window GC horizon.
- Add a method cleanup() to ProcessWindowFunction which is called when we reach the window GC horizon that users can/should use to clean up their state.
On the API side, we can add a method windowState() on ProcessWindowFunction.Context that retrieves the per-window state and globalState() that would allow access to the (already available) global state. The Context would then look like this:
/** * The context holding window metadata */ public abstract class Context { /** * @return The window that is being evaluated. */ public abstract W window(); /** * State accessor for per-key and per-window state. */ KeyedStateStore windowState(); /** * State accessor for per-key global state. */ KeyedStateStore globalState(); }