Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

201
Vistas
Los trabajos únicos de Sidekiq con lock_expiration no funcionan según lo previsto

Tengo un problema con los trabajos únicos lock_expiration y sidekiq.

 gem 'sidekiq', '4.2.10' gem 'sidekiq-cron', '1.2.0' gem 'sidekiq-unique-jobs', '6.0.25'

Con las opciones de sidekiq de:

 sidekiq_options queue: :medium, retry: 3, lock: :until_executed, lock_expiration: 120 * 60

Cuando se ha ejecutado este trabajador:

 [1] pry(main)> HardWorker.perform_async => 53b93f122fddbb2ebd350332267484ea

El trabajo se completa porque la ejecución es un método vacío. El bloqueo sucede, es decir, veo esto en redis: Claves redis

Si la clave DISPONIBLE todavía existe en redis, es decir, antes de que expire el TTL de 5 segundos. Puedo poner en cola otro trabajo y continuar haciéndolo mientras actualice ese TTL y esa clave exista. Sin embargo, después de 5 segundos y esa clave caduca, no puedo poner en cola otro trabajo hasta que la clave EXISTE caduca.

Espero poder poner en cola otro trabajo después de que hayan pasado 5 segundos. Estoy bastante seguro de que la clave EXISTS debe eliminarse después de que el trabajo se complete correctamente. Pero esto no sucede. El trabajo se puede poner en cola, pero solo dentro del TTL de la clave DISPONIBLE.

Estoy en el proceso de actualizar sidekiq desde una versión muy antigua. Esto es todo lo que puedo hacer sin actualizar otras partes importantes del sistema.

Mi pregunta es, ¿es este el comportamiento previsto? Basado en la actualización que hemos hecho y la sustitución de los atributos de configuración. Debería funcionar como funcionaba antes. Es decir, poder poner en cola un trabajo después de completar el trabajo actual.

Suponiendo que esto sea un error o un comportamiento previsto. ¿Cómo puedo obtener este comportamiento?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Creo que su comprensión es correcta, y el bloqueo debería borrarse tan pronto como se haya llamado al método de perform del trabajador (según la semántica descrita para la estrategia until_executed en los documentos). Si eso no sucede, es posible que se encuentre con un error.

Sin embargo, la versión 6.x de sidekiq-unique-jobs es descrita por su autor como "the worst mistake I ever made as a software engineer" ( https://github.com/mhenrixon/sidekiq-unique-jobs/issues/553 #issuecomment-732719189 ) y "not stable" ( https://github.com/mhenrixon/sidekiq-unique-jobs/issues/553#issuecomment-733151792 ). Recomendaría actualizar al menos a 7.x antes de tirar más de tu cabello tratando de resolver este problema.

(Alternativamente, si es una opción, Sidekiq Enterprise viene con soporte de trabajos único que ha demostrado ser efectivamente a prueba de balas en mi experiencia).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda