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: