diff options
author | Volker Lendecke <vl@samba.org> | 2010-03-05 16:46:36 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2010-03-22 17:32:18 +0100 |
commit | 70f9338bf2e6081916ffe5bb7cddf50b4e958b24 (patch) | |
tree | 8a7fe5fc62fd2d06b3afe2cf2415b7cabedb1bb4 /source3 | |
parent | cad0c004ad54d80dcb25803f0ebb317344a42792 (diff) | |
download | samba-70f9338bf2e6081916ffe5bb7cddf50b4e958b24.tar.gz samba-70f9338bf2e6081916ffe5bb7cddf50b4e958b24.tar.bz2 samba-70f9338bf2e6081916ffe5bb7cddf50b4e958b24.zip |
s3: Add the "ctdb locktime warn threshold" parameter
This is mainly a debugging aid for post-mortem analysis in case a cluster file
system is slow.
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/lib/dbwrap_ctdb.c | 12 | ||||
-rw-r--r-- | source3/param/loadparm.c | 12 |
3 files changed, 25 insertions, 0 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 06d324eea4..346da39749 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4145,6 +4145,7 @@ const char *lp_ctdbd_socket(void); const char **lp_cluster_addresses(void); bool lp_clustering(void); int lp_ctdb_timeout(void); +int lp_ctdb_locktime_warn_threshold(void); char *lp_printcommand(int ); char *lp_lpqcommand(int ); char *lp_lprmcommand(int ); diff --git a/source3/lib/dbwrap_ctdb.c b/source3/lib/dbwrap_ctdb.c index 938a312657..bef91cb1ec 100644 --- a/source3/lib/dbwrap_ctdb.c +++ b/source3/lib/dbwrap_ctdb.c @@ -50,6 +50,7 @@ struct db_ctdb_ctx { struct db_ctdb_rec { struct db_ctdb_ctx *ctdb_ctx; struct ctdb_ltdb_header header; + struct timeval lock_time; }; static NTSTATUS tdb_error_to_ntstatus(struct tdb_context *tdb) @@ -898,6 +899,7 @@ static int db_ctdb_record_destr(struct db_record* data) { struct db_ctdb_rec *crec = talloc_get_type_abort( data->private_data, struct db_ctdb_rec); + int threshold; DEBUG(10, (DEBUGLEVEL > 10 ? "Unlocking db %u key %s\n" @@ -911,6 +913,14 @@ static int db_ctdb_record_destr(struct db_record* data) return -1; } + threshold = lp_ctdb_locktime_warn_threshold(); + if (threshold != 0) { + double timediff = timeval_elapsed(&crec->lock_time); + if ((timediff * 1000) > threshold) { + DEBUG(0, ("Held tdb lock %f seconds\n", timediff)); + } + } + return 0; } @@ -1011,6 +1021,8 @@ again: migrate_attempts)); } + GetTimeOfDay(&crec->lock_time); + memcpy(&crec->header, ctdb_data.dptr, sizeof(crec->header)); result->value.dsize = ctdb_data.dsize - sizeof(crec->header); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 76b0d35066..a6e096e09f 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -274,6 +274,7 @@ struct global { char **szClusterAddresses; bool clustering; int ctdb_timeout; + int ctdb_locktime_warn_threshold; int ldap_passwd_sync; int ldap_replication_sleep; int ldap_timeout; /* This is initialised in init_globals */ @@ -2577,6 +2578,15 @@ static struct parm_struct parm_table[] = { .enum_list = NULL, .flags = FLAG_ADVANCED | FLAG_GLOBAL, }, + { + .label = "ctdb locktime warn threshold", + .type = P_INTEGER, + .p_class = P_GLOBAL, + .ptr = &Globals.ctdb_locktime_warn_threshold, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED | FLAG_GLOBAL, + }, {N_("Printing Options"), P_SEP, P_SEPARATOR}, @@ -5185,6 +5195,7 @@ static void init_globals(bool first_time_only) Globals.szClusterAddresses = NULL; Globals.clustering = False; Globals.ctdb_timeout = 0; + Globals.ctdb_locktime_warn_threshold = 0; Globals.winbind_cache_time = 300; /* 5 minutes */ Globals.winbind_reconnect_delay = 30; /* 30 seconds */ @@ -5640,6 +5651,7 @@ FN_GLOBAL_CONST_STRING(lp_ctdbd_socket, &Globals.ctdbdSocket) FN_GLOBAL_LIST(lp_cluster_addresses, &Globals.szClusterAddresses) FN_GLOBAL_BOOL(lp_clustering, &Globals.clustering) FN_GLOBAL_INTEGER(lp_ctdb_timeout, &Globals.ctdb_timeout) +FN_GLOBAL_INTEGER(lp_ctdb_locktime_warn_threshold, &Globals.ctdb_locktime_warn_threshold) FN_LOCAL_STRING(lp_printcommand, szPrintcommand) FN_LOCAL_STRING(lp_lpqcommand, szLpqcommand) FN_LOCAL_STRING(lp_lprmcommand, szLprmcommand) |