]> git.koha-community.org Git - koha.git/commit
Bug 32393: Prevent invalid job to block the job queue
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 2 Dec 2022 13:23:38 +0000 (14:23 +0100)
committerMatt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
Tue, 31 Jan 2023 14:11:10 +0000 (14:11 +0000)
commit639917bfb373c1d3433c51b47c013f28b93b7ee9
treee199fc31d3ed4bb3bca895d602567c0f03a28515
parent0f7b8008f7f1158f9b5aff9fa8c5b58cff28f000
Bug 32393: Prevent invalid job to block the job queue

I have faced a problem when testing an incorrect version of bug 32370.
The frame sent to the message broker was not a correct JSON encoded
string, and its decoding was obviously failing, exploding the worker
script.
Additionally, as we don't send a ack for this frame, the next pull will
result in processing the same message, and so in the same explosion.
No more messages can be processed!

This patch is logging the error and ack the message to the broker, in
order to not get stuck.

Test plan:
0. Dont' apply this patch
1. Enqueue a bad message
  a. Apply 32370
  b. Comment the following line in Koha::BackgroundJob::enqueue
    $self->set_encoded_json_field( { data => $job_args,    field => 'data' } );
  c. restart_all
  d. Use the batch item modification tool to enqueue a new job
=> Notice the error in the log
=> Note that the status of the job is "new"
=> Inspect rabbitmq queue:
% rabbitmq-plugins enable rabbitmq_management
% rabbitmqadmin get queue=koha_kohadev-long_tasks
You will notice there is a message in the "long_tasks" queue
2. Enqueue a good message
  a. Remove the change from 1.b
  b. restart_all
  c. Enqueue another job
=> Same error in the log
=> Both jobs are new
=> Inspect rabbitmq, there are 2 messages
3. Apply this patch
4. restart_all
=> Second (good) job is finished
=> rabbitmq long_tasks queue is empty

We cannot mark the first job as done, we have no idea which job it was!

QA: Note that this patch is dealing with another problem, not tested in
this test plan. If an exception is not correctly caught by the ->process
method of the job, we won't crash the worker. The job will be marked as
failed.

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit ca9a5981839a444fce109540035f26cac2780611)
Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
misc/background_jobs_worker.pl