Holds shelf list can fail to retrieve results
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Evergreen |
Fix Released
|
Undecided
|
Unassigned | ||
3.9 |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
The holds shelf list can fail to retrieve results if there are a large number of holds on the shelf. Empirically, more than 350 has been observed to be problematic, particularly in environments with a fair amount of ejabberd s2s traffic.
The problem appears to be related to the fact that open-ils.
- fetching a stream of results from open-ils.
- streaming those results back to the client
If "too many" results are received from the open-ils.storage call, eventually streaming the results back to the client times out on the ejabberd c2s connection, resulting in the method failing and only partial results ending up in the client's hands.
Investigation has ruled out a number of possible suspects, including ejabberd shaper and max_stanza_size settings. At the moment, this sounds like it might be a subtle OpenSRF bug. One piece of evidence for that is that the atomic version of the open-ils.circ call works consistently even when the streaming version does not.
A patch is forthcoming that calls the open-ils.storage method atomically, then streams the results back. This will have the following effect:
- the open-ils.circ and open-ils.storage drones may end up using a bit more memory to store the intermediate results of the entire holds shelf contents
- clients of the open-ils.circ call will see a pause while the open-ils.storage method completes, then the streaming results
Evergreen 3.7+
Changed in evergreen: | |
status: | Confirmed → Fix Committed |
Changed in evergreen: | |
status: | Fix Committed → Fix Released |
A patch is available at the tip of
working/ user/gmcharlt/ lp1971745_ adjust_ hold_shelf_ list_streaming / https:/ /git.evergreen- ils.org/ ?p=working/ Evergreen. git;a=shortlog; h=refs/ heads/user/ gmcharlt/ lp1971745_ adjust_ hold_shelf_ list_streaming