# 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);
}