View | Details | Raw Unified | Return to bug 29325
Collapse All | Expand All

(-)a/C4/ImportBatch.pm (-1 / +10 lines)
Lines 569-574 sub BatchCommitRecords { Link Here
569
    my $batch_id = shift;
569
    my $batch_id = shift;
570
    my $framework = shift;
570
    my $framework = shift;
571
571
572
    my $schema = Koha::Database->schema;
573
572
    # optional callback to monitor status 
574
    # optional callback to monitor status 
573
    # of job
575
    # of job
574
    my $progress_interval = 0;
576
    my $progress_interval = 0;
Lines 607-617 sub BatchCommitRecords { Link Here
607
    my $logged_in_patron = Koha::Patrons->find( $userenv->{number} );
609
    my $logged_in_patron = Koha::Patrons->find( $userenv->{number} );
608
610
609
    my $rec_num = 0;
611
    my $rec_num = 0;
612
    $schema->txn_begin; # We commit in a transaction
610
    while (my $rowref = $sth->fetchrow_hashref) {
613
    while (my $rowref = $sth->fetchrow_hashref) {
611
        $record_type = $rowref->{'record_type'};
614
        $record_type = $rowref->{'record_type'};
615
612
        $rec_num++;
616
        $rec_num++;
617
613
        if ($progress_interval and (0 == ($rec_num % $progress_interval))) {
618
        if ($progress_interval and (0 == ($rec_num % $progress_interval))) {
614
            &$progress_callback($rec_num);
619
            # report progress and commit
620
            $schema->txn_commit;
621
            &$progress_callback( $rec_num );
622
            $schema->txn_begin;
615
        }
623
        }
616
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'imported') {
624
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'imported') {
617
            $num_ignored++;
625
            $num_ignored++;
Lines 726-731 sub BatchCommitRecords { Link Here
726
            SetImportRecordStatus($rowref->{'import_record_id'}, 'ignored');
734
            SetImportRecordStatus($rowref->{'import_record_id'}, 'ignored');
727
        }
735
        }
728
    }
736
    }
737
    $schema->txn_commit; # Commit final records that may not have hit callback threshold
729
    $sth->finish();
738
    $sth->finish();
730
    SetImportBatchStatus($batch_id, 'imported');
739
    SetImportBatchStatus($batch_id, 'imported');
731
    return ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored);
740
    return ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored);
(-)a/misc/commit_file.pl (-11 / +7 lines)
Lines 1-7 Link Here
1
#!/usr/bin/perl
1
#!/usr/bin/perl
2
2
3
use strict;
3
use Modern::Perl;
4
use warnings;
4
5
BEGIN {
5
BEGIN {
6
    # find Koha's Perl modules
6
    # find Koha's Perl modules
7
    # test carefully before changing this
7
    # test carefully before changing this
Lines 45-52 if ($list_batches) { Link Here
45
# in future, probably should tie to a real user account
45
# in future, probably should tie to a real user account
46
C4::Context->set_userenv(0, 'batch', 0, 'batch', 'batch', 'batch', 'batch');
46
C4::Context->set_userenv(0, 'batch', 0, 'batch', 'batch', 'batch', 'batch');
47
47
48
my $dbh = C4::Context->dbh;
49
$dbh->{AutoCommit} = 0;
50
if ($batch_number =~ /^\d+$/ and $batch_number > 0) {
48
if ($batch_number =~ /^\d+$/ and $batch_number > 0) {
51
    my $batch = GetImportBatch($batch_number);
49
    my $batch = GetImportBatch($batch_number);
52
    die "$0: import batch $batch_number does not exist in database\n" unless defined $batch;
50
    die "$0: import batch $batch_number does not exist in database\n" unless defined $batch;
Lines 59-65 if ($batch_number =~ /^\d+$/ and $batch_number > 0) { Link Here
59
            unless $batch->{'import_status'} eq "staged" or $batch->{'import_status'} eq "reverted";
57
            unless $batch->{'import_status'} eq "staged" or $batch->{'import_status'} eq "reverted";
60
        process_batch($batch_number);
58
        process_batch($batch_number);
61
    }
59
    }
62
    $dbh->commit();
63
} else {
60
} else {
64
    die "$0: please specify a numeric batch ID\n";
61
    die "$0: please specify a numeric batch ID\n";
65
}
62
}
Lines 86-92 sub process_batch { Link Here
86
83
87
    print "... importing MARC records -- please wait\n";
84
    print "... importing MARC records -- please wait\n";
88
    my ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored) =
85
    my ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored) =
89
        BatchCommitRecords($import_batch_id, $framework, 100, \&print_progress_and_commit);
86
        BatchCommitRecords($import_batch_id, $framework, 100, \&print_progress);
90
    print "... finished importing MARC records\n";
87
    print "... finished importing MARC records\n";
91
88
92
    print <<_SUMMARY_;
89
    print <<_SUMMARY_;
Lines 111-117 sub revert_batch { Link Here
111
108
112
    print "... reverting batch -- please wait\n";
109
    print "... reverting batch -- please wait\n";
113
    my ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored) =
110
    my ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored) =
