[SCM] CTDB repository - branch master updated - ctdb-1.13-313-g7d02528

Amitay Isaacs amitay at samba.org
Fri Oct 19 09:58:42 MDT 2012


The branch, master has been updated
       via  7d025281ee70c91ebcd4d9a908de1045a689786b (commit)
       via  edbc8a6669b594d3c413d603e1c9fada9244c2ee (commit)
       via  c8eb4a3170ab8524e638047053831ba547e9cce8 (commit)
       via  2126795153dacb255e441abcb36ee05107b6282a (commit)
       via  4456a01d8f54ca6c771d7488048de5f638477d21 (commit)
       via  01ee86d2aafbcda658ef6acc2bba6d6781ae4047 (commit)
       via  caff197edf6f928494028ac6c993901954aaa36f (commit)
       via  1ee55c511b99e9f8a6fa4e34207267e953f09bae (commit)
       via  e24b5bf283736624b387b0364d7200212bb3054b (commit)
       via  1af99cf0de9919dd89af1feab6d1bd18b95d82ff (commit)
       via  be4051326b0c6a0fd301561af10fd15a0e90023b (commit)
       via  a0cdfae7438092f5c605f0608daa536be860b7fe (commit)
      from  5ee242c949a98bb7397e0f7368b20d44c06fe772 (commit)

http://gitweb.samba.org/?p=ctdb.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7d025281ee70c91ebcd4d9a908de1045a689786b
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Sep 25 17:29:50 2012 +1000

    locking: Do not use ctdb_kill() to kill smbd processes
    
    ctdb_kill() is used to terminate processes spawned by CTDB.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit edbc8a6669b594d3c413d603e1c9fada9244c2ee
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Jul 11 15:15:41 2012 +1000

    locking: Add database priority handling for older versions of samba
    
    In samba versions 3.6.x and older, database priorities are not set.
    later_db() function implements higher database priority (locking order)
    for these databases -
       brlock, g_lock, notify_onelevel, serverid, xattr_tdb
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit c8eb4a3170ab8524e638047053831ba547e9cce8
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Jul 9 17:37:35 2012 +1000

    locking: Schedule a new lock request everytime a lock is released
    
    Since the number of active lock requests is limited to
    MAX_LOCK_PROCESSES_PER_DB (= 100), any new requests won't get scheduled
    when they are created. So schedule a pending request once current active
    request is done.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit 2126795153dacb255e441abcb36ee05107b6282a
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 14 16:12:48 2012 +1000

    ctdbd: Replace lockwait with locking API and remove ctdb_lockwait.c
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit 4456a01d8f54ca6c771d7488048de5f638477d21
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed May 9 15:17:21 2012 +1000

    ctdb_recover: Replace static locking functions with locking API
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit 01ee86d2aafbcda658ef6acc2bba6d6781ae4047
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed May 9 15:09:51 2012 +1000

    ctdb_freeze: Replace locking functions with locking API
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit caff197edf6f928494028ac6c993901954aaa36f
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed May 9 15:10:20 2012 +1000

    ctdbd_test: Include ctdb_lock.c code for test stubs
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit 1ee55c511b99e9f8a6fa4e34207267e953f09bae
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu May 17 15:25:46 2012 +1000

    tests: Fix statistics test for new output lines from locking API
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit e24b5bf283736624b387b0364d7200212bb3054b
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed May 9 12:58:19 2012 +1000

    tools/ctdb: Display the locking statistics
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit 1af99cf0de9919dd89af1feab6d1bd18b95d82ff
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Oct 11 11:29:29 2012 +1100

    ctdbd: locking: Provide non-blocking API for locking of TDB record/db/alldb
    
    This introduces a consistent API for handling locks on single record, complete
    db or all dbs. The locks are taken out in a child process. In cases of timeout,
    find the processes that currently hold the lock and log.
    
    Callback functions for locking requests take locked boolean to indicate
    whether the lock was successfully obtained or not.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit be4051326b0c6a0fd301561af10fd15a0e90023b
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Jun 6 11:50:25 2012 +1000

    common: Add routines to get process and lock information
    
    Currently these functions are implemented only for Linux.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

