apache / apache/pulsar-client-cpp
[Bug] [ARM] Partially acknowledged batches are not redelivered
- Ngôn ngữ chính
- C++
- Star
- 71
- Fork
- 90
- Merge trung bình
- 2 giờ 33 phút
- Pull request đã merge (30 ngày)
- 3
Mô tả
### Search before asking
- [X] I searched in the [issues](https://github.com/apache/pulsar-client-cpp/issues) and found nothing similar.
### Version
Debian GNU/Linux 10 (buster), aarch64 (but the executable is arm32), pulsar-client-cpp 3.3.0
### Minimal reproduce step
1. Send a batch of events to the Pulsar broker (in our reproduction, it is a batch size of 309).
2. Receive these messages (we're using `pulsar::Consumer::receive` in a loop), while continuously acknowledging them asynchronously (acknowledgements are done using `pulsar::Consumer::acknowledge(const MessageId &messageId)`, where `messageId` is `pulsar::Message::getMessageId`).
3. Terminate the program during the middle of receiving a batch (we're terminating after having received and acknowledged the 190/309 events from a batch).
4. Resume the program.
### What did you expect to see?
All of the events in the batch re-sent.
### What did you see instead?
None of the events in the batch, _including the ones never received_ are re-sent.
### Anything else?
- We log the result of the acknowledgement in the callback method, which shows us that the most we've acknowledged is the `190th` message in a batch.
- Exclusive subscription.
- Running it on Gravitron2/3 processors.
- We've used the same broker and test with an x86_64 Pulsar 3.3.0 Pulsar client, and we've had no issues (RHEL8).
- We can actively see missing messages - we are just sending consecutive numbers and logging them. We're missing exactly 119, the amount remaining in the batch that we've not fully acknowledged.
- We've tried not immediately terminating - i.e. we stop receiving messages but continue to process any callbacks, to validate that we're just not seeing 119 callbacks missing, and nothing.
### Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với vòng lặp Consumer::receive và đường đi không đồng bộ Consumer::acknowledge sử dụng Message::getMessageId, sau đó tái hiện việc gián đoạn batch 309 sự kiện trên cấu hình ARM được mô tả. Được xem là hoàn tất khi, sau khi chỉ acknowledge một phần của batch và khởi động lại, tất cả các sự kiện trong batch, bao gồm cả phần còn lại chưa được nhận, được phân phối lại.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- cpp
- Lĩnh vực
- distributed-systems
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100