[Koha-bugs] [Bug 31735] New: Circulation optimizations

bugzilla-daemon at bugs.koha-community.org bugzilla-daemon at bugs.koha-community.org
Tue Oct 11 15:25:12 CEST 2022


https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=31735

            Bug ID: 31735
           Summary: Circulation optimizations
 Change sponsored?: ---
           Product: Koha
           Version: master
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P5 - low
         Component: Architecture, internals, and plumbing
          Assignee: koha-bugs at lists.koha-community.org
          Reporter: glasklas at gmail.com
        QA Contact: testopia at bugs.koha-community.org

We recently had time-out issues and high server loads for patrons with high
checkout counts (some patrons have several hundreds, up to about 400). One of
the major bottlenecks turned out to be C4::Circulation::CanBookBeRenewed. The
primary reason it performed so poorly was constant re-fetching of different
database entities which could just as well be passed down directly instead of
passing ids which requires re-fetching further down the call stack.

After refactoring the most performance critical subroutines to take objects
instead of object ids the calls to expensive DBIx-methods has been greatly
reduced. In addition some other optimizations and bug fixes related to non
working caching resulted in further speedups. The performance gain for a patron
with around 400 checkouts is currently about 500%.

I made an effort to fix all tests affected by the changes, but I can not
guarantee there are absolutely no regressions left in the test-suite. Since
many tests seem to fail due to reasons not related to this patch, mainly due to
the state of my local instance triggering tests-bugs (for example caused by
preferences not being mocked correctly, or relying on database test-entries
that are not guaranteed to exist), it was impractical and very time consuming
to make sure all tests still run successfully. So subset of tests where the
changed subroutines are called directly was selected and these should now pass.

The following tests should be effected by the changes and should be run as a
part of the test-plan:

t/db_dependent/api/v1/biblios.t
t/db_dependent/api/v1/checkouts.t
t/db_dependent/api/v1/return_claims.t
t/db_dependent/Circulation/CalcDateDue.t
t/db_dependent/Circulation/CheckIfIssuedToPatron.t
t/db_dependent/Circulation/dateexpiry.t
t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t
t/db_dependent/Circulation/GetTopIssues.t
t/db_dependent/Circulation_holdsqueue.t
t/db_dependent/Circulation/IsItemIssued.t
t/db_dependent/Circulation/issue.t
t/db_dependent/Circulation/MarkIssueReturned.t
t/db_dependent/Circulation/maxsuspensiondays.t
t/db_dependent/Circulation/ReturnClaims.t
t/db_dependent/Circulation/Returns.t
t/db_dependent/Circulation/SwitchOnSiteCheckouts.t
t/db_dependent/Circulation.t
t/db_dependent/Circulation/TooMany.t
t/db_dependent/Circulation/transferbook.t
t/db_dependent/DecreaseLoanHighHolds.t
t/db_dependent/Holds/DisallowHoldIfItemsAvailable.t
t/db_dependent/HoldsQueue.t
t/db_dependent/Holds/RevertWaitingStatus.t
t/db_dependent/Illrequests.t
t/db_dependent/ILSDI_Services.t
t/db_dependent/Items.t
t/db_dependent/Koha/Account/Line.t
t/db_dependent/Koha/Acquisition/Order.t
t/db_dependent/Koha/Biblio.t
t/db_dependent/Koha/Holds.t
t/db_dependent/Koha/Items.t
t/db_dependent/Koha/Item.t
t/db_dependent/Koha/Object.t
t/db_dependent/Koha/Patrons.t
t/db_dependent/Koha/Plugins/Circulation_hooks.t
t/db_dependent/Koha/Pseudonymization.t
t/db_dependent/Koha/Recalls.t
t/db_dependent/Koha/Recall.t
t/db_dependent/Koha/Template/Plugin/CirculationRules.t
t/db_dependent/Letters/TemplateToolkit.t
t/db_dependent/Members/GetAllIssues.t
t/db_dependent/Members/IssueSlip.t
t/db_dependent/Patron/Borrower_Discharge.t
t/db_dependent/Patron/Borrower_PrevCheckout.t
t/db_dependent/Reserves/GetReserveFee.t
t/db_dependent/Reserves.t
t/db_dependent/rollingloans.t
t/db_dependent/selenium/regressions.t
t/db_dependent/SIP/ILS.t

The following still fails for me but should either work on a fresh Koha
installation, or fail for unrelated reasons (that is they also fail in Koha
master):

t/db_dependent/Koha/Plugins/Circulation_hooks.t
t/db_dependent/Koha/Items.t
t/db_dependent/SIP/ILS.t

To be able to run t/db_dependent/Circulation.t in my Koha instance there where
some existing bugs that needed fixing, so this patch have a dependency on Bug
31676.

-- 
You are receiving this mail because:
You are the assignee for the bug.
You are watching all bug changes.


More information about the Koha-bugs mailing list