[FLINK-13469][state] Ensure resource used by StateMapSnapshot will be released if snapshot fails #9301
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What is the purpose of the change
Currently, resource used by
StateMapSnapshot
may not be released byStateTableSnapshot
if snapshot fails. For example, If exception happens inStateMapSnapshot#writeState
, resources used by current and leftStateMapSnapshot
can not be released. This PR will fix this problem.Brief change log
StateTableSnapshot#release()
CopyOnWriteStateTableSnapshot
will check whether the resource is released for eachCopyOnWriteStateMapSnapshot
inCopyOnWriteStateTableSnapshot#release()
, and release them if notNestedMapsStateTableSnapshot
need do nothing inNestedMapsStateTableSnapshot#release()
. On the one hand, nested snapshot is synchronous, and doesn't hold all state map snapshots which will be used in async part like copy-on-write snapshot. State map snapshot for a key-group will not be created until it's turn to write state of this key group, so there is no resource to need to release except for current state map snapshot. On the other hand, nested state map snapshot actually hold no resource. SoNestedMapsStateTableSnapshot
need do nothing for release.AbstractStateTableSnapshot#release()
. The reasons are as follows:Verifying this change
This change added tests and can be verified as follows:
CopyOnWriteStateTableTest#testReleaseForSuccessfulSnapshot
andCopyOnWriteStateTableTest#testReleaseForFailedSnapshot
to validates that resources can be released no matter snapshot is successful or failedDoes this pull request potentially affect one of the following parts:
@Public(Evolving)
: noDocumentation