|
|
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 |
|