Use a transaction to avoid talking to a replicated db when building A/T data structures
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 23 Sep 2010 02:49:36 +0000 (02:49 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 23 Sep 2010 02:49:36 +0000 (02:49 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@17905 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Trigger.pm
Open-ILS/src/perlmods/OpenILS/Application/Trigger/Event.pm
Open-ILS/src/perlmods/OpenILS/Application/Trigger/Reactor.pm

index a4d022a..78868cb 100644 (file)
@@ -328,7 +328,7 @@ sub events_by_target {
             for (grep { $_ ne '-and' } keys %{$$filter{event}});
     }
 
-    my $e = new_editor();
+    my $e = new_editor(xact=>1);
 
     my $events = $e->json_query($query);
 
@@ -595,8 +595,6 @@ sub pending_events {
     my $client = shift;
     my $granularity = shift;
 
-    my $editor = new_editor();
-
     my $query = [{ state => 'pending', run_time => {'<' => 'now'} }, { order_by => { atev => [ qw/run_time add_time/] }, 'join' => 'atevdef' }];
 
     if (defined $granularity) {
@@ -605,7 +603,7 @@ sub pending_events {
         $query->[0]->{'+atevdef'} = {granularity => undef};
     }
 
-    return $editor->search_action_trigger_event(
+    return new_editor(xact=>1)->search_action_trigger_event(
         $query, { idlist=> 1, timeout => 7200, substream => 1 }
     );
 }
index 244df30..3a635ec 100644 (file)
@@ -45,6 +45,10 @@ sub init {
 
     return $self if (!$self->id);
 
+    if ($self->standalone) {
+        $self->editor->xact_begin || return undef;
+    }
+
     $self->event(
         $self->editor->retrieve_action_trigger_event([
             $self->id, {
@@ -57,6 +61,10 @@ sub init {
         ])
     );
 
+    if ($self->standalone) {
+        $self->editor->xact_rollback || return undef;
+    }
+
     $self->user_data(OpenSRF::Utils::JSON->JSON2perl( $self->event->user_data ))
         if (defined( $self->event->user_data ));
 
@@ -91,8 +99,16 @@ sub init {
     $meth =~ s/Fieldmapper:://;
     $meth =~ s/::/_/;
     
+    if ($self->standalone) {
+        $self->editor->xact_begin || return undef;
+    }
+
     $self->target( $self->editor->$meth( $self->event->target ) );
 
+    if ($self->standalone) {
+        $self->editor->xact_rollback || return undef;
+    }
+
     return $self;
 }
 
@@ -463,7 +479,7 @@ sub _object_by_path {
 
     my $ed = grep( /open-ils.cstore/, @{$fclass->Controller} ) ?
             $self->editor :
-            new_rstore_editor();
+            new_rstore_editor(($self->standalone ? () : (xact=>1)));
 
     my $obj = $context->$step(); 
 
@@ -473,11 +489,21 @@ sub _object_by_path {
     );
 
     if (!ref $obj) {
+
+        if ($self->standalone) {
+            $ed->xact_begin || return undef;
+        }
+
         $obj = $ed->$meth( 
             ($multi) ?
                 { $ffield => $context->$lfield() } :
                 $context->$lfield()
         );
+
+        if ($self->standalone) {
+            $ed->xact_rollback || return undef;
+        }
+
     }
 
     if (@$path) {
index 840964d..5cc3100 100644 (file)
@@ -57,13 +57,13 @@ my $_TT_helpers = {
     # returns the calculated copy price
     get_copy_price => sub {
         my $copy_id = shift;
-        return $U->get_copy_price(new_editor(), $copy_id);
+        return $U->get_copy_price(new_editor(xact=>1), $copy_id);
     },
 
     # given a copy, returns the title and author in a hash
     get_copy_bib_basics => sub {
         my $copy_id = shift;
-        my $copy = new_editor()->retrieve_asset_copy([
+        my $copy = new_editor(xact=>1)->retrieve_asset_copy([
             $copy_id,
             {
                 flesh => 2,