Bugzilla – Attachment 132196 Details for
Bug 30172
Background jobs failing due to race condition
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 30172: Prevent race condition when enqueuing a new task
Bug-30172-Prevent-race-condition-when-enqueuing-a-.patch (text/plain), 4.46 KB, created by
Martin Renvoize (ashimema)
on 2022-03-24 17:26:27 UTC
(
hide
)
Description:
Bug 30172: Prevent race condition when enqueuing a new task
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2022-03-24 17:26:27 UTC
Size:
4.46 KB
patch
obsolete
>From 52542429456138830df80443e15469aee180f1a8 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Thu, 24 Feb 2022 10:41:16 +0100 >Subject: [PATCH] Bug 30172: Prevent race condition when enqueuing a new task > >As we are sending the job to the rabbitmq before in the transaction, the >worker can receive the job to process before the transaction committed. > >Signed-off-by: Nick Clemens <nick@bywatersolutions.com> >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > Koha/BackgroundJob.pm | 67 +++++++++---------- > .../prog/en/modules/admin/background_jobs.tt | 2 + > 2 files changed, 33 insertions(+), 36 deletions(-) > >diff --git a/Koha/BackgroundJob.pm b/Koha/BackgroundJob.pm >index b2d61291d0..2bb6f4935d 100644 >--- a/Koha/BackgroundJob.pm >+++ b/Koha/BackgroundJob.pm >@@ -100,44 +100,39 @@ sub enqueue { > > my $borrowernumber = C4::Context->userenv->{number}; # FIXME Handle non GUI calls > my $json_args = encode_json $job_args; >- my $job_id; >- $self->_result->result_source->schema->txn_do( >- sub { >- $self->set( >- { >- status => 'new', >- type => $job_type, >- size => $job_size, >- data => $json_args, >- enqueued_on => dt_from_string, >- borrowernumber => $borrowernumber, >- } >- )->store; >- >- $job_id = $self->id; >- $job_args->{job_id} = $job_id; >- $json_args = encode_json $job_args; >- >- try { >- my $conn = $self->connect; >- # This namespace is wrong, it must be a vhost instead. >- # But to do so it needs to be created on the server => much more work when a new Koha instance is created. >- # Also, here we just want the Koha instance's name, but it's not in the config... >- # Picking a random id (memcached_namespace) from the config >- my $namespace = C4::Context->config('memcached_namespace'); >- $conn->send_with_receipt( { destination => sprintf("/queue/%s-%s", $namespace, $job_type), body => $json_args } ) >- or Koha::Exception->throw('Job has not been enqueued'); >- } catch { >- if ( ref($_) eq 'Koha::Exception' ) { >- $_->rethrow; >- } else { >- warn sprintf "The job has not been sent to the message broker: (%s)", $_; >- } >- }; >+ $self->set( >+ { >+ status => 'new', >+ type => $job_type, >+ size => $job_size, >+ data => $json_args, >+ enqueued_on => dt_from_string, >+ borrowernumber => $borrowernumber, > } >- ); >+ )->store; >+ >+ $job_args->{job_id} = $self->id; >+ $json_args = encode_json $job_args; >+ >+ try { >+ my $conn = $self->connect; >+ # This namespace is wrong, it must be a vhost instead. >+ # But to do so it needs to be created on the server => much more work when a new Koha instance is created. >+ # Also, here we just want the Koha instance's name, but it's not in the config... >+ # Picking a random id (memcached_namespace) from the config >+ my $namespace = C4::Context->config('memcached_namespace'); >+ $conn->send_with_receipt( { destination => sprintf("/queue/%s-%s", $namespace, $job_type), body => $json_args } ) >+ or Koha::Exceptions::Exception->throw('Job has not been enqueued'); >+ } catch { >+ $self->status('failed')->store; >+ if ( ref($_) eq 'Koha::Exceptions::Exception' ) { >+ $_->rethrow; >+ } else { >+ warn sprintf "The job has not been sent to the message broker: (%s)", $_; >+ } >+ }; > >- return $job_id; >+ return $self->id; > } > > =head3 process >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/background_jobs.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/background_jobs.tt >index f73e9222ae..861325d7ac 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/background_jobs.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/background_jobs.tt >@@ -15,6 +15,8 @@ > Started > [% CASE "running" %] > Running >+ [% CASE "failed" %] >+ Failed > [% CASE # Default case %] > [% job.status | html %] > [% END -%] >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 30172
:
131060
|
131061
|
132023
|
132140
|
132141
|
132176
|
132177
|
132181
|
132182
|
132196
|
132197
|
132241
|
132242