Skip to content

fix(core): Skip circuit breaker for DLQ pipeline buffer - #7185

Merged
graytaylor0 merged 1 commit into
opensearch-project:mainfrom
graytaylor0:DlqPipelineFix
Oct 8, 2026
Merged

graytaylor0 merged 1 commit into
opensearch-project:mainfrom
graytaylor0:DlqPipelineFix

Conversation

@graytaylor0

@graytaylor0 graytaylor0 commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

The DLQ (failure) pipeline uses a HeadlessPipelineSource which writes events to its buffer via sendEvents(). When a circuit breaker is active, the buffer is wrapped with CircuitBreakingBuffer which throws TimeoutException when the breaker is open.

This causes DLQ writes to block indefinitely (with acks enabled) or release with false (without acks), preventing acknowledgements from completing upstream. Since the DLQ pipeline exists specifically to drain failed events, blocking it under memory pressure defeats its purpose and can cascade into negative acknowledgements on the source pipeline's Kafka buffer or end to end acknowledgments with something like S3 or DynamoDB sources.

Skip applying CircuitBreakingBuffer to HeadlessPipelineSource pipelines, matching the existing skip for PipelineConnector sources.

Check List

  • New functionality includes testing.
  • New functionality has a documentation issue. Please link to it in this PR.
    • New functionality has javadoc added
  • Commits are signed with a real name per the DCO

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

The DLQ (failure) pipeline uses a HeadlessPipelineSource which writes
events to its buffer via sendEvents(). When a circuit breaker is active,
the buffer is wrapped with CircuitBreakingBuffer which throws
TimeoutException when the breaker is open.

This causes DLQ writes to block indefinitely (with acks enabled) or
release with false (without acks), preventing acknowledgements from
completing upstream. Since the DLQ pipeline exists specifically to
drain failed events, blocking it under memory pressure defeats its
purpose and can cascade into negative acknowledgements on the source
pipeline's Kafka buffer.

Skip applying CircuitBreakingBuffer to HeadlessPipelineSource pipelines,
matching the existing skip for PipelineConnector sources.

Signed-off-by: Taylor Gray <tylgry@amazon.com>
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

🧪 PR contains tests
🔒 No security concerns identified
✅ No TODO sections
🔀 No multiple PR themes
⚡ No major issues detected

@dlvenable dlvenable left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks @graytaylor0 for this fix!

@graytaylor0
graytaylor0 merged commit 20b00a7 into opensearch-project:main Oct 8, 2026
73 checks passed
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