LP#1971745: work around issue that can cause large hold shelf lists to fail
authorGalen Charlton <gmc@equinoxOLI.org>
Thu, 5 May 2022 16:44:26 +0000 (12:44 -0400)
committerJason Stephenson <jstephenson@cwmars.org>
Mon, 28 Nov 2022 19:54:09 +0000 (14:54 -0500)
commit8f6645b5eec6fab135fe5904cc80ff0e79b2d3f5
treec32279d11eaa06a123106864fa922614c1a90e72
parent9fd4165bf6773555bf65e49fd4ae041b63f74855
LP#1971745: work around issue that can cause large hold shelf lists to fail

This patch addresses an issue where hold shelf lists with
more than ~350 rows can fail to be retrieved. It works by
making the open-ils.circ.hold.wide_hash.stream method fetch
the holds from an open-ils.storage method in one fell swoop,
rather than both streaming the list from open-ils.storage and
streaming it back to the client that invoked the open-ils.circ
method.

I suspect that this is working around a subtle OpenSRF bug when
bidirectional streaming is in play, but I'm not positive.

To test
-------
[1] Set up an environment with hundreds or thousands of holds on
    a shelf at an OU.
[2] Attempt to display the holds shelf list.
[3] It may fail; if it doesn't, try with even larger number of holds
    or by setting up a test system that has ejabberd s2s going on
    to service requests.
[4] Apply the patch and repeat step 2. This time, the holds shelf
    list should be consistently retrieved. There will also be a
    user-visible change: the spinner on the AngularJS holds shelf page
    will pause for a few seconds, then start advancing.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Josh Stompro <stompro@stompro.org>
Signed-off-by: Jason Stephenson <jstephenson@cwmars.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm