The branch, master has been updated via 87284da ctdb: Drop configuration file ctdbd.conf via b184761 ctdb-tests: Switch local daemons to use new style configuration file via 1aa17eb ctdb-config: Add default ctdb.conf file via bd58f7a ctdb-docs: Add example configuration files via 409b0b7 ctdb-docs: Add ctdb.conf(5) cross references and documentation tweaks via 72ba7ea ctdb-docs: Add ctdb.conf(5) via 60811d6 ctdb-tests: Clean up tests to not expose script options via 9b09943 ctdb-scripts: Fetch recovery lock option from config file in 01.reclock via 2bc6be1 ctdb-scripts: Fetch database options from config file in scripts via 16aa9e7 ctdb-scripts: Add function ctdb_get_db_options() via ad82b8a ctdb-tests: Add ctdb-config wrapper stub for event script tests via 7c33f5e ctdb-tests: Add setup of ctdb.conf recovery lock setting via ff3d0e7 ctdb-tests: Add setup of ctdb.conf database directory settings via 25f05ce ctdb-tests: Add new variable CTDB_SCRIPTS_HELPER_BINDIR via 78fbbfa ctdb-daemon: Drop most ctdbd command-line options via 4e06610 ctdb-scripts: Translate old style options into new configuration file via 61e288a ctdb-daemon: Integrate configuration file handling via 239f189 ctdb-daemon: Implement ctdb configuration file loading via b42dbad ctdb-tools: Add legacy config options to config tool via d91b9b3 ctdb-daemon: Define ctdbd legacy configuration file options via 65d9d1e ctdb-tools: Add database config options to config tool via 52d2701 ctdb-database: Define database configuration file options via dbdd49d ctdb-tools: Add cluster config options to config tool via cf17a48 ctdb-cluster: Define cluster configuration file options via 5eec5e7 ctdb-tools: Add event daemon config options to config tool via 8831f67 ctdb-event: Add event daemon config file options via 920f834 ctdb-daemon: Drop ctdbd --max-persistent-check-errors option via 61efed5 ctdb-scripts: Drop CTDB_MAX_PERSISTENT_CHECK_ERRORS option via 9193a10 ctdb-daemon: Do not create database directories via 344e6ee ctdb-tests: Create database directories for local daemons via 31747da ctdb-build: Create database directories during installation from c83dad5 s4:torture: Do not leak file descriptor in smb2 oplock test
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 87284da7a28172b40504eb50510a8b57da6692a6 Author: Martin Schwenke <mar...@meltin.net> Date: Tue Apr 24 15:55:11 2018 +1000 ctdb: Drop configuration file ctdbd.conf Drop function loadconfig(), replacing uses with "load_system_config ctdb". Drop translation of old-style configuration to new configuration file. Drop export of debugging variables. Drop documentation and configuration examples. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> Autobuild-User(master): Amitay Isaacs <ami...@samba.org> Autobuild-Date(master): Thu May 17 07:03:04 CEST 2018 on sn-devel-144 commit b184761829dc291cbed696084c271316dca79607 Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 13 19:25:56 2018 +1000 ctdb-tests: Switch local daemons to use new style configuration file Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 1aa17eb44774686967b55d3bd19c54646669999b Author: Martin Schwenke <mar...@meltin.net> Date: Tue Apr 24 19:58:23 2018 +1000 ctdb-config: Add default ctdb.conf file Install it in RPM. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit bd58f7af40f6456555897a87d5946ab60800edb9 Author: Martin Schwenke <mar...@meltin.net> Date: Sun May 13 15:42:31 2018 +1000 ctdb-docs: Add example configuration files Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 409b0b797ef345d270f1b0f55bb8691088245c20 Author: Martin Schwenke <mar...@meltin.net> Date: Sat Apr 21 18:12:53 2018 +1000 ctdb-docs: Add ctdb.conf(5) cross references and documentation tweaks Minor updates to other manual pages for compatibility. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 72ba7ea887f2fe88521dd653ae618ea6738535e4 Author: Martin Schwenke <mar...@meltin.net> Date: Sun May 13 15:41:38 2018 +1000 ctdb-docs: Add ctdb.conf(5) This documents the new Samba-style configuration file. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 60811d62e5cd37a7aece7d9c63c9434069e76365 Author: Martin Schwenke <mar...@meltin.net> Date: Wed May 2 18:38:41 2018 +1000 ctdb-tests: Clean up tests to not expose script options The tests still use the script options but the event scripts no longer see them exported from the test infrastructure. Testing now depends on the event scripts successfully fetching the options from the configuration file. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 9b099431fd02c9a8c3a5bfc52fa42d6d891bef59 Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 20 12:20:34 2018 +1000 ctdb-scripts: Fetch recovery lock option from config file in 01.reclock Put it in a function so it is easy to move to common code just in case it is needed somewhere else. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 2bc6be1e4f77245441950719757893ac28a984c7 Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 20 12:15:26 2018 +1000 ctdb-scripts: Fetch database options from config file in scripts Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 16aa9e7a303e13440d702ae444842af349db961c Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 20 12:12:44 2018 +1000 ctdb-scripts: Add function ctdb_get_db_options() This pulls database options from the configuration file, caches then and makes the values available in scripts. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit ad82b8abc3a7ee9b72ae51b383ae012e2b8a4bcf Author: Martin Schwenke <mar...@meltin.net> Date: Wed May 2 18:06:05 2018 +1000 ctdb-tests: Add ctdb-config wrapper stub for event script tests Create a shim helper around that simply invokes ctdb-config via its real location. This is needed because the event script tests set CTDB_HELPER_BINDIR to the stubs directory because all other helpers used by event script testing are currently stubs. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 7c33f5ec2da3e2995995ffccfa2db4f44e486b26 Author: Martin Schwenke <mar...@meltin.net> Date: Wed May 2 18:05:28 2018 +1000 ctdb-tests: Add setup of ctdb.conf recovery lock setting Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit ff3d0e70b69d47e62478b3f5a6b8bc3957a01444 Author: Martin Schwenke <mar...@meltin.net> Date: Wed May 2 12:37:21 2018 +1000 ctdb-tests: Add setup of ctdb.conf database directory settings Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 25f05ced2f70f30bdf2791ddf97efbae75868fd4 Author: Martin Schwenke <mar...@meltin.net> Date: Wed May 2 18:03:20 2018 +1000 ctdb-tests: Add new variable CTDB_SCRIPTS_HELPER_BINDIR This will always find a binary helper, as opposed to a script helper, which currently lives under tools/ in the source tree. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 78fbbfa4d3892d66c4dc2f02bb2b3200cfcd5159 Author: Martin Schwenke <mar...@meltin.net> Date: Mon Apr 16 14:23:00 2018 +1000 ctdb-daemon: Drop most ctdbd command-line options All except -i/--interactive. This remaining popt option is now neatly wrapped to fit in 80 columns. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 4e06610f8c9d8036492028ee0dc74cd8bef0d9e5 Author: Martin Schwenke <mar...@meltin.net> Date: Mon Apr 16 13:20:36 2018 +1000 ctdb-scripts: Translate old style options into new configuration file This allows the relevant command-line options to be removed from the daemon while still leaving the old ctdbd.conf options file in place. It is a temporary measure to enable testing in an old testing environment. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 61e288ad70b7bbf16726d703596507137e0417d2 Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 13 19:18:27 2018 +1000 ctdb-daemon: Integrate configuration file handling Testing is now broken because command-line options are no longer respected. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 239f189b10160c0c176e6e0ebef089c8d544f213 Author: Martin Schwenke <mar...@meltin.net> Date: Wed Apr 18 20:21:07 2018 +1000 ctdb-daemon: Implement ctdb configuration file loading Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit b42dbadbef1f57e5c59edb1ee094434243c892ba Author: Martin Schwenke <mar...@meltin.net> Date: Fri May 11 22:49:46 2018 +1000 ctdb-tools: Add legacy config options to config tool Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit d91b9b309ca270dbd60798902fcb45d2e3bb461a Author: Martin Schwenke <mar...@meltin.net> Date: Wed Apr 11 20:36:45 2018 +1000 ctdb-daemon: Define ctdbd legacy configuration file options Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 65d9d1e743ff1598b66738b64dc18bcc27d9c981 Author: Martin Schwenke <mar...@meltin.net> Date: Fri May 11 22:42:42 2018 +1000 ctdb-tools: Add database config options to config tool Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 52d27012796474a3ce024a14d10d8c7eceff057c Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 20 17:10:51 2018 +1000 ctdb-database: Define database configuration file options Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit dbdd49da23c78fa12af39f29277f38827b5a6942 Author: Martin Schwenke <mar...@meltin.net> Date: Fri May 11 22:26:16 2018 +1000 ctdb-tools: Add cluster config options to config tool Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit cf17a48d29a991b7dc7d582e538f11b5a0ac8166 Author: Martin Schwenke <mar...@meltin.net> Date: Fri Apr 20 17:11:59 2018 +1000 ctdb-cluster: Define cluster configuration file options Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 5eec5e7c1f0dbafbeb627c0ef53944ad9f2d355c Author: Amitay Isaacs <ami...@gmail.com> Date: Tue Apr 17 12:38:30 2018 +1000 ctdb-tools: Add event daemon config options to config tool Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 8831f6740e0892d296eaba91805f9d437ecbdb9a Author: Amitay Isaacs <ami...@gmail.com> Date: Mon Apr 23 14:02:43 2018 +1000 ctdb-event: Add event daemon config file options Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Martin Schwenke <mar...@meltin.net> commit 920f83457861c5f0566e9fb664efe7c715dee09a Author: Martin Schwenke <mar...@meltin.net> Date: Tue May 15 18:51:29 2018 +1000 ctdb-daemon: Drop ctdbd --max-persistent-check-errors option Leave the code with an internal default of 0. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 61efed5a7e19825d49130b4e6785cfb29c557a32 Author: Martin Schwenke <mar...@meltin.net> Date: Tue May 15 18:47:29 2018 +1000 ctdb-scripts: Drop CTDB_MAX_PERSISTENT_CHECK_ERRORS option This must harken back to the days of yore when corrupt persistent databases were an issue. We haven't seen this used. If CTDB fails to start due to a corrupt persistent database then this database can be removed by hand. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 9193a10f05562c756912d59882eac1cea44bb5d9 Author: Martin Schwenke <mar...@meltin.net> Date: Tue May 15 18:46:21 2018 +1000 ctdb-daemon: Do not create database directories These should be created at installation or, if non-standard, by the administrator. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 344e6eecb29a00bcdb3d18c62ac99d0b2a405257 Author: Martin Schwenke <mar...@meltin.net> Date: Tue May 15 18:45:10 2018 +1000 ctdb-tests: Create database directories for local daemons Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> commit 31747da5ff69eb3442db6ed9949c49776317ddce Author: Martin Schwenke <mar...@meltin.net> Date: Mon May 14 15:41:35 2018 +1000 ctdb-build: Create database directories during installation Create and package. Signed-off-by: Martin Schwenke <mar...@meltin.net> Reviewed-by: Amitay Isaacs <ami...@gmail.com> ----------------------------------------------------------------------- Summary of changes: ctdb/cluster/cluster_conf.c | 124 +++++ ctdb/cluster/cluster_conf.h | 33 ++ ctdb/common/conf_tool.c | 8 + ctdb/config/ctdb.conf | 17 + ctdb/config/ctdbd.conf | 20 - ctdb/config/ctdbd_wrapper | 64 +-- ctdb/config/debug_locks.sh | 8 +- ctdb/config/events.d/00.ctdb | 5 +- ctdb/config/events.d/01.reclock | 18 + ctdb/config/events.d/05.system | 3 + ctdb/config/functions | 49 +- ctdb/database/database_conf.c | 144 +++++ ctdb/database/database_conf.h | 34 ++ ctdb/doc/ctdb-etcd.7.xml | 8 +- ctdb/doc/ctdb-script.options.5.xml | 16 +- ctdb/doc/ctdb-tunables.7.xml | 2 +- ctdb/doc/ctdb.7.xml | 30 +- ctdb/doc/ctdb.conf.5.xml | 593 +++++++++++++++++++++ ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml | 8 +- ctdb/doc/ctdbd.1.xml | 330 +----------- ctdb/doc/ctdbd.conf.5.xml | 433 --------------- ctdb/doc/ctdbd_wrapper.1.xml | 10 - ctdb/doc/examples/11.natgw.options | 25 + ctdb/doc/examples/91.lvs.options | 12 + ctdb/doc/examples/README | 9 +- ctdb/doc/examples/{cluster.conf => ctdb.conf} | 32 +- ctdb/doc/examples/lvs.conf | 88 --- ctdb/doc/examples/natgw.conf | 104 ---- ctdb/event/event_conf.c | 85 +++ ctdb/event/event_conf.h | 31 ++ ctdb/packaging/RPM/ctdb.spec.in | 7 +- ctdb/server/ctdb_config.c | 161 ++++++ ctdb/server/ctdb_config.h | 53 ++ ctdb/server/ctdbd.c | 139 +++-- ctdb/server/legacy_conf.c | 85 +++ ctdb/server/legacy_conf.h | 36 ++ ctdb/tests/cunit/config_test_001.sh | 27 + .../{config_test_001.sh => config_test_003.sh} | 44 +- ctdb/tests/cunit/config_test_004.sh | 74 +++ ctdb/tests/cunit/config_test_005.sh | 91 ++++ ctdb/tests/cunit/config_test_006.sh | 61 +++ ctdb/tests/eventscripts/scripts/01.reclock.sh | 7 +- ctdb/tests/eventscripts/scripts/local.sh | 12 +- ctdb/tests/eventscripts/stubs/ctdb-config | 2 + ctdb/tests/scripts/script_install_paths.sh | 10 +- ctdb/tests/simple/scripts/local_daemons.bash | 25 +- ctdb/utils/etcd/ctdb_etcd_lock | 6 +- ctdb/wscript | 34 +- 48 files changed, 1971 insertions(+), 1246 deletions(-) create mode 100644 ctdb/cluster/cluster_conf.c create mode 100644 ctdb/cluster/cluster_conf.h create mode 100644 ctdb/config/ctdb.conf delete mode 100644 ctdb/config/ctdbd.conf create mode 100644 ctdb/database/database_conf.c create mode 100644 ctdb/database/database_conf.h create mode 100644 ctdb/doc/ctdb.conf.5.xml delete mode 100644 ctdb/doc/ctdbd.conf.5.xml create mode 100644 ctdb/doc/examples/11.natgw.options create mode 100644 ctdb/doc/examples/91.lvs.options rename ctdb/doc/examples/{cluster.conf => ctdb.conf} (84%) delete mode 100644 ctdb/doc/examples/lvs.conf delete mode 100644 ctdb/doc/examples/natgw.conf create mode 100644 ctdb/event/event_conf.c create mode 100644 ctdb/event/event_conf.h create mode 100644 ctdb/server/ctdb_config.c create mode 100644 ctdb/server/ctdb_config.h create mode 100644 ctdb/server/legacy_conf.c create mode 100644 ctdb/server/legacy_conf.h copy ctdb/tests/cunit/{config_test_001.sh => config_test_003.sh} (50%) create mode 100755 ctdb/tests/cunit/config_test_004.sh create mode 100755 ctdb/tests/cunit/config_test_005.sh create mode 100755 ctdb/tests/cunit/config_test_006.sh create mode 100755 ctdb/tests/eventscripts/stubs/ctdb-config Changeset truncated at 500 lines: diff --git a/ctdb/cluster/cluster_conf.c b/ctdb/cluster/cluster_conf.c new file mode 100644 index 0000000..540732d --- /dev/null +++ b/ctdb/cluster/cluster_conf.c @@ -0,0 +1,124 @@ +/* + CTDB cluster config handling + + Copyright (C) Martin Schwenke 2018 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "replace.h" +#include "system/network.h" + +#include "lib/util/debug.h" + +#include "common/conf.h" + +#include "cluster_conf.h" + +#define CLUSTER_TRANSPORT_DEFAULT "tcp" + +/* + * Ideally this wants to be a void function but it also used directly + * as a validation function + */ +static bool check_static_string_change(const char *key, + const char *old_value, + const char *new_value, + enum conf_update_mode mode) +{ + if (mode == CONF_MODE_RELOAD) { + if (strcmp(old_value, new_value) != 0) { + D_WARNING("Ignoring update of [%s] -> %s\n", + CLUSTER_CONF_SECTION, + key); + } + } + + return true; +} + +static bool validate_transport(const char *key, + const char *old_transport, + const char *new_transport, + enum conf_update_mode mode) +{ + /* Don't allow "ib" for now. It is broken! */ + if (strcmp(new_transport, CLUSTER_TRANSPORT_DEFAULT) != 0) { + D_ERR("Invalid value for [cluster] -> transport = %s\n", + new_transport); + return false; + } + + /* This sometimes warns but always returns true */ + return check_static_string_change(key, + old_transport, + new_transport, + mode); +} + +static bool validate_node_address(const char *key, + const char *old_node_address, + const char *new_node_address, + enum conf_update_mode mode) +{ + struct in_addr addr4; + struct in6_addr addr6; + int ret; + + if (new_node_address == NULL) { + goto good; + } + + ret = inet_pton(AF_INET, new_node_address, &addr4); + if (ret == 1) { + goto good; + } + + ret = inet_pton(AF_INET6, new_node_address, &addr6); + if (ret == 1) { + goto good; + } + + D_ERR("Invalid value for [cluster] -> node address = %s\n", + new_node_address); + return false; + +good: + /* This sometimes warns but always returns true */ + return check_static_string_change(key, + old_node_address, + new_node_address, + mode); +} + +void cluster_conf_init(struct conf_context *conf) +{ + conf_define_section(conf, CLUSTER_CONF_SECTION, NULL); + + conf_define_string(conf, + CLUSTER_CONF_SECTION, + CLUSTER_CONF_TRANSPORT, + CLUSTER_TRANSPORT_DEFAULT, + validate_transport); + conf_define_string(conf, + CLUSTER_CONF_SECTION, + CLUSTER_CONF_NODE_ADDRESS, + NULL, + validate_node_address); + conf_define_string(conf, + CLUSTER_CONF_SECTION, + CLUSTER_CONF_RECOVERY_LOCK, + NULL, + check_static_string_change); +} diff --git a/ctdb/cluster/cluster_conf.h b/ctdb/cluster/cluster_conf.h new file mode 100644 index 0000000..6b797ef --- /dev/null +++ b/ctdb/cluster/cluster_conf.h @@ -0,0 +1,33 @@ +/* + CTDB cluster config handling + + Copyright (C) Martin Schwenke 2018 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __CTDB_CLUSTER_CONF_H__ +#define __CTDB_CLUSTER_CONF_H__ + +#include "common/conf.h" + +#define CLUSTER_CONF_SECTION "cluster" + +#define CLUSTER_CONF_TRANSPORT "transport" +#define CLUSTER_CONF_NODE_ADDRESS "node address" +#define CLUSTER_CONF_RECOVERY_LOCK "recovery lock" + +void cluster_conf_init(struct conf_context *conf); + +#endif /* __CTDB_CLUSTER_CONF_H__ */ diff --git a/ctdb/common/conf_tool.c b/ctdb/common/conf_tool.c index 1ee4b02..329b204 100644 --- a/ctdb/common/conf_tool.c +++ b/ctdb/common/conf_tool.c @@ -29,6 +29,10 @@ #include "common/path.h" #include "common/logging_conf.h" +#include "cluster/cluster_conf.h" +#include "database/database_conf.h" +#include "event/event_conf.h" +#include "server/legacy_conf.h" #include "common/conf_tool.h" @@ -236,6 +240,10 @@ int conf_tool_run(struct conf_tool_context *ctx, int *result) /* Call functions to initialize config sections/variables */ logging_conf_init(ctx->conf, NULL); + cluster_conf_init(ctx->conf); + database_conf_init(ctx->conf); + event_conf_init(ctx->conf); + legacy_conf_init(ctx->conf); if (! conf_valid(ctx->conf)) { D_ERR("Failed to define configuration options\n"); diff --git a/ctdb/config/ctdb.conf b/ctdb/config/ctdb.conf new file mode 100644 index 0000000..a9e6f69 --- /dev/null +++ b/ctdb/config/ctdb.conf @@ -0,0 +1,17 @@ +# See ctdb.conf(5) for documentation +# +# See ctdb-script.options(5) for documentation about event script +# options + +[logging] + # Enable logging to syslog + # location = syslog + + # Default log level + # log level = NOTICE + +[cluster] + # Shared recovery lock file to avoid split brain. No default. + # Do NOT run CTDB without a recovery lock file unless you know exactly + # what you are doing. + # recovery lock = /shared/recovery.lock diff --git a/ctdb/config/ctdbd.conf b/ctdb/config/ctdbd.conf deleted file mode 100644 index 57cb349..0000000 --- a/ctdb/config/ctdbd.conf +++ /dev/null @@ -1,20 +0,0 @@ -# Options to ctdbd, read by ctdbd_wrapper(1) -# -# See ctdbd.conf(5) for more information about CTDB configuration variables. - -# Shared recovery lock file to avoid split brain. No default. -# -# Do NOT run CTDB without a recovery lock file unless you know exactly -# what you are doing. -# CTDB_RECOVERY_LOCK=/some/place/on/shared/storage - -# What services should CTDB manage? Default is none. -# CTDB_MANAGES_SAMBA=yes -# CTDB_MANAGES_WINBIND=yes -# CTDB_MANAGES_NFS=yes - -# Default is to use the log file below instead of syslog. -# CTDB_LOGGING=file:/var/log/log.ctdb - -# Default log level is NOTICE. Want less logging? -# CTDB_DEBUGLEVEL=ERR diff --git a/ctdb/config/ctdbd_wrapper b/ctdb/config/ctdbd_wrapper index e8f0a23..34827ea 100755 --- a/ctdb/config/ctdbd_wrapper +++ b/ctdb/config/ctdbd_wrapper @@ -20,75 +20,15 @@ fi . "${CTDB_BASE}/functions" -loadconfig +load_system_config "ctdb" ctdbd="${CTDBD:-/usr/local/sbin/ctdbd}" ############################################################ -# Only the nested function references its arguments -# shellcheck disable=SC2120 -build_ctdb_options () -{ - ctdb_options="" - - maybe_set () - { - # If the given variable isn't set then do nothing - [ -n "$2" ] || return - # If a required value for the variable and it doesn't match, - # then do nothing - [ -z "$3" -o "$3" = "$2" ] || return - - val="'$2'" - case "$1" in - --*) sep="=" ;; - -*) sep=" " ;; - esac - # For these options we're only passing a value-less flag. - if [ -n "$3" ] ; then - val="" - sep="" - fi - - ctdb_options="${ctdb_options}${ctdb_options:+ }${1}${sep}${val}" - } - - # build up ctdb_options variable from optional parameters - maybe_set "--reclock" "$CTDB_RECOVERY_LOCK" - maybe_set "--logging" "$CTDB_LOGGING" - maybe_set "--listen" "$CTDB_NODE_ADDRESS" - maybe_set "--dbdir" "$CTDB_DBDIR" - maybe_set "--dbdir-persistent" "$CTDB_DBDIR_PERSISTENT" - maybe_set "--dbdir-state" "$CTDB_DBDIR_STATE" - maybe_set "--transport" "$CTDB_TRANSPORT" - maybe_set "-d" "$CTDB_DEBUGLEVEL" - maybe_set "--start-as-disabled" "$CTDB_START_AS_DISABLED" "yes" - maybe_set "--start-as-stopped " "$CTDB_START_AS_STOPPED" "yes" - maybe_set "--no-recmaster" "$CTDB_CAPABILITY_RECMASTER" "no" - maybe_set "--no-lmaster" "$CTDB_CAPABILITY_LMASTER" "no" - maybe_set "--nosetsched" "$CTDB_NOSETSCHED" "yes" - maybe_set "--script-log-level" "$CTDB_SCRIPT_LOG_LEVEL" - maybe_set "--max-persistent-check-errors" "$CTDB_MAX_PERSISTENT_CHECK_ERRORS" -} - -export_debug_variables () -{ - [ -n "$CTDB_DEBUG_HUNG_SCRIPT" ] && export CTDB_DEBUG_HUNG_SCRIPT - [ -n "$CTDB_DEBUG_LOCKS" ] && export CTDB_DEBUG_LOCKS -} - -############################################################ - start() { - # build_ctdb_options() takes no arguments - # shellcheck disable=SC2119 - build_ctdb_options - - export_debug_variables - - eval "$ctdbd" "$ctdb_options" || return 1 + eval "$ctdbd" || return 1 # Wait until ctdbd has started and is ready to respond to clients. _timeout="${CTDB_STARTUP_TIMEOUT:-10}" diff --git a/ctdb/config/debug_locks.sh b/ctdb/config/debug_locks.sh index db02f0c..0867685 100755 --- a/ctdb/config/debug_locks.sh +++ b/ctdb/config/debug_locks.sh @@ -12,12 +12,8 @@ . "${CTDB_BASE}/functions" -# Default fallback location for database directories. -# These can be overwritten from CTDB configuration -CTDB_DBDIR="${CTDB_VARDIR}/volatile" -CTDB_DBDIR_PERSISTENT="${CTDB_VARDIR}/persistent" - -load_script_options +# Load/cache database options from configuration file +ctdb_get_db_options ( flock -n 9 || exit 1 diff --git a/ctdb/config/events.d/00.ctdb b/ctdb/config/events.d/00.ctdb index 272dcb1..8db4a19 100755 --- a/ctdb/config/events.d/00.ctdb +++ b/ctdb/config/events.d/00.ctdb @@ -68,8 +68,6 @@ check_persistent_databases () _dir="${CTDB_DBDIR_PERSISTENT:-${CTDB_VARDIR}/persistent}" [ -d "$_dir" ] || return 0 - [ "${CTDB_MAX_PERSISTENT_CHECK_ERRORS:-0}" = "0" ] || return 0 - for _db in "$_dir/"*.tdb.*[0-9] ; do [ -r "$_db" ] || continue check_tdb "$_db" || \ @@ -135,6 +133,9 @@ init) mkdir -p "$CTDB_SCRIPT_VARDIR" || \ die "mkdir -p ${CTDB_SCRIPT_VARDIR} - failed - $?" $? + # Load/cache database options from configuration file + ctdb_get_db_options + if select_tdb_checker ; then check_persistent_databases || exit $? check_non_persistent_databases diff --git a/ctdb/config/events.d/01.reclock b/ctdb/config/events.d/01.reclock index e2e4c0d..e14d8c2 100755 --- a/ctdb/config/events.d/01.reclock +++ b/ctdb/config/events.d/01.reclock @@ -10,6 +10,24 @@ load_script_options ctdb_setup_state_dir "service" "reclock" +ctdb_get_reclock_option () +{ + _reclock_opt_file="${CTDB_SCRIPT_VARDIR}/recovery_lock.cache" + + if [ -f "$_reclock_opt_file" ] ; then + . "$_reclock_opt_file" + return + fi + + ctdb_translate_option "cluster" \ + "recovery lock" \ + "CTDB_RECOVERY_LOCK" >"$_reclock_opt_file" + + . "$_reclock_opt_file" +} + +ctdb_get_reclock_option + # If CTDB_RECOVERY_LOCK specifies a helper then exit because this # script can't do anything useful. case "$CTDB_RECOVERY_LOCK" in diff --git a/ctdb/config/events.d/05.system b/ctdb/config/events.d/05.system index a902b22..e2ffeac 100755 --- a/ctdb/config/events.d/05.system +++ b/ctdb/config/events.d/05.system @@ -169,6 +169,9 @@ END { case "$1" in monitor) + # Load/cache database options from configuration file + ctdb_get_db_options + monitor_filesystem_usage monitor_memory_usage ;; diff --git a/ctdb/config/functions b/ctdb/config/functions index f3d7c16..30afcde 100755 --- a/ctdb/config/functions +++ b/ctdb/config/functions @@ -44,16 +44,6 @@ load_system_config () fi } -loadconfig() { - - load_system_config "ctdb" - - _config="${CTDB_BASE}/ctdbd.conf" - if [ -r "$_config" ] ; then - . "$_config" - fi -} - # load_script_options [ component script ] # script is an event script name relative to a component # component is currently ignored @@ -67,8 +57,6 @@ load_script_options () die "usage: load_script_options [ component script ]" fi - loadconfig - _options="${CTDB_BASE}/script.options" if [ -r "$_options" ] ; then @@ -244,6 +232,43 @@ ctdb_get_ip_address () cat "$_ip_addr_file" } +# Cached retrieval of database options for use by event scripts. +# +# If the variables are already set then they should not be overwritten +# - this should only happen during event script testing. +ctdb_get_db_options () +{ + _db_opts_file="${CTDB_SCRIPT_VARDIR}/db_options.cache" + + if [ ! -f "$_db_opts_file" ] ; then + { + ctdb_translate_option "database" \ + "volatile database directory" \ + "CTDB_DBDIR" + ctdb_translate_option "database" \ + "persistent database directory" \ + "CTDB_DBDIR_PERSISTENT" + ctdb_translate_option "database" \ + "state database directory" \ + "CTDB_DBDIR_STATE" + } >"$_db_opts_file" + fi + + . "$_db_opts_file" +} + +ctdb_translate_option () +{ + _section="$1" + _opt="$2" + _variable="$3" + + # ctdb-config already prints an error if something goes wrong + _t=$("${CTDB_HELPER_BINDIR}/ctdb-config" get "$_section" "$_opt") || \ + exit $? + echo "${_variable}=\"${_t}\"" +} + ###################################################### # wrapper around /proc/ settings to allow them to be hooked # for testing diff --git a/ctdb/database/database_conf.c b/ctdb/database/database_conf.c new file mode 100644 index 0000000..0333ce0 --- /dev/null +++ b/ctdb/database/database_conf.c @@ -0,0 +1,144 @@ +/* + CTDB database config handling + + Copyright (C) Martin Schwenke 2018 + + database_conf_validate_lock_debug_script() based on + event_conf_validatye_debug_script(): + + Copyright (C) Amitay Isaacs 2018 -- Samba Shared Repository