Bug 34678: Allow new entries to overwrite hold_fill_targets
When using background jobs, there is a possibility of a race condition where two jobs will be updating the holds queue for the same biblio. We should try to minimize those cases (see bug 34596) In the meantime though, we should prevent jobs possibly dying, and allow the most recent update to succeed. There is a possibility two updates wil assign different items to the same reserve, and that a reserve could end up in the queue twice, however, whichever one is filled first will delete both entries. as filling the hold deletes by reserve id (see bug 24359) This patch adds a transaction to delete and then inset the new row To test: 1 - prove -v t/db_dependent/Reserves.t 2 - It fails 3 - Apply patch 4 - t/db_dependent/Reserves.t 5 - It succeeds! Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> (cherry picked from commitbbeab36789
) Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> (cherry picked from commita65964c35b
) Signed-off-by: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com>
This commit is contained in:
parent
22c8353ffa
commit
55db32c6bd
1 changed files with 13 additions and 6 deletions
|
@ -789,17 +789,24 @@ sub AddToHoldTargetMap {
|
|||
my $item_map = shift;
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $schema = Koha::Database->new->schema;
|
||||
|
||||
my $insert_sql = q(
|
||||
INSERT INTO hold_fill_targets (borrowernumber, biblionumber, itemnumber, source_branchcode, item_level_request, reserve_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
INSERT INTO hold_fill_targets (borrowernumber, biblionumber, itemnumber, source_branchcode, item_level_request, reserve_id) VALUES (?, ?, ?, ?, ?, ?)
|
||||
);
|
||||
my $sth_insert = $dbh->prepare($insert_sql);
|
||||
|
||||
foreach my $itemnumber (keys %$item_map) {
|
||||
foreach my $itemnumber ( keys %$item_map ) {
|
||||
my $mapped_item = $item_map->{$itemnumber};
|
||||
$sth_insert->execute($mapped_item->{borrowernumber}, $mapped_item->{biblionumber}, $itemnumber,
|
||||
$mapped_item->{holdingbranch}, $mapped_item->{item_level}, $mapped_item->{reserve_id});
|
||||
$schema->txn_do(
|
||||
sub {
|
||||
$dbh->do( 'DELETE FROM hold_fill_targets WHERE itemnumber = ?', {}, $itemnumber );
|
||||
$sth_insert->execute(
|
||||
$mapped_item->{borrowernumber}, $mapped_item->{biblionumber}, $itemnumber,
|
||||
$mapped_item->{holdingbranch}, $mapped_item->{item_level}, $mapped_item->{reserve_id}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue