Koha-clms/t/db_dependent
Martin Renvoize 7a10a59e3d
Bug 43033: Sort unallocated task indices before compacting the retry matrix
The previous two commits on this bug fixed two ordering assumptions in
the RETRY loop of _allocateWithTransportCostMatrix(): resetting $inf at
the start of each attempt, and splicing unallocated task indices out of
@requests in descending order (removing a lower index first would shift
the position of any higher index still waiting to be removed).

This is a third instance of the same underlying problem, a few lines
earlier in the loop that compacts the working cost matrix $m before
that splice runs. @unallocated is built by iterating over agents (item
rows), pushing the column index Munkres assigned to each row that
turned out infeasible - and Munkres' row-to-column assignment is a
permutation, not a monotonic function of the row index, so
@unallocated is no more reliably sorted here than it was for the
splice.

That compaction loop scans matrix columns in ascending order and
advances a single pointer into @unallocated, expecting to meet each
entry in that same ascending order. When @unallocated arrives out of
order, the pointer never catches up: columns that should have been
dropped are left in place, and the columns after them are never
shifted left to fill the gap. From that point on, $m no longer lines
up with @requests, which *is* correctly reduced by the splice - so on
the next retry pass a hold's transport cost gets evaluated using a
different hold's matrix row. Depending on the exact misalignment, this
can silently drop a fillable hold from the queue while a genuinely
available item sits unused, or fill a hold via the wrong-cost item.

It didn't show up in the "many holds" regression test added earlier on
this bug, because that test's transport cost matrix is uniform (every
disabled pair costs the same); this defect only surfaces once the
columns competing for a scarce item have distinct costs.

Sort @unallocated once, ascending, and use that copy for the
compaction pass; reverse it for the splice, which needs descending
order.

Test plan:

1. Run the new t/db_dependent/HoldsQueue/RetryAllocationOrdering.t -
   it calls _allocateWithTransportCostMatrix() directly with a small
   hand-built scarce transport cost matrix and a pinned srand() (the
   specific item-to-branch permutation needed to trigger the bug
   depends on the shuffle() inside the routine). Reverting just this
   patch makes 3 of its 6 subtests fail: the L2 pickup hold is dropped
   even though an available item could have filled it.
2. Run t/db_dependent/HoldsQueue/TransportCostOptimizations.t to
   confirm no regression in the existing retry-loop coverage.

Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
2026-07-13 15:46:27 +00:00
..
Acquisition Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Auth Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
AuthoritiesMarc Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Authority Bug 40577: Bulk biblio ES index update after auth change 2026-04-15 14:10:14 -06:00
Biblio Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
Budgets Bug 38944: Manual changes 2025-03-13 17:25:04 +01:00
Circulation Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
CourseReserves Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Creators Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Exporter Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Holds Bug 40058: Adjust existing tests 2025-08-14 16:06:00 -06:00
HoldsQueue Bug 43033: Sort unallocated task indices before compacting the retry matrix 2026-07-13 15:46:27 +00:00
Items Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Koha Bug 42430: (QA follow-up) Fix nested plugin package corruption on reload 2026-07-13 15:46:23 +00:00
LDAP Bug 39325: Manual fixes 2025-04-28 18:51:23 +02:00
Labels Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Letters Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Members Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
OAI Bug 40962: Apply ViewPolicy filter consistently in OAI Server test setup 2026-03-23 07:54:05 +01:00
Patron Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Record Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Reports Bug 38621: Use GetPreparedLetter in EmailReport 2026-06-29 15:39:09 +00:00
Reserves Bug 41983: (QA follow-up): Rebuild the holds queue when groups are edited 2026-05-06 15:20:58 -06:00
SIP Bug 42664: Unit tests 2026-06-29 15:38:52 +00:00
Search Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Serials Bug 37796: (QA follow-up) nextpublisheddate in t/db../GetNextSeq.t 2025-12-17 13:24:24 -07:00
Template/Plugin Bug 39781: (RM follow-up) Fix wrong mock_userenv key in test 2026-03-26 09:32:23 +01:00
Utils Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
api/v1 Bug 42995: (regression tests) Nested +count embeds with has_many prefetch 2026-07-13 15:46:13 +00:00
cronjobs Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
data Bug 39345: (QA follow-up): Add exception handling for unsupported counter release 2025-09-05 15:10:31 -06:00
misc/translator Bug 41216: (follow-up) Fix path to sample.tt in xgettext-tt2.t 2026-04-13 09:52:55 +01:00
mojo Bug 39055: Add change to Koha::App::Plugin::CSRF and fix unit test 2026-03-19 10:51:41 +00:00
selenium Bug 40816: Fix a failing Selenium test 2026-04-23 09:24:53 -06:00
www Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
00-strict.t Bug 42126: Make 00-strict.t run strict on all Perl files 2026-04-10 09:48:11 -06:00
Accounts.t Bug 35612: (QA follow-up) Add test for undefined LostChargesControl preference 2026-02-27 11:38:54 -07:00
Acquisition.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Amazon.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
ArticleRequests.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
AudioAlerts.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Auth.t Bug 40286: Make C4::Auth::checkpw_internal use Koha::Patrons->find_by_identifier 2026-03-23 08:01:01 +01:00
AuthUtils.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Auth_with_cas.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Auth_with_ldap.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Auth_with_shibboleth.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
AuthorisedValues.t Bug 40444: Add a test to ensure all Perl test files use Test::NoWarnings 2025-07-28 16:26:36 -06:00
AuthoritiesMarc.t Bug 41685: (RM follow-up): Remove dead comment code 2026-06-19 15:39:09 +00:00
AuthoritiesMarc_GetTagsLabels.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Barcodes.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Barcodes_ValueBuilder.t Bug 42221: Fix EAN-13 autoBarcode not incrementing 2026-04-16 15:54:09 -06:00
Biblio.t Bug 42188: (follow-up) Update ModBiblio test for new info format 2026-05-06 09:52:11 -06:00
Biblio_holdsqueue.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Breeding.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Breeding_Auth.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Budgets.t Bug 40371: Remove warnings from Budgets.t output 2025-07-23 16:36:30 -06:00
Cache.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Calendar.t Bug 42545: (RM follow-up) Tidy test file 2026-05-20 09:04:54 -06:00
Charset.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Circulation.t Bug 23415: (follow-up) Rename sysprefs and add self-checkout control 2026-03-22 23:52:06 +01:00
ClassSources.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Clubs.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Context.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Contract.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
CourseReserves.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
DecreaseLoanHighHolds.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Filter_MARC_ViewPolicy.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
Fines.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
FrameworkPlugin.t Bug 38365: Require a non-empty nonce in FrameworkPlugin.t 2026-03-17 09:38:49 +01:00
Heading.t Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
Heading_MARC21.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Hold.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
Holds.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
HoldsQueue.t Bug 40680: Fix C4::Calendar imports 2025-12-01 08:34:00 -07:00
Holidays.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
ILSDI_Services.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
ImportBatch.t Bug 42098: (follow-up) Enable plugin in ImportBatch.t test 2026-03-20 07:51:01 +00:00
ImportExportFramework.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Installer.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Items.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Koha.t Bug 40277: Add a test 2025-07-07 10:20:27 -06:00
Koha_Database.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Koha_Elasticsearch.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Koha_ExternalContent_OverDrive.t Bug 38944: Manual changes 2025-03-13 17:25:04 +01:00
Koha_MetadataRecord_Authority.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Koha_Misc_Files.t Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
Languages.t Bug 41440: (QA follow-up) Add unit tests 2026-04-15 14:10:32 -06:00
Letters.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
LibraryGroups.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Linker_Default.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Linker_FirstMatch.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Log.t Bug 20956: BorrowersLog is not logging permission changes 2026-03-23 10:41:51 +01:00
MarcModificationTemplates.t Bug 28915: Add test for AddModificationTemplateAction 2026-06-15 15:24:11 +00:00
Matcher.t Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
Members.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Message.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
MungeMarcPrice.t Bug 38944: Manual changes 2025-03-13 17:25:04 +01:00
Output.t Bug 38936: Use https in license 2025-10-01 08:32:49 -06:00
Overdues.t Bug 35612: Add tests for branch context recording in OVERDUE fees 2026-02-27 11:38:50 -07:00
Passwordrecovery.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
PatronLists.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Patroncards.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Patrons.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
Prices.t Bug 39325: Automatic fix 2025-04-28 18:51:22 +02:00
Realtime_holdsqueue.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
Record.t Bug 41690: (follow-up) Add test 2026-05-01 11:04:35 -06:00
RecordProcessor_EmbedSeeFromHeadings.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Reports.t Bug 39325: Automatic fix 2025-04-28 18:51:22 +02:00
Reserves.t Bug 42255: Add tests 2026-05-18 09:30:15 -06:00
RotatingCollections.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Search.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Search_FacetSorting.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Serials.t Bug 37796: Pass correct publication date when generating the next serial form the serial collection page 2025-12-17 13:24:17 -07:00
Serials_2.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Service.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
ShelfBrowser.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
Sitemapper.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
SocialData.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
StockRotationItems.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
StockRotationRotas.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
StockRotationStages.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
SuggestionEngine_ExplodedTerms.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Suggestions.t Bug 42645: Add tests for FallbackToSMSIfNoEmail with alternate email fields 2026-06-29 15:39:05 +00:00
TablesSettings.t Bug 41042: default_save_state is enabled by default 2025-10-23 11:33:32 -06:00
Tags.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
Templates.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
TestBuilder.t Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
Upload.t Bug 38944: Add Test::NoWarnings to tests no producing warnings 2025-03-13 17:25:03 +01:00
UsageStats.t Bug 42764: Fix spelling errors across the codebase 2026-06-03 16:09:04 +00:00
Virtualshelves.t Bug 18148: Add unit tests 2025-11-05 07:12:35 -07:00
XISBN.t Bug 38664: Tidy the whole codebase 2025-02-11 14:58:24 +01:00
XSLT.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
check_kohastructure.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
check_sysprefs.t Bug 42734: Add autoMemberNumValue to patrons sysprefs UI with caution note 2026-06-19 15:39:01 +00:00
db_structure.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
rollingloans.t Bug 40680: Fix t tests 2025-12-01 08:34:01 -07:00
sysprefs.t Bug 40163: (follow-up) Fix wrong GNU links and update test 2025-09-24 09:25:04 -06:00
yaml.t Bug 38944: Manual changes 2025-03-13 17:25:04 +01:00
zebra_config.pl Bug 38664: Tidy the whole codebase 2025-02-11 14:58:24 +01:00