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 * 60Cuando 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: 
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?
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).