From: erickson Date: Tue, 17 Mar 2009 16:52:43 +0000 (+0000) Subject: when searching bibs, don't start the cstore xact until after the results have returne... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f7f3317e830d166800c864c0670d476633aefea5;p=evergreen%2Fmasslnc.git when searching bibs, don't start the cstore xact until after the results have returned to prevent connection timeout (and useless pinning of backend) git-svn-id: svn://svn.open-ils.org/ILS/trunk@12563 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Picklist.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Picklist.pm index 31d58c2e8b..9af5551b43 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Picklist.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Picklist.pm @@ -414,42 +414,26 @@ __PACKAGE__->register_method( sub zsearch { my($self, $conn, $auth, $search, $name, $options) = @_; - my $e = new_editor(authtoken=>$auth, xact=>1); - return $e->die_event unless $e->checkauth; - return $e->die_event unless $e->allowed('CREATE_PICKLIST'); + my $e = new_editor(authtoken=>$auth); + return $e->event unless $e->checkauth; + return $e->event unless $e->allowed('CREATE_PICKLIST'); $search->{limit} ||= 10; $options ||= {}; - $name ||= ''; - my $picklist = $e->search_acq_picklist({owner=>$e->requestor->id, name=>$name})->[0]; - if($name eq '' and $picklist) { - my $evt = delete_picklist($self, $conn, $auth, $picklist->id); - return $evt unless $evt == 1; - $picklist = undef; - } - - unless($picklist) { - $picklist = Fieldmapper::acq::picklist->new; - $picklist->owner($e->requestor->id); - $picklist->creator($e->requestor->id); - $picklist->editor($e->requestor->id); - $picklist->edit_time('now'); - $picklist->name($name); - $picklist->org_unit($e->requestor->ws_ou); - $e->create_acq_picklist($picklist) or return $e->die_event; - - } else { - $picklist->editor($e->requestor->id); - $picklist->edit_time('now'); - $e->update_acq_picklist($picklist) or return $e->die_event; - } - my $ses = OpenSRF::AppSession->create('open-ils.search'); my $req = $ses->request('open-ils.search.z3950.search_class', $auth, $search); + my $first = 1; + my $picklist; while(my $resp = $req->recv(timeout=>60)) { + if($first) { + $e = new_editor(requestor=>$e->requestor, xact=>1); + $picklist = zsearch_build_pl($self, $conn, $auth, $e, $name); + $first = 0; + } + my $result = $resp->content; my $count = $result->{count}; my $total = (($count < $search->{limit}) ? $count : $search->{limit})+1; @@ -487,6 +471,37 @@ sub zsearch { return {complete=>1, picklist_id=>$picklist->id}; } +sub zsearch_build_pl { + my($self, $conn, $auth, $e, $name) = @_; + + $name ||= ''; + my $picklist = $e->search_acq_picklist({owner=>$e->requestor->id, name=>$name})->[0]; + if($name eq '' and $picklist) { + my $evt = delete_picklist($self, $conn, $auth, $picklist->id); + return $evt unless $evt == 1; + $picklist = undef; + } + + unless($picklist) { + $picklist = Fieldmapper::acq::picklist->new; + $picklist->owner($e->requestor->id); + $picklist->creator($e->requestor->id); + $picklist->editor($e->requestor->id); + $picklist->edit_time('now'); + $picklist->name($name); + $picklist->org_unit($e->requestor->ws_ou); + $e->create_acq_picklist($picklist) or return $e->die_event; + + } else { + $picklist->editor($e->requestor->id); + $picklist->edit_time('now'); + $e->update_acq_picklist($picklist) or return $e->die_event; + } + + return $picklist; +} + + 1;