Skip to content

Commit 6cb4ed7

Browse files
author
Sergio García Prado
authored
Merge pull request #340 from minos-framework/issue-336-aiokafka-rare-errors
#336 - Fix `AioKafkaConsumer` strange errors
2 parents d67076e + 621d9ed commit 6cb4ed7

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

packages/plugins/minos-broker-kafka/minos/plugins/kafka/subscriber.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from aiokafka import (
2424
AIOKafkaConsumer,
25+
ConsumerStoppedError,
2526
)
2627
from cached_property import (
2728
cached_property,
@@ -166,7 +167,10 @@ def admin_client(self):
166167
return KafkaAdminClient(bootstrap_servers=f"{self.host}:{self.port}")
167168

168169
async def _receive(self) -> BrokerMessage:
169-
record = await self.client.getone()
170+
try:
171+
record = await self.client.getone()
172+
except ConsumerStoppedError:
173+
raise StopAsyncIteration
170174
bytes_ = record.value
171175
message = BrokerMessage.from_avro_bytes(bytes_)
172176
return message

packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from aiokafka import (
1212
AIOKafkaConsumer,
13+
ConsumerStoppedError,
1314
)
1415
from kafka import (
1516
KafkaAdminClient,
@@ -206,6 +207,14 @@ async def test_receive(self):
206207
self.assertEqual(messages[0], await subscriber.receive())
207208
self.assertEqual(messages[1], await subscriber.receive())
208209

210+
async def test_receive_stopped(self):
211+
async with KafkaBrokerSubscriber.from_config(CONFIG_FILE_PATH, topics={"foo", "bar"}) as subscriber:
212+
get_mock = AsyncMock(side_effect=ConsumerStoppedError)
213+
subscriber.client.getone = get_mock
214+
215+
with self.assertRaises(StopAsyncIteration):
216+
await subscriber.receive()
217+
209218

210219
class TestKafkaBrokerSubscriberBuilder(unittest.TestCase):
211220
def setUp(self) -> None:

0 commit comments

Comments
 (0)