Koha-clms/circ
Jonathan Druart 979bc2e6fa Bug 18966: Do not deal with duplicate issue_id on checkin
Koha suffers of big bugs due to its history: When data are deleted, they are moved to another tables.
For instance issues and old_issues: when a checkin is done, it is moved to the old_issues table.
That leads to a main problem that is described on https://wiki.koha-community.org/wiki/DBMS_auto_increment_fix

However we tried first to fix the problem (for issues/old_issues) at code level on bug 18242.
The goal was to prevent data lost.
Data lost may happens in this case:
Check an item out (issue_id = 1)
Check an item in (issue_id = 1)
Restart MySQL (reset auto increment for issue_id to 1)
Check an item out (issue_id = 1)
Check an item in => BOOM, the issue_id is a PK in old_issues and the move fails.
Before bug 18242 the data were lost, we inserted the value into old_issues, which fails silently (because of RaiseError set to 0 in Koha::Database), then delete the row from issues.
That has been fixed using a transaction.

This patch introduced a regression we tried to fix on bug 18651 comment 0, the patron was charged even if the checkin was rejected.
A good way to fix that would have been to LOCK the tables:
1- Start a transaction
2- LOCK the table to make sure nobody will read id and avoid race conditions
3- Move the content from one table to the other, dealing with ids
4- UNLOCK the table
5- Commit the transaction
But there were problems using LOCK and DBIx::Class (See commit 905572910b - Do no LOCK/UNLOCK the table).

Finally the solution implemented is not acceptable for several reasons:
- batch checkins may fail
- issue_id will always stay out of sync (between issues and old_issues)
See 18651 comment 66.

Since the next stable releases are very soon, and we absolutely need to fix this problem, I am suggesting to:
1- Execute the move in a transaction to avoid data lost and reject the checkin if we face IDs dup
=> It will only reject 1 checkin (max is 1 * MySQL restart), no need to deal with race conditions,
2- Display a warning on the checkin page and link to a solution/explanation
3- Communicate as much as we can on the proper fix: Update auto increment values when the DBMS is restarted - https://wiki.koha-community.org/wiki/DBMS_auto_increment_fix
4- Display a warning on the about page for corrupted data (see bug 18931)
5- Write and make available a maintenance script to fix corrupted data (TODO LATER)

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Mason James <mtj@kohaaloha.com>
2017-07-25 11:51:43 +12:00
..
add_message.pl Bug 15632: Koha::Patron::Messages - (follow-up) Remove AddMessage 2016-03-03 21:22:15 +00:00
bookcount.pl Bug 14890: Simplify processing to display a date with hours 2015-10-08 10:59:05 -03:00
branchoverdues.pl Bug 9978: (followup) Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:43 -03:00
branchtransfers.pl Bug 12045 - Transfer impossible if barcode includes spaces 2016-01-27 01:08:01 +00:00
circulation-home.pl Bug 9978: (followup) Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:43 -03:00
circulation.pl Bug 18423 - Add child button not always appearing - problem in template variable 2017-04-30 23:19:58 +12:00
del_message.pl Bug 15632: Koha::Patron::Messages - Remove DeleteMessage 2016-03-03 21:22:13 +00:00
hold-transfer-slip.pl Bug 13482: Prevent race condition on printing a ReserveSlip 2015-04-22 16:32:15 -03:00
offline-mf.pl Bug 11944: use CGI( -utf8 ) everywhere 2015-01-13 13:07:21 -03:00
offline.pl Bug 11944: use CGI( -utf8 ) everywhere 2015-01-13 13:07:21 -03:00
on-site_checkouts.pl Bug 11201: Add a in-house use list pages 2015-03-31 11:30:55 -03:00
overdue.pl Bug 17001: fix due date filter on the overdue report 2016-08-23 12:49:38 +02:00
pendingreserves.pl Bug 16991: Add subtitle to holds to pull report 2016-12-12 14:54:07 +13:00
renew.pl Bug 15462 - Unable to renew books via circ/renew.pl 2016-01-07 18:21:21 +00:00
reserveratios.pl Bug 15672: (follow-up) Show descriptions instead of codes on the hold ratios report 2016-03-23 21:07:04 +00:00
returns.pl Bug 18966: Do not deal with duplicate issue_id on checkin 2017-07-25 11:51:43 +12:00
selectbranchprinter.pl Bug 16154: CGI->multi_param - Force scalar context 2016-04-26 23:16:43 +00:00
transfer-slip.pl Bug 9978: Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:38 -03:00
transferstoreceive.pl Bug 15344: Remove some other calls of GetMemberDetails from pl scripts 2015-12-30 11:53:18 +00:00
view_holdsqueue.pl Bug 9978: (followup) Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:43 -03:00
waitingreserves.pl Bug 17010 - Canceling a hold awaiting pickup no longer alerts librarian about next hold 2016-09-15 17:05:36 +02:00
ypattrodue-attr-search-authvalue.pl Bug 9978: (followup) Replace license header with the correct license (GPLv3+) 2015-04-20 09:59:43 -03:00
ysearch.pl Bug 15548: Move new patron related code to Patron* 2016-03-03 14:38:26 -07:00