From 35fc9c10032a4b130d9861efb36f112112294e57 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatetsolutions.com>
Date: Tue, 6 Mar 2018 13:29:22 -0500
Subject: [PATCH] Bug 18909: Enable the maximum zebra records size to be
 specified per instance

The default for Zebra is to not return results where the record size is
greater than 1045 KB ( 1 MB ). Some libraries need to increase this
ceiling, but it may come at a cost with z39.50 compatibility with other
services. For that reason, we should make this setting configurable on a
per-instance basis.

Test plan for kohadevbox:
1) Apply this patch
2) Run:
   $ reset_all
3) Restart Zebra:
   $ sudo koha-zebra --restart kohadev
4) Check how zebrasrv was called:
   $ ps waux | grep zebrasrv
=> SUCCESS: Looks like
 ... /usr/bin/zebrasrv -v none,fatal,warn -k 1024
5) Edit /etc/koha/sites/kohadev/koha-conf.xml, add:
   <zebra_max_record_size>2048</zebra_max_record_size>
6) Repeat (3) and (4)
=> SUCCESS: Looks like
 ... /usr/bin/zebrasrv -v none,fatal,warn -k 2048
7) Sign off :-D

General test plan:
1) Apply this patch
2) Build a Debian package
3) Specify a zebra_max_record_size of 2048 in your koha_conf.xml
4) Restart zebra
5) Index a record greater than 1 MB but smaller than 2 MB
6) Note that it is searchable!

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Hugo Agud <hagud@orex.es>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 8c0c6be7488e0543662e47006ded12e74ae4eb8d)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 debian/scripts/koha-functions.sh       | 11 +++++++++++
 debian/scripts/koha-zebra              |  2 ++
 debian/templates/koha-conf-site.xml.in |  1 +
 3 files changed, 14 insertions(+)

diff --git a/debian/scripts/koha-functions.sh b/debian/scripts/koha-functions.sh
index 6e189b6c94..c6f79b4933 100755
--- a/debian/scripts/koha-functions.sh
+++ b/debian/scripts/koha-functions.sh
@@ -254,6 +254,17 @@ get_loglevels()
     fi
 }
 
+get_max_record_size()
+{
+    local instancename=$1
+    local retval=$(xmlstarlet sel -t -v 'yazgfs/config/zebra_max_record_size' /etc/koha/sites/$instancename/koha-conf.xml)
+    if [ "$retval" != "" ]; then
+        echo "$retval"
+    else
+        echo "1024"
+    fi
+}
+
 get_tmpdir()
 {
     if [ "$TMPDIR" != "" ]; then
diff --git a/debian/scripts/koha-zebra b/debian/scripts/koha-zebra
index f6d2268c7e..0bd11aa7bc 100755
--- a/debian/scripts/koha-zebra
+++ b/debian/scripts/koha-zebra
@@ -61,6 +61,7 @@ start_zebra()
 
     # get zebra log levels from koha-conf.xml
     local loglevels=$(get_loglevels ${name})
+    local max_record_size=$(get_max_record_size ${name})
 
     if ! is_zebra_running $name; then
 
@@ -76,6 +77,7 @@ start_zebra()
                     --user=${name}-koha.${name}-koha"
 
         ZEBRA_PARAMS="-v $loglevels \
+                      -k $max_record_size \
                       -f /etc/koha/sites/${name}/koha-conf.xml"
 
         [ "$verbose" != "no" ] && \
diff --git a/debian/templates/koha-conf-site.xml.in b/debian/templates/koha-conf-site.xml.in
index d2e38151fa..2cd9688727 100644
--- a/debian/templates/koha-conf-site.xml.in
+++ b/debian/templates/koha-conf-site.xml.in
@@ -296,6 +296,7 @@ __END_SRU_PUBLICSERVER__
  <useshibboleth>0</useshibboleth><!-- see C4::Auth_with_shibboleth for extra configs you must do to turn this on -->
  <zebra_lockdir>/var/lock/koha/__KOHASITE__</zebra_lockdir>
  <use_zebra_facets>1</use_zebra_facets>
+ <zebra_max_record_size>1024</zebra_max_record_size>
  <queryparser_config>/etc/koha/searchengine/queryparser.yaml</queryparser_config>
  <log4perl_conf>__KOHA_CONF_DIR__/log4perl.conf</log4perl_conf>
  <!-- Uncomment/edit next setting if you want to adjust zebra log levels.
-- 
2.39.5