ctdb-daemon: Ignore tdb open flags passed to DB attach controls
authorAmitay Isaacs <amitay@gmail.com>
Tue, 28 Mar 2017 06:14:51 +0000 (17:14 +1100)
committerMartin Schwenke <martins@samba.org>
Mon, 26 Jun 2017 13:47:24 +0000 (15:47 +0200)
The tdb open flags should be calculated based on the database type and
ctdb tunables.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/include/ctdb_private.h
ctdb/server/ctdb_control.c
ctdb/server/ctdb_ltdb_server.c

index dd54f35689dd349d9fc9440811c02f756c5ec96d..8cdb4d8f0fafa08234801864d62c3c0529ea64a7 100644 (file)
@@ -724,7 +724,7 @@ int ctdb_set_db_readonly(struct ctdb_context *ctdb,
 int ctdb_process_deferred_attach(struct ctdb_context *ctdb);
 
 int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
-                              TDB_DATA *outdata, uint64_t tdb_flags,
+                              TDB_DATA *outdata,
                               bool persistent, uint32_t client_id,
                               struct ctdb_req_control_old *c,
                               bool *async_reply);
index de86a18c63206299ad537e93368ba2d529651b4f..9aa5e78433132a24036d36a6f0a4e44c09276fa3 100644 (file)
@@ -267,10 +267,10 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
        }
 
        case CTDB_CONTROL_DB_ATTACH:
-         return ctdb_control_db_attach(ctdb, indata, outdata, srvid, false, client_id, c, async_reply);
+         return ctdb_control_db_attach(ctdb, indata, outdata, false, client_id, c, async_reply);
 
        case CTDB_CONTROL_DB_ATTACH_PERSISTENT:
-         return ctdb_control_db_attach(ctdb, indata, outdata, srvid, true, client_id, c, async_reply);
+         return ctdb_control_db_attach(ctdb, indata, outdata, true, client_id, c, async_reply);
 
        case CTDB_CONTROL_SET_CALL:
                return control_not_implemented("SET_CALL", NULL);
index 6b99545c92dd3a88f16e72fbd7be278883819a77..2790dd6ea7ed9b86bc177b635b9c4809fdf3efb7 100644 (file)
@@ -1109,7 +1109,7 @@ int ctdb_process_deferred_attach(struct ctdb_context *ctdb)
   a client has asked to attach a new database
  */
 int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
-                              TDB_DATA *outdata, uint64_t tdb_flags, 
+                              TDB_DATA *outdata,
                               bool persistent, uint32_t client_id,
                               struct ctdb_req_control_old *c,
                               bool *async_reply)
@@ -1169,16 +1169,6 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
                }
        }
 
-       /* the client can optionally pass additional tdb flags, but we
-          only allow a subset of those on the database in ctdb. Note
-          that tdb_flags is passed in via the (otherwise unused)
-          srvid to the attach control */
-#ifdef TDB_MUTEX_LOCKING
-       tdb_flags &= (TDB_NOSYNC|TDB_INCOMPATIBLE_HASH|TDB_MUTEX_LOCKING|TDB_CLEAR_IF_FIRST);
-#else
-       tdb_flags &= (TDB_NOSYNC|TDB_INCOMPATIBLE_HASH);
-#endif
-
        /* see if we already have this name */
        db = ctdb_db_handle(ctdb, db_name);
        if (db) {
@@ -1193,12 +1183,8 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
                return 0;
        }
 
-       with_jenkinshash = (tdb_flags & TDB_INCOMPATIBLE_HASH) ? true : false;
-#ifdef TDB_MUTEX_LOCKING
-       with_mutexes = (tdb_flags & TDB_MUTEX_LOCKING) ? true : false;
-#else
-       with_mutexes = false;
-#endif
+       with_jenkinshash = persistent ? false : true;
+       with_mutexes = (ctdb->tunable.mutex_enabled == 1) ? true : false;
 
        if (ctdb_local_attach(ctdb, db_name, persistent, NULL,
                              with_jenkinshash, with_mutexes) != 0) {
@@ -1218,7 +1204,7 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
        lockdown_memory(ctdb->valgrinding);
 
        /* tell all the other nodes about this database */
-       ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, tdb_flags,
+       ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0,
                                 persistent?CTDB_CONTROL_DB_ATTACH_PERSISTENT:
                                                CTDB_CONTROL_DB_ATTACH,
                                 0, CTDB_CTRL_FLAG_NOREPLY,