From 8c10f302465ed56456d5477ac665b5ce17671704 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 Signed-off-by: Nick Clemens --- C4/ImportBatch.pm | 12 +++++++++++- misc/commit_file.pl | 17 ++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/C4/ImportBatch.pm b/C4/ImportBatch.pm index ceb1d97ab1..8f7a5639e4 100644 --- a/C4/ImportBatch.pm +++ b/C4/ImportBatch.pm @@ -571,6 +571,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; @@ -612,9 +614,17 @@ sub BatchCommitRecords { my @biblio_ids; 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 1e1dd3f4fe..a757637b6d 100755 --- a/misc/commit_file.pl +++ b/misc/commit_file.pl @@ -1,7 +1,13 @@ #!/usr/bin/perl -use strict; -use warnings; +use Modern::Perl; + +BEGIN { + # find Koha's Perl modules + # test carefully before changing this + use FindBin (); + eval { require "$FindBin::Bin/kohalib.pl" }; +} use Koha::Script; use C4::Context; @@ -39,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; @@ -53,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"; } @@ -124,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.30.2