[Koha-bugs] [Bug 33287] New: Race condition in Koha::BackgroundJob?
bugzilla-daemon at bugs.koha-community.org
bugzilla-daemon at bugs.koha-community.org
Mon Mar 20 21:19:23 CET 2023
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=33287
Bug ID: 33287
Summary: Race condition in Koha::BackgroundJob?
Change sponsored?: ---
Product: Koha
Version: 22.11
Hardware: All
OS: All
Status: NEW
Severity: major
Priority: P3
Component: Architecture, internals, and plumbing
Assignee: koha-bugs at lists.koha-community.org
Reporter: januszop at gmail.com
QA Contact: testopia at bugs.koha-community.org
With 22.11.03, I am experiencing the following: with ES indexing on, some
record, sometimes, are not being indexed. A long time after record insertion I
can still find respective entries in Administration > Manage jobs, and also
background_jobs entries with status ‘new’, background_jobs.enqueued_on equal to
respective action_logs.timestamp entry, background_jobs.started_on ==
background_jobs.ended_on == NULL. At the same time, in worker-output.log there
is a line like:
[2023/03/20 17:18:10] [WARN] No job found for id=13218 main::
/usr/share/koha/bin/background_jobs_worker.pl (114)
What is worth noting, the timestamp from worker-output.log is identical with
those of action_logs.timestamp and background_jobs.enqueued_on.
Closer inspection of rabbitmq shows that the queue is empty.
I wonder if the following scenario could be true:
1. in Koha::BackgroundJob::enqueue, the job description is being stored in DB
and the job is enqueued, i.e. sent to rabbitmq
2. the worker process immediately reads the queue element from rabbitmq,
getting the job_id as a part of the answer ($args->{job_id})
3. as a consequence, the worker tries to get the job from DB with
Koha::BackgroundJobs->find($args->{job_id}), but the DBIx at this very moment
Koha::BackgroundJobs does not answer with a job object, because 'store' story
has not finished yet (?)
4. as a result, the worker generates the warning "No job found for id=n"
5. unfortunately, the element has already been read from the queue and the
worker will never return to it
When I than imitate the worker function with my own script, looking for the
unfulfilled background jobs, I get the job objects from Koha::BackgroundJobs
and I can successfully call
$args = $job->json->decode($job->data);
and
$job->process( $args );
If p. 3 was true, then we would have a race condition here. Or maybe there is
another explanation for this behavior...?
I wonder if anybody is experiencing same problem.
--
You are receiving this mail because:
You are watching all bug changes.
You are the assignee for the bug.
More information about the Koha-bugs
mailing list