diff options
author | Amitay Isaacs <amitay@gmail.com> | 2016-02-09 11:59:30 +1100 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2016-03-07 11:29:00 +0100 |
commit | ace23f0a81b057fbabd7e75a777688fee81bce94 (patch) | |
tree | a3b6ec6e737ddbe9fd5d04be7a75bf3ab3e737e6 /ctdb/server/ctdb_lock_helper.c | |
parent | 00b9e76904bb1108e0f06d0dba4df89394d58252 (diff) | |
download | samba-ace23f0a81b057fbabd7e75a777688fee81bce94.tar.gz |
ctdb-locking: Use real-time only for actual record or DB locking
Use real-time priority only for obtaining record and database locks.
Do not open databases with real-time priority as it can cause thundering
herd on fcntl lock while opening tdb database. Also relinquish real-time
priority after the lock is obtained.
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Mon Mar 7 11:29:00 CET 2016 on sn-devel-144
Diffstat (limited to 'ctdb/server/ctdb_lock_helper.c')
-rw-r--r-- | ctdb/server/ctdb_lock_helper.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/ctdb/server/ctdb_lock_helper.c b/ctdb/server/ctdb_lock_helper.c index 4f1fe2d5e10..cdcbb4ac635 100644 --- a/ctdb/server/ctdb_lock_helper.c +++ b/ctdb/server/ctdb_lock_helper.c @@ -69,6 +69,7 @@ static int lock_record(const char *dbpath, const char *dbflags, const char *dbke TDB_DATA key; struct tdb_context *tdb; int tdb_flags; + bool realtime; /* No error checking since CTDB always passes sane values */ tdb_flags = strtol(dbflags, NULL, 0); @@ -87,12 +88,22 @@ static int lock_record(const char *dbpath, const char *dbflags, const char *dbke return 1; } + realtime = set_scheduler(); + if (! realtime) { + fprintf(stderr, "%s: Unable to set real-time scheduler priority\n", + progname); + } + if (tdb_chainlock(tdb, key) < 0) { fprintf(stderr, "%s: Error getting record lock (%s)\n", progname, tdb_errorstr(tdb)); return 1; } + if (realtime) { + reset_scheduler(); + } + return 0; } @@ -102,6 +113,7 @@ static int lock_db(const char *dbpath, const char *dbflags) { struct tdb_context *tdb; int tdb_flags; + bool realtime; /* No error checking since CTDB always passes sane values */ tdb_flags = strtol(dbflags, NULL, 0); @@ -112,12 +124,22 @@ static int lock_db(const char *dbpath, const char *dbflags) return 1; } + realtime = set_scheduler(); + if (! realtime) { + fprintf(stderr, "%s: Unable to set real-time scheduler priority\n", + progname); + } + if (tdb_lockall(tdb) < 0) { fprintf(stderr, "%s: Error getting db lock (%s)\n", progname, tdb_errorstr(tdb)); return 1; } + if (realtime) { + reset_scheduler(); + } + return 0; } @@ -136,11 +158,6 @@ int main(int argc, char *argv[]) exit(1); } - if (!set_scheduler()) { - fprintf(stderr, "%s: Unable to set real-time scheduler priority\n", - progname); - } - log_fd = atoi(argv[1]); close(STDOUT_FILENO); close(STDERR_FILENO); |