commit a0cdfae7438092f5c605f0608daa536be860b7fe
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed May 9 12:56:53 2012 +1000

    header: Added DB statistics update macros
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>

-----------------------------------------------------------------------

Summary of changes:
 Makefile.in                        |    4 +-
 common/system_aix.c                |   17 +
 common/system_freebsd.c            |   18 +
 common/system_gnu.c                |   18 +
 common/system_kfreebsd.c           |   18 +
 common/system_linux.c              |  179 ++++++
 doc/ctdbd.1                        |   11 +-
 doc/ctdbd.1.html                   |  168 +++---
 doc/ctdbd.1.xml                    |   15 +
 include/ctdb_private.h             |  122 ++++-
 include/ctdb_protocol.h            |   19 +-
 server/ctdb_freeze.c               |  158 +-----
 server/ctdb_lock.c                 | 1134 ++++++++++++++++++++++++++++++++++++
 server/ctdb_lockwait.c             |  234 --------
 server/ctdb_ltdb_server.c          |   13 +-
 server/ctdb_recover.c              |  106 +---
 server/ctdb_tunables.c             |    1 +
 tests/simple/14_ctdb_statistics.sh |    2 +-
 tests/src/ctdbd_test.c             |    2 +-
 tools/ctdb.c                       |   68 ++-
 20 files changed, 1694 insertions(+), 613 deletions(-)
 create mode 100644 server/ctdb_lock.c
 delete mode 100644 server/ctdb_lockwait.c


Changeset truncated at 500 lines:

diff --git a/Makefile.in b/Makefile.in
index 6c82260..0e365f6 100755
--- a/Makefile.in
+++ b/Makefile.in
@@ -80,7 +80,7 @@ CTDB_CLIENT_OBJ = client/ctdb_client.o \
 	$(CTDB_COMMON_OBJ) $(POPT_OBJ) $(UTIL_OBJ) $(TALLOC_OBJ) $(TDB_OBJ) \
 	@LIBREPLACEOBJ@ $(EXTRA_OBJ) $(TEVENT_OBJ) $(SOCKET_WRAPPER_OBJ)
 
-CTDB_SERVER_OBJ = server/ctdbd.o server/ctdb_daemon.o server/ctdb_lockwait.o \
+CTDB_SERVER_OBJ = server/ctdbd.o server/ctdb_daemon.o \
 	server/ctdb_recoverd.o server/ctdb_recover.o server/ctdb_freeze.o \
 	server/ctdb_tunables.o server/ctdb_monitor.o server/ctdb_server.o \
 	server/ctdb_control.o server/ctdb_call.o server/ctdb_ltdb_server.o \
@@ -88,7 +88,7 @@ CTDB_SERVER_OBJ = server/ctdbd.o server/ctdb_daemon.o server/ctdb_lockwait.o \
 	server/ctdb_serverids.o server/ctdb_persistent.o \
 	server/ctdb_keepalive.o server/ctdb_logging.o server/ctdb_uptime.o \
 	server/ctdb_vacuum.o server/ctdb_banning.o server/ctdb_statistics.o \
-	server/ctdb_update_record.o \
+	server/ctdb_update_record.o server/ctdb_lock.o \
 	$(CTDB_CLIENT_OBJ) $(CTDB_TCP_OBJ) @INFINIBAND_WRAPPER_OBJ@
 
 TEST_BINS=tests/bin/ctdb_bench tests/bin/ctdb_fetch tests/bin/ctdb_fetch_one \
diff --git a/common/system_aix.c b/common/system_aix.c
index 388e943..16b627c 100644
--- a/common/system_aix.c
+++ b/common/system_aix.c
@@ -373,3 +373,20 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 	return ret;
 }
 
+char *ctdb_get_process_name(pid_t pid)
+{
+	/* FIXME: not implemented */
+	return NULL;
+}
+
+bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info)
+{
+	/* FIXME: not implemented */
+	return false;
+}
+
+bool ctdb_get_blocker_pid(struct ctdb_lock_info *reqlock, pid_t *blocker_pid)
+{
+	/* FIXME: not implemented */
+	return false;
+}
diff --git a/common/system_freebsd.c b/common/system_freebsd.c
index ed30f8c..37f1c74 100644
--- a/common/system_freebsd.c
+++ b/common/system_freebsd.c
@@ -368,3 +368,21 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 	/* FIXME not implemented */
 	return 1;
 }
