Skip to content

Conversation

@joa-adhoc
Copy link
Contributor

No description provided.

Copilot AI review requested due to automatic review settings January 12, 2026 18:53
@roboadhoc
Copy link

Pull request status dashboard

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Este PR mejora la política de ejecución de jobs en background implementando un mecanismo de bloqueo optimista con SELECT FOR UPDATE SKIP LOCKED para permitir que múltiples crons procesen jobs concurrentemente sin conflictos.

Changes:

  • Introduce el método _try_lock_job() que usa bloqueo a nivel de base de datos para adquirir jobs de forma segura
  • Refactoriza _cron_run_enqueued_jobs() para procesar un solo job por ejecución en lugar de múltiples, eliminando la lógica de distribución manual basada en módulo de IDs
  • Implementa auto-disparo recursivo de crons cuando quedan jobs pendientes

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 8 comments.

Comments suppressed due to low confidence (3)

base_bg/tests/test_bg_job.py:199

  • Este test está roto porque la nueva firma de bg_enqueue requiere records como primer argumento posicional, pero aquí se pasa "dummy_priority_method" (el método) como primer argumento. Debe agregarse un recordset antes del método: self.base_bg_model.bg_enqueue(self.env["base.bg"], "dummy_priority_method", ...).
    def test_bg_enqueue_applies_custom_priority(self):
        """bg_enqueue must propagate the provided priority into bg.job."""
        job_name = f"Priority Test Job {uuid4().hex}"
        with patch.object(BaseBg, "_trigger_crons"):
            self.base_bg_model.bg_enqueue(
                "dummy_priority_method",
                name=job_name,
                priority=3,
            )

base_bg/tests/test_bg_job.py:218

  • Igual que el comentario anterior, este test está roto porque falta el argumento records como primer parámetro de bg_enqueue. Debe agregarse un recordset válido.
    def test_bg_enqueue_filters_unserializable_context_entries(self):
        """Only JSON-safe context keys should be stored in bg.job."""
        job_name = f"Context Test Job {uuid4().hex}"
        partner = self.env["res.partner"].create({"name": "Context Partner"})
        base_bg_ctx = self.base_bg_model.with_context(
            serializable_flag="ok",
            unserializable_partner=partner,
            unserializable_env=self.env,
        )
        with patch.object(BaseBg, "_trigger_crons"):
            base_bg_ctx.bg_enqueue(
                "dummy_context_method",
                name=job_name,
            )

base_bg/models/base_bg.py:21

  • El cambio de firma de bg_enqueue(self, method, *args, **kwargs) a bg_enqueue(self, records, method, threshold, *args, **kwargs) es un cambio que rompe la API pública. La forma en que estaba diseñada antes, bg_enqueue usaba self como los registros a procesar. Ahora requiere pasar records explícitamente, lo que rompe todo código existente que llame a este método. Se debería mantener retrocompatibilidad detectando si el primer argumento es un string (método) o un recordset, o documentar claramente este breaking change en las notas de migración.
    def bg_enqueue(self, records, method: str, threshold: int | None = None, *args, **kwargs) -> tuple[dict, "BgJob"]:

@joa-adhoc joa-adhoc force-pushed the 19.0-t-62530-joa branch 6 times, most recently from 6545ffe to 2e4fe0b Compare January 19, 2026 14:53
@joa-adhoc joa-adhoc force-pushed the 19.0-t-62530-joa branch 7 times, most recently from 41ceffe to 462c3d7 Compare January 19, 2026 16:40
@joa-adhoc joa-adhoc force-pushed the 19.0-t-62530-joa branch 4 times, most recently from 5916e9e to b27b65e Compare January 19, 2026 16:59
- Improvement in jobs run policy
- Add batch job processing with threshold-based record splitting
@joa-adhoc
Copy link
Contributor Author

Seguimos en PR #347 v18

@joa-adhoc joa-adhoc closed this Jan 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants