Blame SOURCES/0052-Ticket-49257-Reject-nsslapd-cachememsize-nsslapd-cac.patch

61f723
From 0f04c8e7c1219940baf0ae9c1bcb2464ddf079df Mon Sep 17 00:00:00 2001
61f723
From: Mark Reynolds <mreynolds@redhat.com>
61f723
Date: Tue, 16 May 2017 13:19:43 -0400
61f723
Subject: [PATCH] Ticket 49257 - Reject nsslapd-cachememsize &
61f723
 nsslapd-cachesize when nsslapd-cache-autosize is set
61f723
61f723
Description:  We need to also reject entry cache changes when cache autosizing is being used.
61f723
61f723
              I also found out that we were not registering the ldbm instance callbacks at startup.
61f723
              So all those functions were only used when creating an instance, and not after it was
61f723
              started.
61f723
61f723
https://pagure.io/389-ds-base/issue/49257
61f723
61f723
Reviewed by: tbordaz(Thanks!)
61f723
---
61f723
 ldap/servers/slapd/back-ldbm/instance.c            | 19 +++++++++----
61f723
 .../servers/slapd/back-ldbm/ldbm_instance_config.c | 32 ++++++++++++++++++++--
61f723
 ldap/servers/slapd/back-ldbm/start.c               |  2 +-
61f723
 3 files changed, 44 insertions(+), 9 deletions(-)
61f723
61f723
diff --git a/ldap/servers/slapd/back-ldbm/instance.c b/ldap/servers/slapd/back-ldbm/instance.c
61f723
index f79d048..8b38644 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/instance.c
61f723
+++ b/ldap/servers/slapd/back-ldbm/instance.c
61f723
@@ -302,12 +302,19 @@ ldbm_instance_startall(struct ldbminfo *li)
61f723
         inst = (ldbm_instance *) object_get_data(inst_obj);
61f723
         ldbm_instance_set_flags(inst);
61f723
         rc1 = ldbm_instance_start(inst->inst_be);
61f723
-    if (rc1 != 0) {
61f723
-        rc = rc1;
61f723
-    } else {
61f723
-        vlv_init(inst);
61f723
-        slapi_mtn_be_started(inst->inst_be);
61f723
-    }
61f723
+        if (rc1 != 0) {
61f723
+            rc = rc1;
61f723
+        } else {
61f723
+            if(ldbm_instance_config_load_dse_info(inst) != 0){
61f723
+                slapi_log_err(SLAPI_LOG_ERR, "ldbm_instance_startall",
61f723
+                    "Loading database instance configuration failed for (%s)\n",
61f723
+                    inst->inst_name);
61f723
+                rc = -1;
61f723
+            } else {
61f723
+                vlv_init(inst);
61f723
+                slapi_mtn_be_started(inst->inst_be);
61f723
+            }
61f723
+        }
61f723
         inst_obj = objset_next_obj(li->li_instance_set, inst_obj);
61f723
     }
61f723
 
61f723
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
index 55f1887..49a6cac 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
+++ b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
@@ -72,6 +72,18 @@ ldbm_instance_config_cachesize_set(void *arg, void *value, char *errorbuf, int p
61f723
     /* Do whatever we can to make sure the data is ok. */
61f723
 
61f723
     if (apply) {
61f723
+        if (CONFIG_PHASE_RUNNING == phase) {
61f723
+            if (val > 0 && inst->inst_li->li_cache_autosize) {
61f723
+                /* We are auto-tuning the cache, so this change would be overwritten - return an error */
61f723
+                slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
61f723
+                    "Error: \"nsslapd-cachesize\" can not be updated while \"nsslapd-cache-autosize\" is set "
61f723
+                    "in \"cn=config,cn=ldbm database,cn=plugins,cn=config\".");
61f723
+                slapi_log_err(SLAPI_LOG_ERR, "ldbm_instance_config_cachesize_set",
61f723
+                    "\"nsslapd-cachesize\" can not be set while \"nsslapd-cache-autosize\" is set "
61f723
+                    "in \"cn=config,cn=ldbm database,cn=plugins,cn=config\".\n");
61f723
+                return LDAP_UNWILLING_TO_PERFORM;
61f723
+            }
61f723
+        }
61f723
         cache_set_max_entries(&(inst->inst_cache), val);
61f723
     }
