fix transaction state when exiting a queue job, #22524
authorMark Wells <mark@freeside.biz>
Wed, 17 Apr 2013 23:22:01 +0000 (16:22 -0700)
committerMark Wells <mark@freeside.biz>
Wed, 17 Apr 2013 23:22:01 +0000 (16:22 -0700)
FS/bin/freeside-queued

index 2fd8025..dcc6ac4 100644 (file)
@@ -212,8 +212,10 @@ while (1) {
       # don't put @args in the log, may expose passwords
       $log->info('starting job ('.$ljob->job.')');
       warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG;
+      local $FS::UID::AutoCommit = 0; # so that we can clean up failures
       eval $eval; #throw away return value?  suppose so
       if ( $@ ) {
+        dbh->rollback;
         my %hash = $ljob->hash;
         $hash{'statustext'} = $@;
         if ( $hash{'statustext'} =~ /\/misc\/queued_report/ ) { #use return?
@@ -225,8 +227,10 @@ while (1) {
         my $fjob = new FS::queue( \%hash );
         my $error = $fjob->replace($ljob);
         die $error if $error;
+        dbh->commit; # for the status change only
       } else {
         $ljob->delete;
+        dbh->commit; # for the job itself
       }
 
       if ( UNIVERSAL::can(dbh, 'sprintProfile') ) {