114
        BatchRevertRecords($import_batch_id, 100, \&print_progress_and_commit);
111
        BatchRevertRecords( $import_batch_id );
115
    print "... finished reverting batch\n";
112
    print "... finished reverting batch\n";
116
113
117
    print <<_SUMMARY_;
114
    print <<_SUMMARY_;
Lines 123-138 Number of records deleted: $num_deleted Link Here
123
Number of errors:                $num_errors
120
Number of errors:                $num_errors
124
Number of records reverted:      $num_reverted
121
Number of records reverted:      $num_reverted
125
Number of records ignored:       $num_ignored
122
Number of records ignored:       $num_ignored
126
Number of items added:           $num_items_deleted
123
Number of items deleted:         $num_items_deleted
127
124
128
_SUMMARY_
125
_SUMMARY_
129
}
126
}
130
127
131
128
132
sub print_progress_and_commit {
129
sub print_progress {
133
    my $recs = shift;
130
    my ( $recs ) = @_;
134
    print "... processed $recs records\n";
131
    print "... processed $recs records\n";
135
    $dbh->commit();
136
}
132
}
137
133
138
sub print_usage {
134
sub print_usage {
(-)a/tools/manage-marc-import.pl (-22 / +12 lines)
Lines 232-253 sub commit_batch { Link Here
232
    my $job = undef;
232
    my $job = undef;
233
    my ( $num_added, $num_updated, $num_items_added,
233
    my ( $num_added, $num_updated, $num_items_added,
234
        $num_items_replaced, $num_items_errored, $num_ignored );
234
        $num_items_replaced, $num_items_errored, $num_ignored );
235
    my $schema = Koha::Database->new->schema;
235
    my $callback = sub { };
236
    $schema->storage->txn_do(
236
    if ($runinbackground) {
237
        sub {
237
        $job = put_in_background($import_batch_id);
238
            my $callback = sub { };
238
        $callback = progress_callback( $job );
239
            if ($runinbackground) {
239
    }
240
                $job = put_in_background($import_batch_id);
240
    (
241
                $callback = progress_callback( $job, $dbh );
241
        $num_added, $num_updated, $num_items_added,
242
            }
242
        $num_items_replaced, $num_items_errored, $num_ignored
243
            (
243
      )
244
                $num_added, $num_updated, $num_items_added,
244
      = BatchCommitRecords( $import_batch_id, $framework, 50,
245
                $num_items_replaced, $num_items_errored, $num_ignored
245
        $callback );
246
              )
247
              = BatchCommitRecords( $import_batch_id, $framework, 50,
248
                $callback );
249
        }
250
    );
251
246
252
    my $results = {
247
    my $results = {
253
        did_commit => 1,
248
        did_commit => 1,
Lines 276-290 sub revert_batch { Link Here
276
    my $schema = Koha::Database->new->schema;
271
    my $schema = Koha::Database->new->schema;
277
    $schema->txn_do(
272
    $schema->txn_do(
278
        sub {
273
        sub {
279
            my $callback = sub { };
280
            if ($runinbackground) {
274
            if ($runinbackground) {
281
                $job = put_in_background($import_batch_id);
275
                $job = put_in_background($import_batch_id);
282
                $callback = progress_callback( $job, $dbh );
283
            }
276
            }
284
            (
277
            (
285
                $num_deleted,       $num_errors, $num_reverted,
278
                $num_deleted,       $num_errors, $num_reverted,
286
                $num_items_deleted, $num_ignored
279
                $num_items_deleted, $num_ignored
287
            ) = BatchRevertRecords( $import_batch_id, 50, $callback );
280
            ) = BatchRevertRecords( $import_batch_id );
288
        }
281
        }
289
    );
282
    );
290
283
Lines 340-350 sub put_in_background { Link Here
340
333
341
sub progress_callback {
334
sub progress_callback {
342
    my $job = shift;
335
    my $job = shift;
343
    my $dbh = shift;
344
    return sub {
336
    return sub {
345
        my $progress = shift;
337
        my $progress = shift;
346
        $job->progress($progress);
338
        $job->progress($progress);
347
        $dbh->commit();
348
    }
339
    }
349
}
340
}
350
341
351
- 

Return to bug 29325