Skip to content

Commit

Permalink
fix: batch at most 1,000 ack ids per request
Browse files Browse the repository at this point in the history
  • Loading branch information
beltran committed Oct 8, 2022
1 parent 09a409c commit be73324
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 11 deletions.
10 changes: 1 addition & 9 deletions google/cloud/pubsub_v1/subscriber/_protocol/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,8 @@
"""The maximum amount of time in seconds to wait for additional request items
before processing the next batch of requests."""

_ACK_IDS_BATCH_SIZE = 2500
_ACK_IDS_BATCH_SIZE = 1000
"""The maximum number of ACK IDs to send in a single StreamingPullRequest.
The backend imposes a maximum request size limit of 524288 bytes (512 KiB) per
acknowledge / modifyAckDeadline request. ACK IDs have a maximum size of 164
bytes, thus we cannot send more than o 524288/176 ~= 2979 ACK IDs in a single
StreamingPullRequest message.
Accounting for some overhead, we should thus only send a maximum of 2500 ACK
IDs at a time.
"""


Expand Down
4 changes: 2 additions & 2 deletions tests/unit/pubsub_v1/subscriber/test_dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def test_ack_splitting_large_payload():
dispatcher_.ack(items)

calls = manager.send.call_args_list
assert len(calls) == 3
assert len(calls) == 6

all_ack_ids = {item.ack_id for item in items}
sent_ack_ids = collections.Counter()
Expand Down Expand Up @@ -231,7 +231,7 @@ def test_modify_ack_deadline_splitting_large_payload():
dispatcher_.modify_ack_deadline(items)

calls = manager.send.call_args_list
assert len(calls) == 3
assert len(calls) == 6

all_ack_ids = {item.ack_id for item in items}
sent_ack_ids = collections.Counter()
Expand Down

0 comments on commit be73324

Please sign in to comment.