You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Tzu-Li (Gordon) Tai (Jira)" <ji...@apache.org> on 2023/08/31 17:40:00 UTC
[jira] [Comment Edited] (FLINK-30238) Unified Sink committer does not clean up state on final savepoint
[ https://issues.apache.org/jira/browse/FLINK-30238?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17761051#comment-17761051 ]
Tzu-Li (Gordon) Tai edited comment on FLINK-30238 at 8/31/23 5:39 PM:
----------------------------------------------------------------------
hi all, I'd like to move this ticket forward and make a call if things are working as expected, or there's an actual bug.
First of all, lets narrow down the scope of this ticket to address only the following :
{{stop-with-savepoint}} stores last CommittableSummary with LONG_MAX checkpoint ID to be persisted in savepoints, which prevents future {{stop-with-savepoint}} to succeed after restore because CommittableSummaries should always have different checkpoint IDs.
The separate issue with post-commit topologies not receiving committed committables can be addressed separately.
Summarizing the facts we have so far:
* If a LONG_MAX checkpoint ID special marker is propagated, it means {{endOfInput}} was called and it is expected behavior that the job will not function properly if restored from the generated savepoint. {{endOfInput}} should only ever be called when 1) reaching bounded end of input, or 2) stop-with-savepoint with the --drain option.
* The reason why the Kafka ITCase referenced by [~fpaul] has {{endOfInput}} being called is because of the setup {{{}advanceTimestamp = true{}}}, which translates equivalently to stop-with-savepoint with --drain.
With the above, can we conclude that:
* {{stop-with-savepoint}} without draining works as expected, such that {{endOfInput}} is not being called and the LONG_MAX CommittableSummary is not being sent and stored as committables state.
* {{stop-with-savepoint}} _with draining_ is also working as expected - jobs restored from these savepoints are not expected to function properly in the first place.
I'm looking to verify that {{stop-with-savepoint}} without draining indeed doesn't call the {{endOfInput}} method - if that's the case, then I think we have a case closed? If that's the case - the only fix we need is to adjust the Kafka ITCase.
In parallel, just wanna jot these thoughts down to see if I'm missing anything obvious cc [~fpaul] [~gaoyunhaii].
was (Author: tzulitai):
hi all, I'd like to move this ticket forward and make a call if things are working as expected, or there's an actual bug.
First of all, lets narrow down the scope of this ticket to address only the following :
{{stop-with-savepoint}} stores last CommittableSummary with LONG_MAX checkpoint ID to be persisted in savepoints, which prevents future {{stop-with-savepoint}} to succeed after restore because CommittableSummaries should always have different checkpoint IDs.
The separate issue with post-commit topologies not receiving committed committables can be addressed separately.
Summarizing the facts we have so far:
* If a LONG_MAX checkpoint ID special marker is propagated, it means {{endOfInput}} was called and it is expected behavior that the job will not function properly if restored from the generated savepoint. {{endOfInput}} should only ever be called when 1) reaching bounded end of input, or 2) stop-with-savepoint with the --drain option.
* The reason why the Kafka ITCase referenced by [~fpaul] has {{endOfInput}} being called is because of the setup {{{}advanceTimestamp = true{}}}, which translates equivalently to stop-with-savepoint with --drain.
With the above, can we conclude that:
* {{stop-with-savepoint}} without draining works as expected, such that {{endOfInput}} is not being called and the LONG_MAX CommittableSummary is not being sent and stored as committables state.
* {{stop-with-savepoint}} _with draining_ is also working as expected - jobs restored from these savepoints are not expected to function properly in the first place.
I'm looking to verify that {{stop-with-savepoint}} without draining indeed doesn't call the {{endOfInput}} method - if that's the case, then I think we have a case closed? In parallel, just wanna jot these thoughts down to see if I'm missing anything obvious cc [~fpaul] [~gaoyunhaii].
> Unified Sink committer does not clean up state on final savepoint
> -----------------------------------------------------------------
>
> Key: FLINK-30238
> URL: https://issues.apache.org/jira/browse/FLINK-30238
> Project: Flink
> Issue Type: Bug
> Components: Connectors / Common
> Affects Versions: 1.17.0, 1.15.3, 1.16.1
> Reporter: Fabian Paul
> Priority: Critical
> Attachments: Screenshot 2023-03-09 at 1.47.11 PM.png, image (8).png
>
>
> During stop-with-savepoint the committer only commits the pending committables on notifyCheckpointComplete.
> This has several downsides.
> * Last committableSummary has checkpoint id LONG.MAX and is never cleared from the state leading to that stop-with-savepoint does not work when the pipeline recovers from a savepoint
> * While the committables are committed during stop-with-savepoint they are not forwarded to post-commit topology, potentially losing data and preventing to close open transactions.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)