Rollback cstore transaction before bbag record load
authorBill Erickson <berick@esilibrary.com>
Thu, 18 Oct 2012 18:54:08 +0000 (14:54 -0400)
committerJason Stephenson <jstephenson@mvlc.org>
Thu, 18 Oct 2012 20:29:41 +0000 (16:29 -0400)
To avoid timeouts, which results in transaction rollbacks, preemptively
roll back the bookbag fetching cstore transaction before we retrieve
what could be a very large list of bookbag records data.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm

index 852b11c..33fec7f 100644 (file)
@@ -1746,6 +1746,11 @@ sub load_myopac_bookbags {
                 }
             }
 
+            # we're done with our CStoreEditor.  Rollback here so 
+            # later calls don't cause a timeout, resulting in a 
+            # transaction rollback under the covers.
+            $e->rollback;
+
             my $query = $self->_prepare_bookbag_container_query(
                 $bookbag->id, $sorter, $modifier
             );
@@ -1760,6 +1765,7 @@ sub load_myopac_bookbags {
             my $items = $U->bib_container_items_via_search($bookbag->id, $query, $args)
                 or return Apache2::Const::HTTP_INTERNAL_SERVER_ERROR;
 
+
             my (undef, @recs) = $self->get_records_and_facets(
                 [ map {$_->target_biblio_record_entry->id} @$items ],
                 undef, 
@@ -1785,7 +1791,10 @@ sub load_myopac_bookbags {
         }
     }
 
+    # this rollback may be a dupe, but that's OK because 
+    # cstoreditor ignores dupe rollbacks
     $e->rollback;
+
     return Apache2::Const::OK;
 }