Skip to content

Commit 2e08cf7

Browse files
author
Peter Dolak
committed
Fix AsynchronousTransport sometimes loosing messages
Events/updates that were added while the lock was released (while sending a request) were lost. Test not included as AsynchronousTransport is about to be deprecated.
1 parent 903ff5f commit 2e08cf7

1 file changed

Lines changed: 4 additions & 5 deletions

File tree

infinario.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ def run(self):
207207
data.cv.release()
208208

209209
def _send_bulk(self):
210-
indices = range(len(data.buffer))
211-
message = {'commands': data.buffer[:ASYNC_BUFFER_MAX_SIZE]}
210+
selected = data.buffer[:ASYNC_BUFFER_MAX_SIZE]
211+
message = {'commands': selected}
212212

213213
data.cv.release()
214214

@@ -217,8 +217,7 @@ def _send_bulk(self):
217217

218218
data.cv.acquire()
219219

220-
for i in indices:
221-
command = data.buffer[i]
220+
for i, command in enumerate(selected):
222221
status = results[i].get('status', 'missing') if i < len(results) else 'retry'
223222

224223
if status == 'ok':
@@ -233,7 +232,7 @@ def _send_bulk(self):
233232
for message in errors:
234233
data.errors.handle(message, ServiceUnavailable) # die after the first exception
235234

236-
data.buffer = leftovers
235+
data.buffer = leftovers + data.buffer[ASYNC_BUFFER_MAX_SIZE:]
237236

238237
Worker().start()
239238
self._worker_running = True

0 commit comments

Comments
 (0)