Rollback cstore transaction before bbag record load
authorBill Erickson <berick@esilibrary.com>
Thu, 18 Oct 2012 18:54:08 +0000 (14:54 -0400)
committerDan Scott <dscott@laurentian.ca>
Sun, 11 Nov 2012 11:47:37 +0000 (06:47 -0500)
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 81edf81..3378f13 100644 (file)
@@ -1740,6 +1740,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
             );
@@ -1754,6 +1759,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, 
@@ -1776,7 +1782,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;
 }