Koha/C4
Jared Camins-Esakov b07f4debb7 Bug 9434: Introduce new tied cache system
At the moment we cache numerous pieces of information in module-level
variables which then do not get updated in other threads/processes when
they are changed by the user. This is a serious usability issue.

Examples of this include the way we treat sysprefs (there is now a
method to disable the syspref cache, but by default it is enabled),
notices, frameworks, field mappings, and koha-conf.xml, at least.

This patch sets the stage for eliminating this problem by making it
possible to convert module-level cache variables into variables that
are actually backed by whatever caching system may be configured. This
is done through a special Koha::Cache::Object class which can be tied
to the variables that are being used for caching and provided with a
constructor method/closure to allow the cache to be reloaded when it
expires. For example:

    my $cache    = Koha::Cache->new();
    my $data     = 'whatever';
    my $variable = Koha::Cache->create_scalar(
        {
            'key'         => 'whatever',
            'timeout'     => 2,
            'constructor' => sub { return $data; },
        }
    );
    print "$$variable\n"; # Prints "whatever"

The one change this necessitates for accessing the data is that the
variable must be dereferenced an additional time before use (i.e.
$$variable instead of $variable). There is no difference when the
variable tied is a hash (created with Koha::Cache->create_hash). This
is a small price to pay for Koha working in a multi-threaded, persistent
environment. This change will also make caching easier in general.

CHI was incompatible with the variable tying, so this patch also removes
the dependency on CHI, using instead Cache::Memcached::Fast,
Cache::FastMmap, and Cache::Memory, when they are available.

To test:
1) Apply patch.
2) Run unit test t/Cache.t (after setting the MEMCACHED_SERVERS and
   CACHING_SYSTEM environment variables). As no changes were made to
   the tests already in that file, this passing demonstrates there
   are no regressions.
3) With memcached caching enabled (you must set the MEMCACHED_SERVERS
   and CACHING_SYSTEM environment variables) and DEBUG turned on (i.e.
   the DEBUG environment variable set to 1), try running a report via
   the web service ([intranet]/cgi-bin/koha/svc/report?id=1 and check
   your web server logs to confirm that there are messages like
   "get_from_cache for intranet:report:id:1" in them.
4) If the reports worked, sign off.

