Skip to content

[FLINK-40524][network] Skip the recoveredBuffers monitor on the getNextBuffer hot path for channels that never recover - #29058

Open
1996fanrui wants to merge 1 commit into
apache:masterfrom
1996fanrui:FLINK-40524
Open

[FLINK-40524][network] Skip the recoveredBuffers monitor on the getNextBuffer hot path for channels that never recover#29058
1996fanrui wants to merge 1 commit into
apache:masterfrom
1996fanrui:FLINK-40524

Conversation

@1996fanrui

Copy link
Copy Markdown
Member

What is the purpose of the change

LocalInputChannel.getNextBuffer() always entered synchronized (recoveredBuffers) to check recovery
state, even for channels that never needed recovery (where inRecovery is always false and
recoveredBuffers always empty, so the block is dead). needsRecovery is a final field, so gating the
recovery block on it lets steady-state non-recovery channels skip the monitor on the hot path.

Brief change log

  • [FLINK-40524] Wrap the recovery block in LocalInputChannel#getNextBuffer in an if (needsRecovery) gate so channels that never recover skip the recoveredBuffers monitor.

Verifying this change

This change is a trivial rework / code cleanup without any test coverage. Behavior is identical when
needsRecovery is true; the only change is the added gate (the wrapped block is reindented accordingly).

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): no
  • The public API, i.e., is any changed class annotated with @Public(Evolving): no
  • The serializers: no
  • The runtime per-record code paths (performance sensitive): yes (removes a lock acquisition on the getNextBuffer hot path)
  • Anything that affects deployment or recovery: no
  • The S3 file system connector: no

Documentation

  • Does this pull request introduce a new feature? no
  • If yes, how is the feature documented? not applicable

Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

…xtBuffer hot path for channels that never recover
@flinkbot

flinkbot commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

CI report:

Bot commands The @flinkbot bot supports the following commands:
  • @flinkbot run azure re-run the last Azure build

inRecovery = this.inRecovery;
if (inRecovery && !hasPendingPriorityEvent && !recoveredBuffers.isEmpty()) {
recoveredBuf = recoveredBuffers.poll();
if (needsRecovery) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI: just wrap inRecovery with if (needsRecovery) {

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants