[open-ils-commits] r17984 - trunk/Open-ILS/src/perlmods/OpenILS/Application/Circ (miker)
svn at svn.open-ils.org
svn at svn.open-ils.org
Fri Sep 24 20:58:36 EDT 2010
Author: miker
Date: 2010-09-24 20:58:35 -0400 (Fri, 24 Sep 2010)
New Revision: 17984
Modified:
trunk/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm
Log:
pedantic protection of cstore backends -- always use die_event when in xact mode, and rollback otherwise
Modified: trunk/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm 2010-09-25 00:56:50 UTC (rev 17983)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm 2010-09-25 00:58:35 UTC (rev 17984)
@@ -119,10 +119,10 @@
sub create_hold {
my( $self, $conn, $auth, $hold ) = @_;
+ return -1 unless $hold;
my $e = new_editor(authtoken=>$auth, xact=>1);
- return $e->event unless $e->checkauth;
+ return $e->die_event unless $e->checkauth;
- return -1 unless $hold;
my $override = 1 if $self->api_name =~ /override/;
my @events;
@@ -133,8 +133,8 @@
if( $requestor->id ne $hold->usr ) {
# Make sure the requestor is allowed to place holds for
# the recipient if they are not the same people
- $recipient = $e->retrieve_actor_user($hold->usr) or return $e->event;
- $e->allowed('REQUEST_HOLDS', $recipient->home_ou) or return $e->event;
+ $recipient = $e->retrieve_actor_user($hold->usr) or return $e->die_event;
+ $e->allowed('REQUEST_HOLDS', $recipient->home_ou) or return $e->die_event;
}
# If the related org setting tells us to, block if patron privs have expired
@@ -172,27 +172,30 @@
push( @events, OpenILS::Event->new('HOLD_ITEM_CHECKED_OUT')) if $checked_out;
if ( $t eq OILS_HOLD_TYPE_METARECORD ) {
- return $e->event unless $e->allowed('MR_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('MR_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_TITLE ) {
- return $e->event unless $e->allowed('TITLE_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('TITLE_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_VOLUME ) {
- return $e->event unless $e->allowed('VOLUME_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('VOLUME_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_ISSUANCE ) {
- return $e->event unless $e->allowed('ISSUANCE_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('ISSUANCE_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_COPY ) {
- return $e->event unless $e->allowed('COPY_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('COPY_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_FORCE ) {
- return $e->event unless $e->allowed('COPY_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('COPY_HOLDS', $porg);
} elsif ( $t eq OILS_HOLD_TYPE_RECALL ) {
- return $e->event unless $e->allowed('COPY_HOLDS', $porg);
+ return $e->die_event unless $e->allowed('COPY_HOLDS', $porg);
}
if( @events ) {
- $override or return \@events;
+ if (!$override) {
+ $e->rollback;
+ return \@events;
+ }
for my $evt (@events) {
next unless $evt;
my $name = $evt->{textcode};
- return $e->event unless $e->allowed("$name.override", $porg);
+ return $e->die_event unless $e->allowed("$name.override", $porg);
}
}
@@ -208,7 +211,7 @@
$hold->requestor($e->requestor->id);
$hold->request_lib($e->requestor->ws_ou);
$hold->selection_ou($hold->pickup_lib) unless $hold->selection_ou;
- $hold = $e->create_action_hold_request($hold) or return $e->event;
+ $hold = $e->create_action_hold_request($hold) or return $e->die_event;
$e->commit;
@@ -528,14 +531,20 @@
sub uncancel_hold {
my($self, $client, $auth, $hold_id) = @_;
my $e = new_editor(authtoken=>$auth, xact=>1);
- return $e->event unless $e->checkauth;
+ return $e->die_event unless $e->checkauth;
my $hold = $e->retrieve_action_hold_request($hold_id)
or return $e->die_event;
return $e->die_event unless $e->allowed('CANCEL_HOLDS', $hold->request_lib);
- return 0 if $hold->fulfillment_time;
- return 1 unless $hold->cancel_time;
+ if ($hold->fulfillment_time) {
+ $e->rollback;
+ return 0;
+ }
+ unless ($hold->cancel_time) {
+ $e->rollback;
+ return 1;
+ }
# if configured to reset the request time, also reset the expire time
if($U->ou_ancestor_setting_value(
@@ -583,22 +592,25 @@
my($self, $client, $auth, $holdid, $cause, $note) = @_;
my $e = new_editor(authtoken=>$auth, xact=>1);
- return $e->event unless $e->checkauth;
+ return $e->die_event unless $e->checkauth;
my $hold = $e->retrieve_action_hold_request($holdid)
- or return $e->event;
+ or return $e->die_event;
if( $e->requestor->id ne $hold->usr ) {
- return $e->event unless $e->allowed('CANCEL_HOLDS');
+ return $e->die_event unless $e->allowed('CANCEL_HOLDS');
}
- return 1 if $hold->cancel_time;
+ if ($hold->cancel_time) {
+ $e->rollback;
+ return 1;
+ }
# If the hold is captured, reset the copy status
if( $hold->capture_time and $hold->current_copy ) {
my $copy = $e->retrieve_asset_copy($hold->current_copy)
- or return $e->event;
+ or return $e->die_event;
if( $copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF ) {
$logger->info("canceling hold $holdid whose item is on the holds shelf");
@@ -630,7 +642,7 @@
$hold->cancel_cause($cause);
$hold->cancel_note($note);
$e->update_action_hold_request($hold)
- or return $e->event;
+ or return $e->die_event;
delete_hold_copy_maps($self, $e, $hold->id);
@@ -698,7 +710,10 @@
my $e = new_editor(authtoken=>$auth, xact=>1);
return $e->die_event unless $e->checkauth;
my $resp = update_hold_impl($self, $e, $hold, $values);
- return $resp if $U->event_code($resp);
+ if ($U->event_code($resp)) {
+ $e->rollback;
+ return $resp;
+ }
$e->commit; # FIXME: update_hold_impl already does $e->commit ??
return $resp;
}
@@ -1274,7 +1289,10 @@
'open-ils.storage.direct.action.hold_request.pull_list.id_list.current_copy_circ_lib.status_filtered.atomic',
$org_id, 10000);
- return undef unless @$hold_ids;
+ unless (@$hold_ids) {
+ $e->rollback;
+ return undef;
+ }
$client->status(new OpenSRF::DomainObject::oilsContinueStatus);
# Holds will /NOT/ be in order after this ...
@@ -1286,6 +1304,8 @@
my $sorted_holds = [];
push @$sorted_holds, $hold_map->{$_} foreach @$hold_ids;
+ $e->rollback;
+
return $U->fire_object_event(
undef, "ahr.format.pull_list", $sorted_holds,
$org_id, undef, undef, $client
@@ -1349,7 +1369,7 @@
return $e->die_event unless
$e->allowed('CREATE_HOLD_NOTIFICATION', $patron->home_ou);
- $note->notify_staff($e->requestor->id);
+ $note->notify_staff($e->requestor->id);
$e->create_action_hold_notification($note) or return $e->die_event;
$e->commit;
return $note->id;
@@ -1447,14 +1467,14 @@
if( $hold->capture_time and $hold->current_copy ) {
my $copy = $e->retrieve_asset_copy($hold->current_copy)
- or return $e->event;
+ or return $e->die_event;
if( $copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF ) {
$logger->info("setting copy to status 'reshelving' on hold retarget");
$copy->status(OILS_COPY_STATUS_RESHELVING);
$copy->editor($e->requestor->id);
$copy->edit_date('now');
- $e->update_asset_copy($copy) or return $e->event;
+ $e->update_asset_copy($copy) or return $e->die_event;
} elsif( $copy->status == OILS_COPY_STATUS_IN_TRANSIT ) {
@@ -1469,7 +1489,10 @@
$logger->info("Aborting transit [$transid] on hold [$hid] reset...");
my $evt = OpenILS::Application::Circ::Transit::__abort_transit($e, $trans, $copy, 1);
$logger->info("Transit abort completed with result $evt");
- return $evt unless "$evt" eq 1;
+ unless ("$evt" eq 1) {
+ $e->rollback;
+ return $evt;
+ }
}
}
}
@@ -1480,7 +1503,7 @@
$hold->clear_shelf_time;
$hold->clear_shelf_expire_time;
- $e->update_action_hold_request($hold) or return $e->event;
+ $e->update_action_hold_request($hold) or return $e->die_event;
$e->commit;
$U->storagereq(
@@ -2875,7 +2898,7 @@
my( $self, $client, $auth, $new_bib_id, $bib_ids ) = @_;
my $e = new_editor(authtoken=>$auth, xact=>1);
- return $e->event unless $e->checkauth;
+ return $e->die_event unless $e->checkauth;
my $holds = $e->search_action_hold_request(
[
More information about the open-ils-commits
mailing list