Skip to content

feat: end to end wiring for per message nack#365

Open
ayildirim21 wants to merge 7 commits into
numaproj:mainfrom
ayildirim21:per-msg-nack
Open

feat: end to end wiring for per message nack#365
ayildirim21 wants to merge 7 commits into
numaproj:mainfrom
ayildirim21:per-msg-nack

Conversation

@ayildirim21

@ayildirim21 ayildirim21 commented Jul 1, 2026

Copy link
Copy Markdown
Member

Closes #348

Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
@ayildirim21 ayildirim21 marked this pull request as draft July 1, 2026 15:52
Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
@codecov

codecov Bot commented Jul 1, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.94%. Comparing base (221e1b4) to head (60abc18).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #365      +/-   ##
==========================================
+ Coverage   92.74%   92.94%   +0.20%     
==========================================
  Files          67       68       +1     
  Lines        3540     3630      +90     
  Branches      232      234       +2     
==========================================
+ Hits         3283     3374      +91     
+ Misses        191      190       -1     
  Partials       66       66              

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
Signed-off-by: Abdullah Yildirim <a3hadi@protonmail.com>
@ayildirim21 ayildirim21 marked this pull request as ready for review July 7, 2026 07:06
optional common.NackOptions nack_options = 2;
}
// Required field holding the request. The list will be ordered and will have the same order as the original Read response.
Request request = 1;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is now a repeated request, so we'll now be expecting a vector of nack requests.
This is done so that instead of sending 1 nack option for a vector of offsets in a single Request, we can have a vector of requests where we'll have 1 nack option corresponding to 1 offset (a 1:1 mapping that we'll honor internally).

This is done this way so as to not break backward compatibility (for now).

You can go through the discussion over this decision here

if request.request.HasField("nack_options")
else None
)
await self.__source_nack_handler(NackRequest(offsets=offsets, nack_options=opts))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Due to the proto changes suggested above, we'll need to handle this differently. You can reference the implementation in other SDKs.

Simplest clear reference for this would be the rust SDK implementation here

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.

Per-Message Nack Support for Python SDK

2 participants