Bug 34470: Initialize random seed after spawning a child worker process
authorEmily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Wed, 9 Aug 2023 16:29:35 +0000 (12:29 -0400)
committerPedro Amorim <pedro.amorim@ptfs-europe.com>
Fri, 18 Aug 2023 13:31:45 +0000 (13:31 +0000)
commit6c83ba326ffca250220f65f41f2c90a5c29ac79a
tree9a848015ec0d2c14ba2899731c764a73b068fe54
parent04e8a6e8def1171f3451efcb626ed856be9d77de
Bug 34470: Initialize random seed after spawning a child worker process

When background_jobs_worker.pl spawns a new child process, it needs to
explicitly reinitialize the random seed - otherwise each child process
will inherit the same random seed from the parent process, and any
randomization will produce identical results each time.

This patch adds a call to srand immediately after the fork to
reinitialize the seed. Note that child processes should not call
srand with no parameter anywhere else, as the Perl documentation
indicates that srand should not be called with no parameter more than
once per process.

To test:
1. Apply the logging patch only
2. Set system preferences:
    a. RealTimeHoldsQueue -> Enable
    b. RandomizeHoldsQueueWeight -> in random order
3. Watch the logs for the staff interface
   in ktd:
   ktd --shell
   koha-intra-err
4. Place a hold. Note that the logs display the branch list before and
   after it is randomized.
5. Place some more holds. Note that the branch order after randomization
   is identical each time.
6. Apply both patches and restart_all
7. Repeat steps 3-5.
   -> Note that the branch order before randomization hasn't changed
   -> Note that the branch order after randomization is now different
      each time.

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit a3c64f62c0dca2acf7d7558281e006ef41286771)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit 1155af8e80434f7793d0111b058dd20ac9c5aef8)
Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com>
misc/workers/background_jobs_worker.pl