Skip to content

Commit 39c6b7c

Browse files
authored
Fixed race-condition for streambroker. (#126)
Signed-off-by: Pavel Kirilin <s3riussan@gmail.com>
1 parent da1271d commit 39c6b7c

1 file changed

Lines changed: 24 additions & 21 deletions

File tree

taskiq_redis/redis_broker.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -295,28 +295,31 @@ async def listen(self) -> AsyncGenerator[AckableMessage, None]:
295295
)
296296
logger.debug("Starting fetching unacknowledged messages")
297297
for stream in [self.queue_name, *self.additional_streams.keys()]:
298-
lock = redis_conn.lock(
298+
pipe = redis_conn.pipeline()
299+
lock = pipe.lock(
299300
f"autoclaim:{self.consumer_group_name}:{stream}",
300301
timeout=self.unacknowledged_lock_timeout,
301302
)
302-
if await lock.locked():
303-
continue
304-
async with lock:
305-
pending = await redis_conn.xautoclaim(
306-
name=stream,
307-
groupname=self.consumer_group_name,
308-
consumername=self.consumer_name,
309-
min_idle_time=self.idle_timeout,
310-
count=self.unacknowledged_batch_size,
311-
)
312-
logger.debug(
313-
"Found %d pending messages in stream %s",
314-
len(pending[1]),
315-
stream,
303+
await lock.acquire()
304+
await pipe.xautoclaim(
305+
name=stream,
306+
groupname=self.consumer_group_name,
307+
consumername=self.consumer_name,
308+
min_idle_time=self.idle_timeout,
309+
count=self.unacknowledged_batch_size,
310+
)
311+
await lock.release()
312+
results = await pipe.execute()
313+
pending = results[1]
314+
315+
logger.debug(
316+
"Found %d pending messages in stream %s",
317+
len(pending[1]),
318+
stream,
319+
)
320+
for msg_id, msg in pending[1]:
321+
logger.debug("Received message: %s", msg)
322+
yield AckableMessage(
323+
data=msg[b"data"],
324+
ack=self._ack_generator(id=msg_id, queue_name=stream),
316325
)
317-
for msg_id, msg in pending[1]:
318-
logger.debug("Received message: %s", msg)
319-
yield AckableMessage(
320-
data=msg[b"data"],
321-
ack=self._ack_generator(id=msg_id, queue_name=stream),
322-
)

0 commit comments

Comments
 (0)