NOTE: Technically you could test this without needing memcached by
installing libcache-fastmmap-perl and setting CACHING_SYSTEM to
'fastmmap' instead of 'memcached'. You could also install libcache-perl
and set CACHING_SYSTEM to 'memory' but there would be little point as
the cached variables would go out of scope in between runs.

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>

Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
2013-03-20 15:15:44 -04:00
..
AuthoritiesMarc Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Barcodes Bug 6679 - [SIGNED-OFF] fix 6 perlcritic violations in C4/Barcodes/hbyymmincr.pm 2012-09-20 12:01:36 +02:00
ClassSortRoutine Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Creators Bug 6679 - [SIGNED-OFF] fix 4 perlcritic violations in C4/Creators/PDF.pm 2012-09-20 12:17:07 +02:00
External Bug 6679 - fix 12 perlcritic violations in C4/External/BakerTaylor.pm 2012-09-20 11:38:45 +02:00
Form Talking Tech Support - Phase I - Followup - Fix Messaging Preferences 2012-06-10 17:46:58 +02:00
Heading Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
ILSDI Bug 9019: Return item fields in ILS-DI GetRecords 2012-12-11 08:33:04 -05:00
Installer Bug 9434: Introduce new tied cache system 2013-03-20 15:15:44 -04:00
Labels Bug 6448 [3/3] EAN-13 barcode labels 2012-08-02 18:41:36 +02:00
Linker Bug 8447: Make sure we have enough subfields for broader_headings 2012-09-14 14:56:48 +02:00
Members Bug 7919: Fix unit test (Members_AttributeTypes.t) 2012-12-07 18:26:37 -05:00
OAI Bug 6440: Implement OAI-PMH Sets 2012-03-20 11:38:26 +01:00
Output Fix FSF address in directory C4/ 2010-03-16 20:17:56 -04:00
Patroncards Bug 8315 - remove use C4::* version 2012-07-13 14:17:20 +02:00
Reports Bug 7993 follow-up to fix POD DOC 2012-09-19 12:12:43 +02:00
Search Bug 5385: POD Cleanups (part 1) 2010-11-12 10:06:55 +13:00
SIP Bug 9343: handles the new format of Debarred 2013-01-22 20:01:06 -05:00
Utils Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
VirtualShelves Bug 9458 - Add sorting to lists - QA Followup 3 2013-03-13 09:06:20 -04:00
Accounts.pm Bug 9293 - action_logs not tracking payments 2013-03-11 17:59:17 -04:00
Acquisition.pm Bug 9455: Remove unnecessary quoting from sql 2013-02-20 08:23:13 -05:00
Auth.pm Bug 7804 - Add Koha Plugin System 2013-03-20 14:49:47 -04:00
Auth_cas_servers.yaml.orig Bug 5630 CAS improvements 2011-10-13 10:49:49 +13:00
Auth_with_cas.pm Bug 8279: CAS Debugging improvements 2012-06-27 18:05:02 +02:00
Auth_with_ldap.pm Bug 8919 - ExtendedPatronAttributes not populated from LDAP 2012-11-08 12:42:52 -05:00
AuthoritiesMarc.pm Bug 7440 follow-up removing forgotten NoZebra references 2013-03-19 21:17:05 -04:00
BackgroundJob.pm Bug 6679 - [SIGNED-OFF] fix 2 perlcritic violations in C4/BackgroundJob.pm 2012-09-20 12:01:40 +02:00
Barcodes.pm Bug 6679 - [SIGNED-OFF] fix 8 perlcritic violations in C4/Barcodes.pm 2012-09-20 12:01:36 +02:00
Biblio.pm Bug 7440 - Remove NoZebra vestiges 2013-03-19 21:17:04 -04:00
Bookseller.pm Bug 8164: Replace IFNULL with COALESCE 2012-11-28 19:08:29 -05:00
Boolean.pm Bug 9827: remove 'insecure' system preference 2013-03-19 21:46:34 -04:00
Branch.pm Follow-up Bug 5634: Ordering branches should be case independent 2012-12-21 07:42:18 -05:00
Breeding.pm 9105: Followup for closing Zoom connections 2013-02-12 08:49:58 -05:00
Budgets.pm Bug 7919: Followup: Fix plural and GetAuthvalueDropbox 2012-12-05 10:10:58 -05:00
Calendar.pm Bug 7351 : feature that allows to delete a range of dates 2012-09-28 12:19:45 +02:00
Category.pm Bug 7919: FIX the "all" categories method 2013-01-02 16:50:52 -05:00
Charset.pm Bug 8347 - Koha forces UNIMARC 100 field code language to 'fre' 2013-02-20 09:06:57 -05:00
Circulation.pm Bug 9423: Add notforloan value to issue confirmation or blocking message 2013-03-19 22:22:23 -04:00
ClassSortRoutine.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
ClassSource.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Context.pm Bug 9827: remove 'insecure' system preference 2013-03-19 21:46:34 -04:00
Contract.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Creators.pm Bug 8315 - remove use C4::* version 2012-07-13 14:17:20 +02:00
Csv.pm Bug 7986: Export issues for patron 2012-09-13 17:58:30 +02:00
Dates.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Debug.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Heading.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
HoldsQueue.pm Bug 8890: C4/HoldsQueue requires DB 2012-10-24 17:52:36 +02:00
HTML5Media.pm Bug 8377: Followup move style in a css file and do not pass template to a pm 2012-12-27 09:28:00 -05:00
Images.pm Bug 8710 - Don't show the images tab in the OPAC if the record has no local images 2012-11-28 18:54:40 -05:00
ImportBatch.pm Bug 7368: Update GetXmlBiblio documentation 2012-12-27 10:14:19 -05:00
ImportExportFramework.pm Bug 6679 - [SIGNED-OFF] fix 15 perlcritic violations in C4/ImportExportFramework.pm 2012-09-20 12:00:55 +02:00
Input.pm Bug 7919 : Display of values depending on the connexion library 2012-12-05 10:10:57 -05:00
Installer.pm Bug 7440 - Remove NoZebra vestiges 2013-03-19 21:17:04 -04:00
ItemCirculationAlertPreference.pm Bug 6679 - [SIGNED-OFF] fix 2 perlcritic violations in C4/ItemCirculationAlertPreference.pm 2012-09-20 12:01:39 +02:00
Items.pm Bug 7440 - Remove NoZebra vestiges 2013-03-19 21:17:04 -04:00
ItemType.pm Bug 4330 : Adding copyright headers and fixing FSF addresses 2012-05-28 17:54:25 +02:00
Koha.pm Bug 9341: Problem with UNIMARC authors facets 2013-03-19 20:37:29 -04:00
Labels.pm Bug 8315 - remove use C4::* version 2012-07-13 14:17:20 +02:00
Languages.pm Bug 8954: Make languages list in advanced search translatable (revision 1) 2012-11-20 14:39:56 -05:00
Letters.pm Bug 9103: overdue_notices.pl should use AutoEmailPrimaryAddress syspref 2013-03-19 22:50:39 -04:00
Linker.pm Bug 7284: Fix unit test broken by erroneous POD 2012-03-08 15:24:18 +01:00
Log.pm Bug 7067 - OPAC Borrower Self Registration 2012-12-14 08:08:59 -05:00
Maintainance.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Matcher.pm Bug 9239: Allow the use of QueryParser for all queries 2013-03-16 21:32:32 -04:00
Members.pm Bug 9103: overdue_notices.pl should use AutoEmailPrimaryAddress syspref 2013-03-19 22:50:39 -04:00
Message.pm Bug 6679 - [SIGNED-OFF] fix 3 perlcritic violations in C4/Message.pm 2012-09-20 12:01:39 +02:00
NewsChannels.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Output.pm Bug 9504: URL escape in OPAC more searches 2013-03-20 08:36:44 -04:00
Overdues.pm Bug 4906: Allow fine calculation to exclude grace period 2013-03-16 21:47:21 -04:00
Patroncards.pm Bug 8315 - remove use C4::* version 2012-07-13 14:17:20 +02:00
Print.pm Bug 6679 - [SIGNED-OFF] fix 2 perlcritic violations in C4/Print.pm 2012-09-20 12:17:43 +02:00
Ratings.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Record.pm Bug 7986: Export issues for patron 2012-09-13 17:58:30 +02:00
Reports.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Reserves.pm Bug 9103: overdue_notices.pl should use AutoEmailPrimaryAddress syspref 2013-03-19 22:50:39 -04:00
Review.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Ris.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
RotatingCollections.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Scheduler.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Scrubber.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Search.pm Bug 7440 follow-up removing forgotten NoZebra references 2013-03-19 21:17:05 -04:00
Serials.pm Bug 8443: Suggestions publication year and copyright date (follow-up 1) Comments corrections 2013-01-15 22:10:59 -05:00
Service.pm POD Cleanups 2010-06-09 08:38:59 -04:00
ShelfBrowser.pm Bug 6679 - [SIGNED-OFF] fix 4 perlcritic violations in C4/ShelfBrowser.pm 2012-09-20 12:01:37 +02:00
SMS.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
SocialData.pm bug 7470 follow-up, fix POD doc 2012-03-26 17:53:28 +02:00
SQLHelper.pm Bug 6679 - [SIGNED-OFF] fix 3 perlcritic violations in C4/SQLHelper.pm 2012-09-20 12:01:38 +02:00
Stats.pm Bug 4118 - Add Collection Code to Statistics Table 2012-09-13 18:42:46 +02:00
Suggestions.pm Bug 8443: Suggestions publication year and copyright date (follow-up 2) Cosmetic changes and perltidy formatting 2013-01-15 22:10:59 -05:00
Tags.pm Bug 9136: C4::Tags not Plack-compatible 2012-12-22 15:47:48 -05:00
Templates.pm Bug 7804 - Add Koha Plugin System 2013-03-20 14:49:47 -04:00
TmplToken.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
TmplTokenType.pm Revert "Bug 6679 - [SIGNED-OFF] fix 9 perlcritic violations in C4/TmplTokenType.pm" 2012-09-20 13:29:59 +02:00
TTParser.pm Bug 5327 : Follow up for TTParser test 2012-07-12 16:06:21 +02:00
UploadedFile.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
Utils.pm Bug 6679 - [SIGNED-OFF] fix 2 perlcritic violations in C4/Utils.pm 2012-09-20 12:01:39 +02:00
VirtualShelves.pm Bug 9458 - Add sorting to lists - QA Followup 2 2013-03-13 09:06:19 -04:00
XISBN.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00
XSLT.pm Bug 9367: Code optimization: CheckReserves is too often called 2013-03-16 11:49:43 -04:00
Z3950.pm Bug 7941 : Fix version numbers in modules 2012-06-11 17:29:38 +02:00