1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

dbwrap: determine basename once instead of three times

Currently determined twice in the clear-if-first codepath and once in
the ctdb code path. Do it once at the top of the function.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>

Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Mon Jul 16 21:11:30 CEST 2018 on sn-devel-144
This commit is contained in:
David Disseldorp 2018-07-10 13:35:30 +02:00 committed by Ralph Boehme
parent 26fd7096b1
commit 8cb96438bf

View File

@ -64,6 +64,7 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
uint64_t dbwrap_flags)
{
struct db_context *result = NULL;
const char *base;
const char *sockname;
if (!DBWRAP_LOCK_ORDER_VALID(lock_order)) {
@ -71,16 +72,15 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
return NULL;
}
if (tdb_flags & TDB_CLEAR_IF_FIRST) {
const char *base;
bool try_readonly = false;
base = strrchr_m(name, '/');
if (base != NULL) {
base++;
} else {
base = name;
}
base = strrchr_m(name, '/');
if (base != NULL) {
base += 1;
} else {
base = name;
}
if (tdb_flags & TDB_CLEAR_IF_FIRST) {
bool try_readonly = false;
if (dbwrap_flags & DBWRAP_FLAG_OPTIMIZE_READONLY_ACCESS) {
try_readonly = true;
@ -97,17 +97,9 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
}
if (tdb_flags & TDB_CLEAR_IF_FIRST) {
const char *base;
bool try_mutex = true;
bool require_mutex = false;
base = strrchr_m(name, '/');
if (base != NULL) {
base += 1;
} else {
base = name;
}
try_mutex = lp_parm_bool(-1, "dbwrap_tdb_mutexes", "*", try_mutex);
try_mutex = lp_parm_bool(-1, "dbwrap_tdb_mutexes", base, try_mutex);
@ -137,23 +129,14 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
sockname = lp_ctdbd_socket();
if (lp_clustering()) {
const char *partname;
if (!socket_exist(sockname)) {
DEBUG(1, ("ctdb socket does not exist - is ctdb not "
"running?\n"));
return NULL;
}
/* ctdb only wants the file part of the name */
partname = strrchr(name, '/');
if (partname) {
partname++;
} else {
partname = name;
}
/* allow ctdb for individual databases to be disabled */
if (lp_parm_bool(-1, "ctdb", partname, True)) {
if (lp_parm_bool(-1, "ctdb", base, true)) {
struct messaging_context *msg_ctx;
struct ctdbd_connection *conn;
@ -165,13 +148,12 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
}
msg_ctx = server_messaging_context();
result = db_open_ctdb(mem_ctx, msg_ctx, partname,
result = db_open_ctdb(mem_ctx, msg_ctx, base,
hash_size,
tdb_flags, open_flags, mode,
lock_order, dbwrap_flags);
if (result == NULL) {
DEBUG(0,("failed to attach to ctdb %s\n",
partname));
DBG_ERR("failed to attach to ctdb %s\n", base);
if (errno == 0) {
errno = EIO;
}