fix(worker): preserve micro-batches across DLQ records
This commit is contained in:
@@ -96,10 +96,30 @@ class DeliverySafetyTests(unittest.TestCase):
|
||||
def test_invalid_record_cannot_commit_past_buffered_valid_record(self):
|
||||
self.worker.process_single_message(Message(payload(), offset=0))
|
||||
self.worker.process_single_message(Message(b"{malformed", offset=1))
|
||||
self.assertEqual(self.events[0], ("insert", 1))
|
||||
# Micro-batching preserved: invalid record does not force premature storage flush
|
||||
self.assertEqual([e for e in self.events if e[0] == "insert"], [])
|
||||
self.assertEqual(self.consumer.commits, [])
|
||||
self.assertEqual(len(self.worker.buffer), 1)
|
||||
# Flush commits both valid and completed DLQ offsets
|
||||
self.worker.flush_buffer()
|
||||
self.assertEqual([e for e in self.events if e[0] == "insert"], [("insert", 1)])
|
||||
self.assertEqual(self.consumer.commits[-1], {("cdr.raw", 0): 2})
|
||||
self.assertEqual(len(self.worker.buffer), 0)
|
||||
|
||||
def test_alternating_valid_and_invalid_records_preserves_microbatching(self):
|
||||
self.worker.process_single_message(Message(payload(raw_id="r1"), offset=0))
|
||||
self.worker.process_single_message(Message(b"{bad1", offset=1))
|
||||
self.worker.process_single_message(Message(payload(raw_id="r2"), offset=2))
|
||||
self.worker.process_single_message(Message(b"{bad2", offset=3))
|
||||
self.worker.process_single_message(Message(payload(raw_id="r3"), offset=4))
|
||||
# Verify no inserts occurred yet:
|
||||
self.assertEqual([e for e in self.events if e[0] == "insert"], [])
|
||||
self.assertEqual(len(self.worker.buffer), 3)
|
||||
# Explicit flush should insert all 3 valid records in a single batch
|
||||
self.worker.flush_buffer()
|
||||
self.assertEqual([e for e in self.events if e[0] == "insert"], [("insert", 3)])
|
||||
self.assertEqual(self.consumer.commits[-1], {("cdr.raw", 0): 5})
|
||||
|
||||
def test_batch_commits_only_its_explicit_partition_offsets(self):
|
||||
self.worker.process_single_message(Message(payload(), offset=4, partition=0))
|
||||
self.worker.process_single_message(Message(payload(raw_id="second"), offset=9, partition=1))
|
||||
|
||||
Reference in New Issue
Block a user