+
+char *ctdb_get_process_name(pid_t pid)
+{
+	/* FIXME: not implemented */
+	return NULL;
+}
+
+bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info)
+{
+	/* FIXME: not implemented */
+	return false;
+}
+
+bool ctdb_get_blocker_pid(struct ctdb_lock_info *reqlock, pid_t *blocker_pid)
+{
+	/* FIXME: not implemented */
+	return false;
+}
diff --git a/common/system_gnu.c b/common/system_gnu.c
index 7b8af34..8a3b5b1 100644
--- a/common/system_gnu.c
+++ b/common/system_gnu.c
@@ -361,3 +361,21 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 	/* FIXME not implemented */
 	return 1;
 }
+
+char *ctdb_get_process_name(pid_t pid)
+{
+	/* FIXME: not implemented */
+	return NULL;
+}
+
+bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info)
+{
+	/* FIXME: not implemented */
+	return false;
+}
+
+bool ctdb_get_blocker_pid(struct ctdb_lock_info *reqlock, pid_t *blocker_pid)
+{
+	/* FIXME: not implemented */
+	return false;
+}
diff --git a/common/system_kfreebsd.c b/common/system_kfreebsd.c
index 9e2aa07..5595865 100644
--- a/common/system_kfreebsd.c
+++ b/common/system_kfreebsd.c
@@ -361,3 +361,21 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 	/* FIXME not implemented */
 	return 1;
 }
+
+char *ctdb_get_process_name(pid_t pid)
+{
+	/* FIXME: not implemented */
+	return NULL;
+}
+
+bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info)
+{
+	/* FIXME: not implemented */
+	return false;
+}
+
+bool ctdb_get_blocker_pid(struct ctdb_lock_info *reqlock, pid_t *blocker_pid)
+{
+	/* FIXME: not implemented */
+	return false;
+}
diff --git a/common/system_linux.c b/common/system_linux.c
index 21f5d6c..9d4d4ec 100644
--- a/common/system_linux.c
+++ b/common/system_linux.c
@@ -574,3 +574,182 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 	return ret;
 }
 
