[Koha-bugs] [Bug 26963] Improve Koha::Item::pickup_locations performance

bugzilla-daemon at bugs.koha-community.org bugzilla-daemon at bugs.koha-community.org
Tue Nov 17 13:38:55 CET 2020


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

--- Comment #64 from Nick Clemens <nick at bywatersolutions.com> ---
Created attachment 113729
  -->
https://bugs.koha-community.org/bugzilla3/attachment.cgi?id=113729&action=edit
Bug 26963: [20.05.x]

Bug 26963: Unit tests

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: Don't call 'can_be_transferred' for each possible library for each
item

Currently When calling Koha::Template::Plugin::Branches::pickup_locations
we call pickup_location for each item of the bib, and for each item we get a
list of possible
branches, we then check those branches against the transfer limits, this is
inefficent

Given a system with 100 branches, and each branch having an item attached to
one bib (100 items)
we will call can_be_transferred ~10000 times - and that will happen for each
hold placed on the bib

For me this patch reduced load time from 77 seconds to 18 seconds

To test:
1 - Find a bib
2 - Place 4 title level holds
3 - Add some branches and items for this bib to your system:
  INSERT INTO branches (branchcode,branchname,pickup_location) SELECT
CONCAT(branchcode,"D"),CONCAT(branchname,"A"),pickup_location FROM branches;
  INSERT INTO branches (branchcode,branchname,pickup_location) SELECT
CONCAT(branchcode,"D"),CONCAT(branchname,"B"),pickup_location FROM branches;
  INSERT INTO branches (branchcode,branchname,pickup_location) SELECT
CONCAT(branchcode,"D"),CONCAT(branchname,"C"),pickup_location FROM branches;
  INSERT INTO branches (branchcode,branchname,pickup_location) SELECT
CONCAT(branchcode,"D"),CONCAT(branchname,"D"),pickup_location FROM branches;
  INSERT INTO items
(biblionumber,biblioitemnumber,barcode,itype,homebranch,holdingbranch) SELECT
1,1,CONCAT("test-",branchcode),'BKS',branchcode,branchcode FROM branches;
4 - Set systempreferences:
    UseBranchTransferLimits = 'enforce'
     BranchTransferLimitsType = 'item type'
5 - Find the bib and click the holds tab
6 - Wait for a long time, it shoudl eventually load
7 - Apply patch and restart al the things
8 - Load the page again, it should be much faster

Signed-off-by: Andrew Fuerste-Henry <andrew at bywatersolutions.com>
Signed-off-by: Bob Bennhoff <bbennhoff at clicweb.org>
Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (follow-up) Change subroutine name for QA tools

It didn't like the ending _at

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Convert to ResultSets

This patch removes the previously introduced private method by
converting the arrayref returns to ResultSets appropriately and inlining
the filter search queries.

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Migrate unit tests into pickup_location

We wrote unit tests for _can_pickup_locations as part of this patchset,
but then I inlined the method whilst golfing. This patch moves those
tests into the existing pickup_locations test so we more thoroughly
cover the case where branch transfer limits are in play.

NOTE: The tests all assume that all items have an effective_itemtype and
ccode. I'm pretty sure items all have a type at this point, but I'm less
sure we enforce collection codes?

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Don't delete existing data before tests

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Update mocked return of pickup_locations

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Fix cases where we expected a list

Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: (QA follow-up) Fix up tests and cover case of undefined ccode

While this technically shouldn't happen, if a library creates itemtype limits,
then flips the pref, those rules are still in the db until a ccode rule is
saved.

To be extra safe, when checking for rules of one type, we should make sure the
other type is undef - i.e. if looking for ccode rules, we should confirm the
itype is undef for those rules

Additionally, we shouldn't set the barcode now that we are not deleting all
items, so we use copynumber for our item identification field as it doesn't
need to be unique in the DB

Signed-off-by: Nick Clemens <nick at bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize at ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen at theke.io>

Bug 26963: Ignore existing libraries

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


More information about the Koha-bugs mailing list