61f723
 
61f723
@@ -87,7 +99,11 @@ ldbm_instance_config_cachememsize_get(void *arg)
61f723
 }
61f723
 
61f723
 static int 
61f723
-ldbm_instance_config_cachememsize_set(void *arg, void *value, char *errorbuf, int phase, int apply) 
61f723
+ldbm_instance_config_cachememsize_set(void *arg,
61f723
+                                      void *value,
61f723
+                                      char *errorbuf,
61f723
+                                      int phase,
61f723
+                                      int apply)
61f723
 {
61f723
     ldbm_instance *inst = (ldbm_instance *) arg;
61f723
     int retval = LDAP_SUCCESS;
61f723
@@ -107,6 +123,18 @@ ldbm_instance_config_cachememsize_set(void *arg, void *value, char *errorbuf, in
61f723
      */
61f723
 
61f723
     if (apply) {
61f723
+        if (CONFIG_PHASE_RUNNING == phase) {
61f723
+            if (val > 0 && inst->inst_li->li_cache_autosize) {
61f723
+                /* We are auto-tuning the cache, so this change would be overwritten - return an error */
61f723
+                slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
61f723
+                    "Error: \"nsslapd-cachememsize\" can not be updated while \"nsslapd-cache-autosize\" is set "
61f723
+                    "in \"cn=config,cn=ldbm database,cn=plugins,cn=config\".");
61f723
+                slapi_log_err(SLAPI_LOG_ERR, "ldbm_instance_config_cachememsize_set",
61f723
+                    "\"nsslapd-cachememsize\" can not be set while \"nsslapd-cache-autosize\" is set "
61f723
+                    "in \"cn=config,cn=ldbm database,cn=plugins,cn=config\".\n");
61f723
+                return LDAP_UNWILLING_TO_PERFORM;
61f723
+            }
61f723
+        }
61f723
         if (val > inst->inst_cache.c_maxsize) {
61f723
             delta = val - inst->inst_cache.c_maxsize;
61f723
             delta_original = delta;
61f723
@@ -825,7 +853,7 @@ ldbm_instance_modify_config_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entryB
61f723
                 continue;
61f723
             }
61f723
 
61f723
-        /* This assumes there is only one bval for this mod. */
61f723
+            /* This assumes there is only one bval for this mod. */
61f723
             if (mods[i]->mod_bvalues == NULL) {
61f723
                 /* This avoids the null pointer deref.
61f723
                  * In ldbm_config.c ldbm_config_set, it checks for the NULL.
61f723
diff --git a/ldap/servers/slapd/back-ldbm/start.c b/ldap/servers/slapd/back-ldbm/start.c
61f723
index 1834a19..d4e8bb8 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/start.c
61f723
+++ b/ldap/servers/slapd/back-ldbm/start.c
61f723
@@ -169,7 +169,7 @@ ldbm_back_start_autotune(struct ldbminfo *li) {
61f723
     }
61f723
 
61f723
     slapi_log_err(SLAPI_LOG_NOTICE, "ldbm_back_start", "found %luk physical memory\n", mi->system_total_bytes / 1024);
61f723
-    slapi_log_err(SLAPI_LOG_NOTICE, "ldbm_back_start", "found %luk avaliable\n", mi->system_available_bytes / 1024);
61f723
+    slapi_log_err(SLAPI_LOG_NOTICE, "ldbm_back_start", "found %luk available\n", mi->system_available_bytes / 1024);
61f723
 
61f723
     /* We've now calculated the autotuning values. Do we need to apply it?
61f723
      * we use the logic of "if size is 0, or autosize is > 0. This way three
61f723
-- 
61f723
2.9.4
61f723