Blame SOURCES/0049-Ticket-49267-autosize-split-of-0-results-in-dbcache-.patch

b69e47
From e52c519a8553dd8abee5740714054ebbdd59e51a Mon Sep 17 00:00:00 2001
b69e47
From: William Brown <firstyear@redhat.com>
b69e47
Date: Tue, 23 May 2017 11:03:24 +1000
b69e47
Subject: [PATCH] Ticket 49267 - autosize split of 0 results in dbcache of 0
b69e47
b69e47
Bug Description:  autosize split of 0 results in a dbcache of 0. This was
b69e47
due to a missing bounds check on the value for 0. In theory this could
b69e47
still be problematic if the value was say 1% ... But hopefully we don't
b69e47
see that :)
b69e47
b69e47
Fix Description:  Add the bounds check.
b69e47
b69e47
https://pagure.io/389-ds-base/issue/49267
b69e47
b69e47
Author: wibrown
b69e47
b69e47
Review by: mreynolds (Thanks!)
b69e47
b69e47
(cherry picked from commit 22d4865ea20acb6e6c11aed10d09241b09bb711c)
b69e47
---
b69e47
 ldap/servers/slapd/back-ldbm/start.c | 14 +++++++++++++-
b69e47
 1 file changed, 13 insertions(+), 1 deletion(-)
b69e47
b69e47
diff --git a/ldap/servers/slapd/back-ldbm/start.c b/ldap/servers/slapd/back-ldbm/start.c
b69e47
index a207bd8..1834a19 100644
b69e47
--- a/ldap/servers/slapd/back-ldbm/start.c
b69e47
+++ b/ldap/servers/slapd/back-ldbm/start.c
b69e47
@@ -101,7 +101,11 @@ ldbm_back_start_autotune(struct ldbminfo *li) {
b69e47
     /* This doesn't control the availability of the feature, so we can take the
b69e47
      * default from ldbm_config.c
b69e47
      */
b69e47
-    autosize_db_percentage_split = li->li_cache_autosize_split;
b69e47
+    if (li->li_cache_autosize_split == 0) {
b69e47
+        autosize_db_percentage_split = 40;
b69e47
+    } else {
b69e47
+        autosize_db_percentage_split = li->li_cache_autosize_split;
b69e47
+    }
b69e47
 
b69e47
 
b69e47
     /* Check the values are sane. */
b69e47
@@ -131,10 +135,18 @@ ldbm_back_start_autotune(struct ldbminfo *li) {
b69e47
     db_size = (autosize_db_percentage_split * zone_size) / 100;
b69e47
 
b69e47
     /* Cap the DB size at 512MB, as this doesn't help perf much more (lkrispen's advice) */
b69e47
+    /* NOTE: Do we need a minimum DB size? */
b69e47
     if (db_size > (512 * MEGABYTE)) {
b69e47
         db_size = (512 * MEGABYTE);
b69e47
     }
b69e47
 
b69e47
+    /* NOTE: Because of how we workout entry_size, even if
b69e47
+     * have autosize split to say ... 90% for dbcache, because
b69e47
+     * we cap db_size, we use zone_size - db_size, meaning that entry
b69e47
+     * cache still gets the remaining memory *even* though we didn't use it all.
b69e47
+     * If we didn't do this, entry_cache would only get 10% of of the avail, even
b69e47
+     * if db_size was caped at say 5% down from 90.
b69e47
+     */
b69e47
     if (backend_count > 0 ) {
b69e47
         /* Number of entry cache pages per backend. */
b69e47
         entry_size = (zone_size - db_size) / backend_count;
b69e47
-- 
b69e47
2.9.4
b69e47