[ https://issues.apache.org/jira/browse/FLINK-18748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17167598#comment-17167598 ]
Congxian Qiu(klion26) commented on FLINK-18748: ----------------------------------------------- Hi [~roman_khachatryan] thanks for your reply. If {{pendingCheckpointsSizeSupplier.get() >= maxConcurrentCheckpointAttempts}} , then we would not do step 2, but if {{pendingCheckpointSizeSupplier.get() < maxConcurrentCheckpointAttempts}} we'll skip case 2, just check the min pause time in case 3. but in this case, I think the savepoint should be triggered. If we have {{maxConcurrentCheckpointAttempts}} == 1, and now there is no ongoing checkpoint/savepoint. the user triggers a savepoint, then we will skip case 2 in the description. in case 3 we just check the min pause time, so we'll wait some time. > Savepoint would be queued unexpected if pendingCheckpoints less than > maxConcurrentCheckpoints > --------------------------------------------------------------------------------------------- > > Key: FLINK-18748 > URL: https://issues.apache.org/jira/browse/FLINK-18748 > Project: Flink > Issue Type: Bug > Components: Runtime / Checkpointing > Affects Versions: 1.11.0, 1.11.1 > Reporter: Congxian Qiu(klion26) > Priority: Major > > Inspired by a [user-zh > email|http://apache-flink.147419.n8.nabble.com/flink-1-11-rest-api-saveppoint-td5497.html] > After FLINK-17342, when triggering a checkpoint/savepoint, we'll check > whether the request can be triggered in > {{CheckpointRequestDecider#chooseRequestToExecute}}, the logic is as follow: > {code:java} > Preconditions.checkState(Thread.holdsLock(lock)); > // 1. > if (isTriggering || queuedRequests.isEmpty()) { > return Optional.empty(); > } > // 2 too many ongoing checkpoitn/savepoint > if (pendingCheckpointsSizeSupplier.get() >= maxConcurrentCheckpointAttempts) { > return Optional.of(queuedRequests.first()) > .filter(CheckpointTriggerRequest::isForce) > .map(unused -> queuedRequests.pollFirst()); > } > // 3 check the timestamp of last complete checkpoint > long nextTriggerDelayMillis = nextTriggerDelayMillis(lastCompletionMs); > if (nextTriggerDelayMillis > 0) { > return onTooEarly(nextTriggerDelayMillis); > } > return Optional.of(queuedRequests.pollFirst()); > {code} > But if currently {{pendingCheckpointsSizeSupplier.get()}} < > {{maxConcurrentCheckpointAttempts}}, and the request is a savepoint, the > savepoint will still wait some time in step 3. > I think we should trigger the savepoint immediately if > {{pendingCheckpointSizeSupplier.get()}} < {{maxConcurrentCheckpointAttempts}}. -- This message was sent by Atlassian Jira (v8.3.4#803005)