+/*
+ * Find the process name from process ID
+ */
+char *ctdb_get_process_name(pid_t pid)
+{
+	char path[32];
+	char buf[PATH_MAX];
+	char *ptr;
+	int n;
+
+	snprintf(path, sizeof(path), "/proc/%d/exe", pid);
+	n = readlink(path, buf, sizeof(buf));
+	if (n < 0) {
+		return NULL;
+	}
+
+	/* Remove any extra fields */
+	buf[n] = '\0';
+	ptr = strtok(buf, " ");
+	return strdup(ptr);
+}
+
+
+/*
+ * Parsing a line from /proc/locks,
+ */
+static bool parse_proc_locks_line(char *line, pid_t *pid,
+				  struct ctdb_lock_info *curlock)
+{
+	char *ptr, *saveptr;
+
+	/* output of /proc/locks
+	 *
+	 * lock assigned
+	 * 1: POSIX  ADVISORY  WRITE 25945 fd:00:6424820 212 212
+	 *
+	 * lock waiting
+	 * 1: -> POSIX  ADVISORY  WRITE 25946 fd:00:6424820 212 212
+	 */
+
+	/* Id: */
+	ptr = strtok_r(line, " ", &saveptr);
+	if (ptr == NULL) return false;
+
+	/* -> */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+	if (strcmp(ptr, "->") == 0) {
+		curlock->waiting = true;
+		ptr = strtok_r(NULL, " ", &saveptr);
+	} else {
+		curlock->waiting = false;
+	}
+
+	/* POSIX */
+	if (ptr == NULL || strcmp(ptr, "POSIX") != 0) {
+		return false;
+	}
+
+	/* ADVISORY */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+
+	/* WRITE */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+	if (strcmp(ptr, "READ") == 0) {
+		curlock->read_only = true;
+	} else if (strcmp(ptr, "WRITE") == 0) {
+		curlock->read_only = false;
+	} else {
+		return false;
+	}
+
+	/* PID */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+	*pid = atoi(ptr);
+
+	/* MAJOR:MINOR:INODE */
+	ptr = strtok_r(NULL, " :", &saveptr);
+	if (ptr == NULL) return false;
+	ptr = strtok_r(NULL, " :", &saveptr);
+	if (ptr == NULL) return false;
+	ptr = strtok_r(NULL, " :", &saveptr);
+	if (ptr == NULL) return false;
+	curlock->inode = atol(ptr);
+
+	/* START OFFSET */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+	curlock->start = atol(ptr);
+
+	/* END OFFSET */
+	ptr = strtok_r(NULL, " ", &saveptr);
+	if (ptr == NULL) return false;
+	if (strncmp(ptr, "EOF", 3) == 0) {
+		curlock->end = (off_t)-1;
+	} else {
+		curlock->end = atol(ptr);
+	}
+
+	return true;
+}
+
+/*
+ * Find information of lock being waited on for given process ID
+ */
+bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info)
+{
+	FILE *fp;
+	struct ctdb_lock_info curlock;
+	pid_t pid;
+	char buf[1024];
+	char *ptr;
+	bool status = false;
+
+	if ((fp = fopen("/proc/locks", "r")) == NULL) {
+		DEBUG(DEBUG_ERR, ("Failed to read locks information"));
+		return false;
+	}
+	while ((ptr = fgets(buf, sizeof(buf), fp)) != NULL) {
+		if (! parse_proc_locks_line(buf, &pid, &curlock)) {
+			continue;
+		}
+		if (pid == req_pid && curlock.waiting) {
+			*lock_info = curlock;
+			status = true;
+			break;
+		}
+	}
+	fclose(fp);
+
+	return status;
+}
+
+/*
+ * Find process ID which holds an overlapping byte lock for required
+ * inode and byte range.
+ */
+bool ctdb_get_blocker_pid(struct ctdb_lock_info *reqlock, pid_t *blocker_pid)
+{
+	FILE *fp;
+	struct ctdb_lock_info curlock;
+	pid_t pid;
+	char buf[1024];
+	char *ptr;
+	bool status = false;
+
+	if ((fp = fopen("/proc/locks", "r")) == NULL) {
+		DEBUG(DEBUG_ERR, ("Failed to read locks information"));
+		return false;
+	}
+	while ((ptr = fgets(buf, sizeof(buf), fp)) != NULL) {
+		if (! parse_proc_locks_line(buf, &pid, &curlock)) {
+			continue;
+		}
+
+		if (curlock.waiting) {
+			continue;
+		}
+
+		if (curlock.inode != reqlock->inode) {
+			continue;
+		}
+
+		if (curlock.start > reqlock->end ||
+		    curlock.end < reqlock->start) {
+			/* Outside the required range */
+			continue;
+		}
+		*blocker_pid = pid;
+		status = true;
+		break;
+	}
+	fclose(fp);
+
+	return status;
+}
diff --git a/doc/ctdbd.1 b/doc/ctdbd.1
index 52c3393..33ceb04 100644
--- a/doc/ctdbd.1
+++ b/doc/ctdbd.1
@@ -2,12 +2,12 @@
 .\"     Title: ctdbd
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
 .\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\"      Date: 10/11/2012
+.\"      Date: 10/20/2012
 .\"    Manual: CTDB - clustered TDB database
 .\"    Source: ctdb
 .\"  Language: English
 .\"
-.TH "CTDBD" "1" "10/11/2012" "ctdb" "CTDB \- clustered TDB database"
+.TH "CTDBD" "1" "10/20/2012" "ctdb" "CTDB \- clustered TDB database"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -593,6 +593,13 @@ When many clients across many nodes try to access the same record at the same ti
 This parameter is used to activate a fetch\-collapse\&. A fetch\-collapse is when we track which records we have requests in flight so that we only keep one request in flight from a certain node, even if multiple smbd processes are attemtping to fetch the record at the same time\&. This can improve performance and reduce CPU utilization for certain workloads\&.
 .PP
 This timeout controls if we should collapse multiple fetch operations of the same record into a single request and defer all duplicates or not\&.
