From 98bd76b486105edc651c12c486709a5a07282406 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 26 Oct 2021 13:54:15 -0300 Subject: [PATCH] Bug 29325: Fix commit_file.pl This patch fixes the broken commit_file.pl script. It doesn't deal with commiting the import from the UI. To test: 1. Pick a file for staging: $ kshell k$ misc/stage_file.pl --file TestDataImportKoha.mrc => SUCCESS: All good 2. Commit! k$ misc/commit_file.pl --batch-number 1 => FAIL: You see DBIx::Class::Storage::DBI::_exec_txn_begin(): DBI Exception: DBD::mysql::db begin_work failed: Already in a transaction at /kohadevbox/koha/C4/Biblio.pm line 303 3. Apply this patch 4. Repeat 2 => SUCCESS: Commit succeeds 5. Sign off :-D Signed-off-by: Martin Renvoize --- C4/ImportBatch.pm | 12 +++++++++++- misc/commit_file.pl | 11 ++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/C4/ImportBatch.pm b/C4/ImportBatch.pm index 6ae148d6d2..376ce08d94 100644 --- a/C4/ImportBatch.pm +++ b/C4/ImportBatch.pm @@ -569,6 +569,8 @@ sub BatchCommitRecords { my $batch_id = shift; my $framework = shift; + my $schema = Koha::Database->schema; + # optional callback to monitor status # of job my $progress_interval = 0; @@ -609,9 +611,17 @@ sub BatchCommitRecords { my $rec_num = 0; while (my $rowref = $sth->fetchrow_hashref) { $record_type = $rowref->{'record_type'}; + + # first record, begin transaction + $schema->txn_begin + unless $rec_num; + $rec_num++; + if ($progress_interval and (0 == ($rec_num % $progress_interval))) { - &$progress_callback($rec_num); + # report progress and commit + &$progress_callback($rec_num, $schema); + $schema->txn_begin; } if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'imported') { $num_ignored++; diff --git a/misc/commit_file.pl b/misc/commit_file.pl index 543d7b06c7..a757637b6d 100755 --- a/misc/commit_file.pl +++ b/misc/commit_file.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -use strict; -use warnings; +use Modern::Perl; + BEGIN { # find Koha's Perl modules # test carefully before changing this @@ -45,8 +45,6 @@ if ($list_batches) { # in future, probably should tie to a real user account C4::Context->set_userenv(0, 'batch', 0, 'batch', 'batch', 'batch', 'batch'); -my $dbh = C4::Context->dbh; -$dbh->{AutoCommit} = 0; if ($batch_number =~ /^\d+$/ and $batch_number > 0) { my $batch = GetImportBatch($batch_number); die "$0: import batch $batch_number does not exist in database\n" unless defined $batch; @@ -59,7 +57,6 @@ if ($batch_number =~ /^\d+$/ and $batch_number > 0) { unless $batch->{'import_status'} eq "staged" or $batch->{'import_status'} eq "reverted"; process_batch($batch_number); } - $dbh->commit(); } else { die "$0: please specify a numeric batch ID\n"; } @@ -130,9 +127,9 @@ _SUMMARY_ sub print_progress_and_commit { - my $recs = shift; + my ( $recs, $schema ) = @_; print "... processed $recs records\n"; - $dbh->commit(); + $schema->txn_commit; } sub print_usage { -- 2.20.1