summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2018-08-20 15:01:50 +1000
committerKarolin Seeger <kseeger@samba.org>2018-08-28 10:59:16 +0200
commit75261d6a6d324f5424df7810268b633531b7e72d (patch)
tree3a39037c81524832f0bc214ab9dd2edc5f3e674e
parent5f346ce08db333d35b5dc18725fe976eb5cac8c7 (diff)
downloadsamba-75261d6a6d324f5424df7810268b633531b7e72d.tar.gz
ctdb-config: Switch tunable TDBMutexEnabled to a config option
Use the "database:tdb mutexes" option instead. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13589 Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com> (cherry picked from commit f42486e8912eee45eb75d27b753bb74c3b37d80b)
-rw-r--r--ctdb/common/tunable.c2
-rw-r--r--ctdb/database/database_conf.c21
-rw-r--r--ctdb/database/database_conf.h3
-rw-r--r--ctdb/doc/ctdb-tunables.7.xml11
-rw-r--r--ctdb/doc/ctdb.1.xml1
-rw-r--r--ctdb/doc/ctdb.conf.5.xml17
-rw-r--r--ctdb/server/ctdb_config.c4
-rw-r--r--ctdb/server/ctdb_config.h1
-rw-r--r--ctdb/server/ctdb_ltdb_server.c7
-rwxr-xr-xctdb/tests/cunit/config_test_001.sh1
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.setup.002.sh2
-rw-r--r--ctdb/tests/eventscripts/scripts/00.ctdb.sh1
-rwxr-xr-xctdb/tests/tool/ctdb.listvars.001.sh1
13 files changed, 52 insertions, 20 deletions
diff --git a/ctdb/common/tunable.c b/ctdb/common/tunable.c
index 4c1714cee2d..e9367980753 100644
--- a/ctdb/common/tunable.c
+++ b/ctdb/common/tunable.c
@@ -145,7 +145,7 @@ static struct {
offsetof(struct ctdb_tunable_list, no_ip_host_on_all_disabled) },
{ "Samba3AvoidDeadlocks", 0, true,
offsetof(struct ctdb_tunable_list, samba3_hack) },
- { "TDBMutexEnabled", 1, false,
+ { "TDBMutexEnabled", 1, true,
offsetof(struct ctdb_tunable_list, mutex_enabled) },
{ "LockProcessesPerDB", 200, false,
offsetof(struct ctdb_tunable_list, lock_processes_per_db) },
diff --git a/ctdb/database/database_conf.c b/ctdb/database/database_conf.c
index 0333ce0a0a5..6bdb372bf03 100644
--- a/ctdb/database/database_conf.c
+++ b/ctdb/database/database_conf.c
@@ -54,6 +54,22 @@ static bool check_static_string_change(const char *key,
return true;
}
+static bool check_static_boolean_change(const char *key,
+ bool old_value,
+ bool new_value,
+ enum conf_update_mode mode)
+{
+ if (mode == CONF_MODE_RELOAD || CONF_MODE_API) {
+ if (old_value != new_value) {
+ D_WARNING("Ignoring update of [%s] -> %s\n",
+ DATABASE_CONF_SECTION,
+ key);
+ }
+ }
+
+ return true;
+}
+
static bool database_conf_validate_lock_debug_script(const char *key,
const char *old_script,
const char *new_script,
@@ -141,4 +157,9 @@ void database_conf_init(struct conf_context *conf)
DATABASE_CONF_LOCK_DEBUG_SCRIPT,
NULL,
database_conf_validate_lock_debug_script);
+ conf_define_boolean(conf,
+ DATABASE_CONF_SECTION,
+ DATABASE_CONF_TDB_MUTEXES,
+ true,
+ check_static_boolean_change);
}
diff --git a/ctdb/database/database_conf.h b/ctdb/database/database_conf.h
index 4891b0053b6..6fa579c1502 100644
--- a/ctdb/database/database_conf.h
+++ b/ctdb/database/database_conf.h
@@ -27,7 +27,8 @@
#define DATABASE_CONF_VOLATILE_DB_DIR "volatile database directory"
#define DATABASE_CONF_PERSISTENT_DB_DIR "persistent database directory"
#define DATABASE_CONF_STATE_DB_DIR "state database directory"
-#define DATABASE_CONF_LOCK_DEBUG_SCRIPT "lock debug script"
+#define DATABASE_CONF_LOCK_DEBUG_SCRIPT "lock debug script"
+#define DATABASE_CONF_TDB_MUTEXES "tdb mutexes"
void database_conf_init(struct conf_context *conf);
diff --git a/ctdb/doc/ctdb-tunables.7.xml b/ctdb/doc/ctdb-tunables.7.xml
index a925ca5ab1f..db3dd209760 100644
--- a/ctdb/doc/ctdb-tunables.7.xml
+++ b/ctdb/doc/ctdb-tunables.7.xml
@@ -661,17 +661,6 @@ MonitorInterval=20
</refsect2>
<refsect2>
- <title>TDBMutexEnabled</title>
- <para>Default: 1</para>
- <para>
- This parameter enables TDB_MUTEX_LOCKING feature on volatile
- databases if the robust mutexes are supported. This optimizes the
- record locking using robust mutexes and is much more efficient
- that using posix locks.
- </para>
- </refsect2>
-
- <refsect2>
<title>TickleUpdateInterval</title>
<para>Default: 20</para>
<para>
diff --git a/ctdb/doc/ctdb.1.xml b/ctdb/doc/ctdb.1.xml
index 5c3ce410c0c..da699ff89f0 100644
--- a/ctdb/doc/ctdb.1.xml
+++ b/ctdb/doc/ctdb.1.xml
@@ -828,7 +828,6 @@ DBRecordCountWarn = 100000
DBRecordSizeWarn = 10000000
DBSizeWarn = 100000000
PullDBPreallocation = 10485760
-TDBMutexEnabled = 1
LockProcessesPerDB = 200
RecBufferSizeLimit = 1000000
QueueBufferSize = 1024
diff --git a/ctdb/doc/ctdb.conf.5.xml b/ctdb/doc/ctdb.conf.5.xml
index 840d46d86a3..316ac7f469d 100644
--- a/ctdb/doc/ctdb.conf.5.xml
+++ b/ctdb/doc/ctdb.conf.5.xml
@@ -305,6 +305,23 @@
</varlistentry>
<varlistentry>
+ <term>tdb mutexes = true|false</term>
+ <listitem>
+ <para>
+ This parameter enables TDB_MUTEX_LOCKING feature on
+ volatile databases if the robust mutexes are
+ supported. This optimizes the record locking using robust
+ mutexes and is much more efficient that using posix locks.
+ </para>
+ <para>
+ If robust mutexes are unreliable on the platform being
+ used then they can be disabled by setting this to
+ <literal>false</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>lock debug script = <parameter>FILENAME</parameter></term>
<listitem>
<para>
diff --git a/ctdb/server/ctdb_config.c b/ctdb/server/ctdb_config.c
index 1254a996b3b..f00c3268085 100644
--- a/ctdb/server/ctdb_config.c
+++ b/ctdb/server/ctdb_config.c
@@ -73,6 +73,10 @@ static void setup_config_pointers(struct conf_context *conf)
DATABASE_CONF_SECTION,
DATABASE_CONF_LOCK_DEBUG_SCRIPT,
&ctdb_config.lock_debug_script);
+ conf_assign_boolean_pointer(conf,
+ DATABASE_CONF_SECTION,
+ DATABASE_CONF_TDB_MUTEXES,
+ &ctdb_config.tdb_mutexes);
/*
* Event
diff --git a/ctdb/server/ctdb_config.h b/ctdb/server/ctdb_config.h
index 1c06e83f6c7..65c6547258d 100644
--- a/ctdb/server/ctdb_config.h
+++ b/ctdb/server/ctdb_config.h
@@ -33,6 +33,7 @@ struct ctdb_config {
const char *dbdir_persistent;
const char *dbdir_state;
const char *lock_debug_script;
+ bool tdb_mutexes;
/* Event */
const char *event_debug_script;
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index f3f7df97ac6..2d1daafb157 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -41,6 +41,8 @@
#include "common/common.h"
#include "common/logging.h"
+#include "server/ctdb_config.h"
+
#define PERSISTENT_HEALTH_TDB "persistent_health.tdb"
/**
@@ -846,8 +848,9 @@ static int ctdb_local_attach(struct ctdb_context *ctdb, const char *db_name,
ctdb->db_directory,
db_name, ctdb->pnn);
- tdb_flags = ctdb_db_tdb_flags(db_flags, ctdb->valgrinding,
- ctdb->tunable.mutex_enabled);
+ tdb_flags = ctdb_db_tdb_flags(db_flags,
+ ctdb->valgrinding,
+ ctdb_config.tdb_mutexes);
again:
ctdb_db->ltdb = tdb_wrap_open(ctdb_db, ctdb_db->db_path,
diff --git a/ctdb/tests/cunit/config_test_001.sh b/ctdb/tests/cunit/config_test_001.sh
index 27e88888270..74686cac9b9 100755
--- a/ctdb/tests/cunit/config_test_001.sh
+++ b/ctdb/tests/cunit/config_test_001.sh
@@ -40,6 +40,7 @@ ok <<EOF
# persistent database directory = ${database_persistent_dbdir}
# state database directory = ${database_state_dbdir}
# lock debug script =
+ # tdb mutexes = true
[event]
# debug script =
[legacy]
diff --git a/ctdb/tests/eventscripts/00.ctdb.setup.002.sh b/ctdb/tests/eventscripts/00.ctdb.setup.002.sh
index fc1ec76996a..10bddea1549 100755
--- a/ctdb/tests/eventscripts/00.ctdb.setup.002.sh
+++ b/ctdb/tests/eventscripts/00.ctdb.setup.002.sh
@@ -8,12 +8,10 @@ setup
setup_tunable_config <<EOF
MonitorInterval=5
-TDBMutexEnabled=0
EOF
required_result 0 <<EOF
Set MonitorInterval to 5
-Set TDBMutexEnabled to 0
EOF
simple_test
diff --git a/ctdb/tests/eventscripts/scripts/00.ctdb.sh b/ctdb/tests/eventscripts/scripts/00.ctdb.sh
index 5f169e6c6ea..7925679cc47 100644
--- a/ctdb/tests/eventscripts/scripts/00.ctdb.sh
+++ b/ctdb/tests/eventscripts/scripts/00.ctdb.sh
@@ -8,7 +8,6 @@ setup ()
export FAKE_CTDB_TUNABLES_OK="
MonitorInterval
- TDBMutexEnabled
DatabaseHashSize
"
export FAKE_CTDB_TUNABLES_OBSOLETE="
diff --git a/ctdb/tests/tool/ctdb.listvars.001.sh b/ctdb/tests/tool/ctdb.listvars.001.sh
index e9fb686e191..95b6c3133f9 100755
--- a/ctdb/tests/tool/ctdb.listvars.001.sh
+++ b/ctdb/tests/tool/ctdb.listvars.001.sh
@@ -58,7 +58,6 @@ DBRecordCountWarn = 100000
DBRecordSizeWarn = 10000000
DBSizeWarn = 100000000
PullDBPreallocation = 10485760
-TDBMutexEnabled = 1
LockProcessesPerDB = 200
RecBufferSizeLimit = 1000000
QueueBufferSize = 1024