+.SS "DeadlockTimeout"
+.PP
+Default: 60
+.PP
+Number of seconds to determine if ctdb is in deadlock with samba\&.
+.PP
+When ctdb daemon is blocked waiting for a lock on a database which is blocked by some other process, ctdb logs a warning every 10 seconds\&. Most often this is caused by samba locking databases and waiting on ctdb and result in a deadlock\&. If the lock is not obtained by ctdb before deadlock timeout expires, ctdb will detect it as a deadlock and terminate the blocking samba process\&. Setting this value to 0 disables deadlock detection\&.
 .SH "LVS"
 .PP
 LVS is a mode where CTDB presents one single IP address for the entire cluster\&. This is an alternative to using public IP addresses and round\-robin DNS to loadbalance clients across the cluster\&.
diff --git a/doc/ctdbd.1.html b/doc/ctdbd.1.html
index b6a7f54..8410105 100644
--- a/doc/ctdbd.1.html
+++ b/doc/ctdbd.1.html
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ctdbd</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" title="ctdbd"><a name="ctdbd.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ctdbd — The CTDB cluster daemon</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ctdbd</code> </p></div><div class="cmdsynopsis"><p><code class="command">ctdbd</code>  [-? --help] [-d --debug=<INTEGER>] {--dbdir=<directory>} {--dbdir-persistent=<directory>} [--event-script-dir=<directory>] [-i --interactive] [--listen=<address>] [--logfile=<filename>] [--lvs] {--nlist=<filename>} [--no-lmaster] [--no-recmaster] [--nosetsched] {--notification-script=<filename>} [--public-add
 resses=<filename>] [--public-interface=<interface>] {--reclock=<filename>} [--single-public-ip=<address>] [--socket=<filename>] [--start-as-disabled] [--start-as-stopped] [--syslog] [--log-ringbuf-size=<num-entries>] [--torture] [--transport=<STRING>] [--usage]</p></div></div><div class="refsect1" title="DESCRIPTION"><a name="idp228184"></a><h2>DESCRIPTION</h2><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ctdbd</title><meta name="generator" content="DocBook XSL Stylesheets V1.76.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" title="ctdbd"><a name="ctdbd.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ctdbd — The CTDB cluster daemon</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="command">ctdbd</code> </p></div><div class="cmdsynopsis"><p><code class="command">ctdbd</code>  [-? --help] [-d --debug=<INTEGER>] {--dbdir=<directory>} {--dbdir-persistent=<directory>} [--event-script-dir=<directory>] [-i --interactive] [--listen=<address>] [--logfile=<filename>] [--lvs] {--nlist=<filename>} [--no-lmaster] [--no-recmaster] [--nosetsched] {--notification-script=<filename>} [--public-add
 resses=<filename>] [--public-interface=<interface>] {--reclock=<filename>} [--single-public-ip=<address>] [--socket=<filename>] [--start-as-disabled] [--start-as-stopped] [--syslog] [--log-ringbuf-size=<num-entries>] [--torture] [--transport=<STRING>] [--usage]</p></div></div><div class="refsect1" title="DESCRIPTION"><a name="idp129984"></a><h2>DESCRIPTION</h2><p>
       ctdbd is the main ctdb daemon.
     </p><p>
       ctdbd provides a clustered version of the TDB database with automatic rebuild/recovery of the databases upon nodefailures.
@@ -8,7 +8,7 @@
       ctdbd provides monitoring of all nodes in the cluster and automatically reconfigures the cluster and recovers upon node failures.
     </p><p>
       ctdbd is the main component in clustered Samba that provides a high-availability load-sharing CIFS server cluster.
-    </p></div><div class="refsect1" title="OPTIONS"><a name="idp230192"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-? --help</span></dt><dd><p>
+    </p></div><div class="refsect1" title="OPTIONS"><a name="idp133296"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-? --help</span></dt><dd><p>
             Print some help text to the screen.
           </p></dd><dt><span class="term">-d --debug=<DEBUGLEVEL></span></dt><dd><p>
             This option sets the debuglevel on the ctdbd daemon which controls what will be written to the logfile. The default is 0 which will only log important events and errors. A larger number will provide additional logging.
