Stephan Ewen created FLINK-5590: ----------------------------------- Summary: Create a proper internal state hierarchy Key: FLINK-5590 URL: https://issues.apache.org/jira/browse/FLINK-5590 Project: Flink Issue Type: Improvement Components: State Backends, Checkpointing Affects Versions: 1.2.0 Reporter: Stephan Ewen Assignee: Stephan Ewen Fix For: 1.3.0
Currently, the state interfaces (like {{ListState}}, {{ValueState}}, {{ReducingState}}) are very sparse and contain only methods exposed to the users. That makes sense to keep the public stable API minimal At the same time, the runtime needs more methods for its internal interaction with state, such as: - setting namespaces - accessing raw values - merging namespaces These are currently realized by re-creating or re-obtaining the state objects from the KeyedStateBackend. That method causes quite an overhead for each access to the state The KeyedStateBackend tries to do some tricks to reduce that overhead, but does it only partially and induces other overhead in the course. The root cause of all these issues is a problem in the design: There is no proper "internal state abstraction" in a similar way as there is an external state abstraction (the public state API). We should add a similar hierarchy of states for the internal methods. It would look like in the example below: {code} * State * | * +-------------------InternalKvState * | | * MergingState | * | | * +-----------------InternalMergingState * | | * +--------+------+ | * | | | * ReducingState ListState +-----+-----------------+ * | | | | * +-----------+ +----------- -----------------InternalListState * | | * +---------InternalReducingState {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)