hold targeter reify experiment
authorBill Erickson <berickxx@gmail.com>
Wed, 15 Jun 2016 14:30:59 +0000 (10:30 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 15 Jun 2016 14:30:59 +0000 (10:30 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm

index ca1b6fe..6cd8be5 100644 (file)
@@ -290,18 +290,25 @@ sub copy_prox_map {
 # and returns false.
 sub exit_targeter {
     my ($self, $msg, $is_error) = @_;
+
     $self->message($msg);
+    my $log = "targeter: exiting hold ".$self->hold_id." : $msg";
 
-    # Force a rollback when exiting on error.
-    # This is a no-op if a commit or rollback have already occurred.
-    $self->editor->rollback if $is_error;
+    if ($is_error) {
+        # On error, roll back and capture the last editor event for logging.
 
-    my $log = "targeter: exiting hold targeter on ".$self->hold_id." : $msg";
+        my $evt = $self->editor->die_event;
+        $log .= " [".$evt->{textcode}."]" if $evt;
 
-    if ($is_error) {
-        $self->error($is_error);
+        $self->error(1);
         $logger->error($log);
+
     } else {
+        # Attempt a rollback and disconnect when each hold exits
+        # to avoid the possibility of leaving cstore's pinned.
+        # Note: ->rollback is a no-op when a ->commit has already occured.
+
+        $self->editor->rollback;
         $logger->info($log);
     }