@@ -154,10 +154,10 @@
 	    implemented in the future.
           </p></dd><dt><span class="term">--usage</span></dt><dd><p>
             Print useage information to the screen.
-          </p></dd></dl></div></div><div class="refsect1" title="Private vs Public addresses"><a name="idp120024"></a><h2>Private vs Public addresses</h2><p>
+          </p></dd></dl></div></div><div class="refsect1" title="Private vs Public addresses"><a name="idp4952544"></a><h2>Private vs Public addresses</h2><p>
       When used for ip takeover in a HA environment, each node in a ctdb 
       cluster has multiple ip addresses assigned to it. One private and one or more public.
-    </p><div class="refsect2" title="Private address"><a name="idp120648"></a><h3>Private address</h3><p>
+    </p><div class="refsect2" title="Private address"><a name="idp4953632"></a><h3>Private address</h3><p>
         This is the physical ip address of the node which is configured in 
         linux and attached to a physical interface. This address uniquely
         identifies a physical node in the cluster and is the ip addresses
@@ -187,7 +187,7 @@
         10.1.1.2
         10.1.1.3
         10.1.1.4
-      </pre></div><div class="refsect2" title="Public address"><a name="idp123552"></a><h3>Public address</h3><p>
+      </pre></div><div class="refsect2" title="Public address"><a name="idp4957936"></a><h3>Public address</h3><p>
         A public address on the other hand is not attached to an interface.
         This address is managed by ctdbd itself and is attached/detached to
         a physical node at runtime.
@@ -248,7 +248,7 @@
 	unavailable. 10.1.1.1 can not be failed over to node 2 or node 3 since
 	these nodes do not have this ip address listed in their public
 	addresses file.
-	</p></div></div><div class="refsect1" title="Node status"><a name="idp128472"></a><h2>Node status</h2><p>
+	</p></div></div><div class="refsect1" title="Node status"><a name="idp4965136"></a><h2>Node status</h2><p>
       The current status of each node in the cluster can be viewed by the 
       'ctdb status' command.
     </p><p>
@@ -285,9 +285,9 @@
       RECMASTER or NATGW.
       This node does not perticipate in the CTDB cluster but can still be
       communicated with. I.e. ctdb commands can be sent to it.
-    </p></div><div class="refsect1" title="PUBLIC TUNABLES"><a name="idp132496"></a><h2>PUBLIC TUNABLES</h2><p>
+    </p></div><div class="refsect1" title="PUBLIC TUNABLES"><a name="idp4970848"></a><h2>PUBLIC TUNABLES</h2><p>
     These are the public tuneables that can be used to control how ctdb behaves.
-    </p><div class="refsect2" title="MaxRedirectCount"><a name="idp133128"></a><h3>MaxRedirectCount</h3><p>Default: 3</p><p>
+    </p><div class="refsect2" title="MaxRedirectCount"><a name="idp4971968"></a><h3>MaxRedirectCount</h3><p>Default: 3</p><p>
     If we are not the DMASTER and need to fetch a record across the network
     we first send the request to the LMASTER after which the record
     is passed onto the current DMASTER. If the DMASTER changes before
@@ -301,7 +301,7 @@
     </p><p>
     When chasing a record, this is how many hops we will chase the record
     for before going back to the LMASTER to ask for new guidance.
-    </p></div><div class="refsect2" title="SeqnumInterval"><a name="idp134848"></a><h3>SeqnumInterval</h3><p>Default: 1000</p><p>
+    </p></div><div class="refsect2" title="SeqnumInterval"><a name="idp4974560"></a><h3>SeqnumInterval</h3><p>Default: 1000</p><p>
     Some databases have seqnum tracking enabled, so that samba will be able
     to detect asynchronously when there has been updates to the database.
     Everytime a database is updated its sequence number is increased.
@@ -309,17 +309,17 @@
     This tunable is used to specify in 'ms' how frequently ctdb will
     send out updates to remote nodes to inform them that the sequence
     number is increased.
