Fix on_commit jobs in sync mode - #137
Conversation
Co-authored-by: Eduard Carreras <ecarreras@gisce.net>
Python oorq redis 3 2.7 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq redis 5 3.11 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq valkey 8 3.11 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq redis 7 3.11 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq redis 7 2.7 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq valkey 8 2.7 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq redis 3 3.11 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Python oorq redis 5 2.7 Tests for test_oorq 2 files 2 suites 39s ⏱️ Results for commit b9fc3b3. |
Resumen
on_commit=Truetambién cuandoOORQ_ASYNC=False.commit()y sí después.Contexto
Con
OORQ_ASYNC=False,Queue(..., is_async=False).enqueue(...)ejecuta el job inmediatamente. Hasta ahora@job(on_commit=True)solo difería el enqueue siasync_modeera true, así que el modo síncrono ignoraba la semántica transaccional.La solución reutiliza el mecanismo existente de
ProcessJobsconectado aDB_CURSOR_COMMIT/ROLLBACK: sion_commit=True, el job se registra siempre y se encola en el commit. En modo síncrono, RQ lo ejecuta entonces, no antes.Validación
TestOORQSyncOnCommit.test_write_sync_on_commit_waits_for_commitfallaba porque elreadprevio alcommit()ya veíaactive=True.destral -m test_oorq -t test_oorq.TestOORQSyncOnCommit.test_write_sync_on_commit_waits_for_commit -d test_7cd760f88b45457c8344eb3c95106970 --no-dropdb --no-requirementspython -m py_compile oorq/decorators.py oorq/tests/test_oorq/tests/test_oorq.pyen Python 2.7 y Python 3.11.git diff --check.Nota: la suite completa local
destral -m test_oorqqueda afectada por flakiness/estado local de workers Redis en tests preexistentes (split_jobyTaskManager). No he cambiado esos caminos en esta PR.Relacionado