Stream facet data
authorMike Rylander <mrylander@gmail.com>
Wed, 28 Aug 2013 19:05:36 +0000 (15:05 -0400)
committerDan Wells <dbw2@calvin.edu>
Mon, 16 Sep 2013 22:08:41 +0000 (18:08 -0400)
For certain shapes of facet datasets, the .atomic version of the
json_query call can produce an XMPP message large enough to cause
ejabberd to fall over unceremoniously.  Switch to a streaming
CStoreEditor-based call instead to avoid this.

Ideally, this would use message bundling (aka, chunking) as well,
but the C parts of OpenSRF don't seem to support that yet.

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>

Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm

index c8b290d..0c0d649 100644 (file)
@@ -1598,7 +1598,7 @@ sub cache_facets {
     $query->{where}->{'+cmf'}->{field_class} = {'not in' => $ignore}
         if ref($ignore) and @$ignore > 0;
 
-    my $facets = $U->cstorereq("open-ils.cstore.json_query.atomic", $query);
+    my $facets = OpenILS::Utils::CStoreEditor->new->json_query($query, {substream => 1});
 
     for my $facet (@$facets) {
         next unless ($facet->{value});