-    </p></div><div class="refsect2" title="ControlTimeout"><a name="idp136200"></a><h3>ControlTimeout</h3><p>Default: 60</p><p>
+    </p></div><div class="refsect2" title="ControlTimeout"><a name="idp4976784"></a><h3>ControlTimeout</h3><p>Default: 60</p><p>
     This is the default
     setting for timeout for when sending a control message to either the
     local or a remote ctdb daemon.
-    </p></div><div class="refsect2" title="TraverseTimeout"><a name="idp137088"></a><h3>TraverseTimeout</h3><p>Default: 20</p><p>
+    </p></div><div class="refsect2" title="TraverseTimeout"><a name="idp4978352"></a><h3>TraverseTimeout</h3><p>Default: 20</p><p>
     This setting controls how long we allow a traverse process to run.
     After this timeout triggers, the main ctdb daemon will abort the
     traverse if it has not yet finished.
-    </p></div><div class="refsect2" title="KeepaliveInterval"><a name="idp138024"></a><h3>KeepaliveInterval</h3><p>Default: 5</p><p>
+    </p></div><div class="refsect2" title="KeepaliveInterval"><a name="idp4979968"></a><h3>KeepaliveInterval</h3><p>Default: 5</p><p>
     How often in seconds should the nodes send keepalives to eachother.
-    </p></div><div class="refsect2" title="KeepaliveLimit"><a name="idp138856"></a><h3>KeepaliveLimit</h3><p>Default: 5</p><p>
+    </p></div><div class="refsect2" title="KeepaliveLimit"><a name="idp4981472"></a><h3>KeepaliveLimit</h3><p>Default: 5</p><p>
     After how many keepalive intervals without any traffic should a node
     wait until marking the peer as DISCONNECTED.
     </p><p>
@@ -328,60 +328,60 @@
     require a recovery. This limitshould not be set too high since we want
     a hung node to be detectec, and expunged from the cluster well before
     common CIFS timeouts (45-90 seconds) kick in.
-    </p></div><div class="refsect2" title="RecoverTimeout"><a name="idp140296"></a><h3>RecoverTimeout</h3><p>Default: 20</p><p>
+    </p></div><div class="refsect2" title="RecoverTimeout"><a name="idp4983776"></a><h3>RecoverTimeout</h3><p>Default: 20</p><p>
     This is the default setting for timeouts for controls when sent from the
     recovery daemon. We allow longer control timeouts from the recovery daemon
     than from normal use since the recovery dameon often use controls that 
     can take a lot longer than normal controls.
-    </p></div><div class="refsect2" title="RecoverInterval"><a name="idp141336"></a><h3>RecoverInterval</h3><p>Default: 1</p><p>
+    </p></div><div class="refsect2" title="RecoverInterval"><a name="idp4985488"></a><h3>RecoverInterval</h3><p>Default: 1</p><p>
     How frequently in seconds should the recovery daemon perform the
     consistency checks that determine if we need to perform a recovery or not.
-    </p></div><div class="refsect2" title="ElectionTimeout"><a name="idp142240"></a><h3>ElectionTimeout</h3><p>Default: 3</p><p>
+    </p></div><div class="refsect2" title="ElectionTimeout"><a name="idp4987072"></a><h3>ElectionTimeout</h3><p>Default: 3</p><p>
     When electing a new recovery master, this is how many seconds we allow
     the election to take before we either deem the election finished
     or we fail the election and start a new one.
-    </p></div><div class="refsect2" title="TakeoverTimeout"><a name="idp143192"></a><h3>TakeoverTimeout</h3><p>Default: 9</p><p>
+    </p></div><div class="refsect2" title="TakeoverTimeout"><a name="idp4988688"></a><h3>TakeoverTimeout</h3><p>Default: 9</p><p>
     This is how many seconds we allow controls to take for IP failover events.
-    </p></div><div class="refsect2" title="MonitorInterval"><a name="idp144032"></a><h3>MonitorInterval</h3><p>Default: 15</p><p>
+    </p></div><div class="refsect2" title="MonitorInterval"><a name="idp4990192"></a><h3>MonitorInterval</h3><p>Default: 15</p><p>
     How often should ctdb run the event scripts to check for a nodes health.
