summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2009-12-16 20:59:15 +1030
committerRusty Russell <rusty@rustcorp.com.au>2009-12-16 20:59:15 +1030
commitf148735928a45eb88aecf582c91e22f864c74b1c (patch)
treef124b2bea7ddd0af4669731897ce29296fa1197f
parent640c48c8446d610623ca4babbfedfccf80bb6f78 (diff)
downloadsamba-f148735928a45eb88aecf582c91e22f864c74b1c.tar.gz
samba-f148735928a45eb88aecf582c91e22f864c74b1c.tar.xz
samba-f148735928a45eb88aecf582c91e22f864c74b1c.zip
Add --valgringing flag instead of --nosetsched
The do_setsched was being tested for whether to mmap tdbs: let's make it explicit. We can also happily move the kill-child eventscript hack under this flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (This used to be ctdb commit 2ee86cc1f311d7b7504c7b14d142b9c4f6f4b469)
-rw-r--r--ctdb/client/ctdb_client.c2
-rwxr-xr-xctdb/config/ctdb.init2
-rw-r--r--ctdb/include/ctdb_private.h1
-rw-r--r--ctdb/server/ctdb_ltdb_server.c2
-rw-r--r--ctdb/server/ctdb_recoverd.c2
-rw-r--r--ctdb/server/ctdb_vacuum.c8
-rw-r--r--ctdb/server/ctdbd.c7
-rw-r--r--ctdb/server/eventscript.c5
8 files changed, 19 insertions, 10 deletions
diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c
index 0469ba7280..75bc0a45fb 100644
--- a/ctdb/client/ctdb_client.c
+++ b/ctdb/client/ctdb_client.c
@@ -1683,7 +1683,7 @@ struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name,
}
tdb_flags = persistent?TDB_DEFAULT:TDB_NOSYNC;
- if (!ctdb->do_setsched) {
+ if (ctdb->valgrinding) {
tdb_flags |= TDB_NOMMAP;
}
diff --git a/ctdb/config/ctdb.init b/ctdb/config/ctdb.init
index 67747fd149..1bd329ea71 100755
--- a/ctdb/config/ctdb.init
+++ b/ctdb/config/ctdb.init
@@ -153,7 +153,7 @@ start() {
case $init_style in
valgrind)
valgrind -q --log-file=/var/log/ctdb_valgrind \
- $ctdbd --nosetsched $CTDB_OPTIONS
+ $ctdbd --valgrinding $CTDB_OPTIONS
RETVAL=$?
echo
;;
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index feff0bc24e..e577abc9f8 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -447,6 +447,7 @@ struct ctdb_context {
struct ctdb_log_state *log;
int start_as_disabled;
int start_as_stopped;
+ bool valgrinding;
uint32_t event_script_timeouts; /* counting how many consecutive times an eventscript has timedout */
uint32_t *recd_ping_count;
TALLOC_CTX *release_ips_ctx; /* a context used to automatically drop all IPs if we fail to recover the node */
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index 37abe116da..6c204821dc 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -248,7 +248,7 @@ static int ctdb_local_attach(struct ctdb_context *ctdb, const char *db_name, boo
db_name, ctdb->pnn);
tdb_flags = persistent? TDB_DEFAULT : TDB_CLEAR_IF_FIRST | TDB_NOSYNC;
- if (!ctdb->do_setsched) {
+ if (ctdb->valgrinding) {
tdb_flags |= TDB_NOMMAP;
}
diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c
index 3e596da9ec..45b59d128a 100644
--- a/ctdb/server/ctdb_recoverd.c
+++ b/ctdb/server/ctdb_recoverd.c
@@ -1017,7 +1017,7 @@ static struct tdb_wrap *create_recdb(struct ctdb_context *ctdb, TALLOC_CTX *mem_
unlink(name);
tdb_flags = TDB_NOLOCK;
- if (!ctdb->do_setsched) {
+ if (ctdb->valgrinding) {
tdb_flags |= TDB_NOMMAP;
}
diff --git a/ctdb/server/ctdb_vacuum.c b/ctdb/server/ctdb_vacuum.c
index d09c07d9ff..655ecca6cf 100644
--- a/ctdb/server/ctdb_vacuum.c
+++ b/ctdb/server/ctdb_vacuum.c
@@ -514,6 +514,7 @@ static int update_tuning_db(struct ctdb_db_context *ctdb_db, struct vacuum_data
struct vacuum_tuning_data tdata;
struct vacuum_tuning_data *tptr;
char *vac_dbname;
+ int flags;
vac_dbname = talloc_asprintf(tmp_ctx, "%s/%s.%u",
ctdb_db->ctdb->db_directory,
@@ -524,7 +525,8 @@ static int update_tuning_db(struct ctdb_db_context *ctdb_db, struct vacuum_data
return -1;
}
- tune_tdb = tdb_open(vac_dbname, 0, 0, O_RDWR|O_CREAT, 0644);
+ flags = ctdb_db->ctdb->valgrinding ? TDB_NOMMAP : 0;
+ tune_tdb = tdb_open(vac_dbname, 0, flags, O_RDWR|O_CREAT, 0644);
if (tune_tdb == NULL) {
DEBUG(DEBUG_ERR,(__location__ " Failed to create/open %s\n", TUNINGDBNAME));
talloc_free(tmp_ctx);
@@ -677,6 +679,7 @@ static int get_vacuum_interval(struct ctdb_db_context *ctdb_db)
char *vac_dbname;
uint interval = ctdb_db->ctdb->tunable.vacuum_default_interval;
struct ctdb_context *ctdb = ctdb_db->ctdb;
+ int flags;
vac_dbname = talloc_asprintf(tmp_ctx, "%s/%s.%u", ctdb->db_directory, TUNINGDBNAME, ctdb->pnn);
if (vac_dbname == NULL) {
@@ -685,7 +688,8 @@ static int get_vacuum_interval(struct ctdb_db_context *ctdb_db)
return interval;
}
- tdb = tdb_open(vac_dbname, 0, 0, O_RDWR|O_CREAT, 0644);
+ flags = ctdb_db->ctdb->valgrinding ? TDB_NOMMAP : 0;
+ tdb = tdb_open(vac_dbname, 0, flags, O_RDWR|O_CREAT, 0644);
if (!tdb) {
DEBUG(DEBUG_ERR,("Unable to open/create database %s using default interval\n", vac_dbname));
talloc_free(tmp_ctx);
diff --git a/ctdb/server/ctdbd.c b/ctdb/server/ctdbd.c
index 8647aad189..f38ed66d83 100644
--- a/ctdb/server/ctdbd.c
+++ b/ctdb/server/ctdbd.c
@@ -41,7 +41,7 @@ static struct {
const char *public_interface;
const char *single_public_ip;
const char *node_ip;
- int no_setsched;
+ int valgrinding;
int use_syslog;
int start_as_disabled;
int start_as_stopped;
@@ -127,7 +127,7 @@ int main(int argc, const char *argv[])
{ "dbdir", 0, POPT_ARG_STRING, &options.db_dir, 0, "directory for the tdb files", NULL },
{ "dbdir-persistent", 0, POPT_ARG_STRING, &options.db_dir_persistent, 0, "directory for persistent tdb files", NULL },
{ "reclock", 0, POPT_ARG_STRING, &options.recovery_lock_file, 0, "location of recovery lock file", "filename" },
- { "nosetsched", 0, POPT_ARG_NONE, &options.no_setsched, 0, "disable setscheduler SCHED_FIFO call", NULL },
+ { "valgrinding", 0, POPT_ARG_NONE, &options.valgrinding, 0, "disable setscheduler SCHED_FIFO call, use mmap for tdbs", NULL },
{ "syslog", 0, POPT_ARG_NONE, &options.use_syslog, 0, "log messages to syslog", NULL },
{ "start-as-disabled", 0, POPT_ARG_NONE, &options.start_as_disabled, 0, "Node starts in disabled state", NULL },
{ "start-as-stopped", 0, POPT_ARG_NONE, &options.start_as_stopped, 0, "Node starts in stopped state", NULL },
@@ -311,7 +311,8 @@ int main(int argc, const char *argv[])
}
}
- ctdb->do_setsched = !options.no_setsched;
+ ctdb->valgrinding = options.valgrinding;
+ ctdb->do_setsched = !ctdb->valgrinding;
ctdb->do_checkpublicip = !options.no_publicipcheck;
diff --git a/ctdb/server/eventscript.c b/ctdb/server/eventscript.c
index 59cb6a3006..803ac1daa0 100644
--- a/ctdb/server/eventscript.c
+++ b/ctdb/server/eventscript.c
@@ -452,7 +452,10 @@ static void ctdb_event_script_handler(struct event_context *ev, struct fd_event
/* valgrind gets overloaded if we run next script as it's still doing
* post-execution analysis, so kill finished child here. */
- kill(state->child, SIGKILL);
+ if (ctdb->valgrinding) {
+ kill(state->child, SIGKILL);
+ }
+
state->child = 0;
/* Aborted or finished all scripts? We're done. */