-    </p></div><div class="refsect2" title="TickleUpdateInterval"><a name="idp144864"></a><h3>TickleUpdateInterval</h3><p>Default: 20</p><p>
+    </p></div><div class="refsect2" title="TickleUpdateInterval"><a name="idp4991696"></a><h3>TickleUpdateInterval</h3><p>Default: 20</p><p>
     How often will ctdb record and store the "tickle" information used to
     kickstart stalled tcp connections after a recovery.
-    </p></div><div class="refsect2" title="EventScriptTimeout"><a name="idp145728"></a><h3>EventScriptTimeout</h3><p>Default: 20</p><p>
+    </p></div><div class="refsect2" title="EventScriptTimeout"><a name="idp4993248"></a><h3>EventScriptTimeout</h3><p>Default: 20</p><p>
     How long should ctdb let an event script run before aborting it and
     marking the node unhealthy.
-    </p></div><div class="refsect2" title="EventScriptTimeoutCount"><a name="idp146592"></a><h3>EventScriptTimeoutCount</h3><p>Default: 1</p><p>
+    </p></div><div class="refsect2" title="EventScriptTimeoutCount"><a name="idp4994784"></a><h3>EventScriptTimeoutCount</h3><p>Default: 1</p><p>
     How many events in a row needs to timeout before we flag the node UNHEALTHY.
     This setting is useful if your scripts can not be written so that they
     do not hang for benign reasons.
-    </p></div><div class="refsect2" title="EventScriptUnhealthyOnTimeout"><a name="idp147520"></a><h3>EventScriptUnhealthyOnTimeout</h3><p>Default: 0</p><p>
+    </p></div><div class="refsect2" title="EventScriptUnhealthyOnTimeout"><a name="idp4996400"></a><h3>EventScriptUnhealthyOnTimeout</h3><p>Default: 0</p><p>
     This setting can be be used to make ctdb never become UNHEALTHY if your
     eventscripts keep hanging/timing out.
-    </p></div><div class="refsect2" title="RecoveryGracePeriod"><a name="idp148368"></a><h3>RecoveryGracePeriod</h3><p>Default: 120</p><p>
+    </p></div><div class="refsect2" title="RecoveryGracePeriod"><a name="idp4997952"></a><h3>RecoveryGracePeriod</h3><p>Default: 120</p><p>
     During recoveries, if a node has not caused recovery failures during the
     last grace period, any records of transgressions that the node has caused
     recovery failures will be forgiven. This resets the ban-counter back to 
     zero for that node.
-    </p></div><div class="refsect2" title="RecoveryBanPeriod"><a name="idp149392"></a><h3>RecoveryBanPeriod</h3><p>Default: 300</p><p>
+    </p></div><div class="refsect2" title="RecoveryBanPeriod"><a name="idp4999632"></a><h3>RecoveryBanPeriod</h3><p>Default: 300</p><p>
     If a node becomes banned causing repetitive recovery failures. The node will
     eventually become banned from the cluster.
     This controls how long the culprit node will be banned from the cluster
     before it is allowed to try to join the cluster again.
     Don't set to small. A node gets banned for a reason and it is usually due
     to real problems with the node.
-    </p></div><div class="refsect2" title="DatabaseHashSize"><a name="idp150920"></a><h3>DatabaseHashSize</h3><p>Default: 100001</p><p>
+    </p></div><div class="refsect2" title="DatabaseHashSize"><a name="idp5001824"></a><h3>DatabaseHashSize</h3><p>Default: 100001</p><p>
     Size of the hash chains for the local store of the tdbs that ctdb manages.
-    </p></div><div class="refsect2" title="DatabaseMaxDead"><a name="idp151768"></a><h3>DatabaseMaxDead</h3><p>Default: 5</p><p>
+    </p></div><div class="refsect2" title="DatabaseMaxDead"><a name="idp5003328"></a><h3>DatabaseMaxDead</h3><p>Default: 5</p><p>
     How many dead records per hashchain in the TDB database do we allow before


-- 
CTDB repository


More information about the samba-cvs mailing list