a new tunable DatabaseMaxDead that enables the tdb max dead cache logic
authorAndrew Tridgell <tridge@samba.org>
Fri, 4 Jan 2008 22:36:53 +0000 (09:36 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 4 Jan 2008 22:36:53 +0000 (09:36 +1100)
include/ctdb.h
include/ctdb_private.h
server/ctdb_ltdb_server.c
server/ctdb_tunables.c

index e44706d8481fdb34a6dfd2b3cdb5cb9848a7abf4..14f75b4c822878be71569d84e5c8c91b6cc6d164 100644 (file)
@@ -297,7 +297,36 @@ struct ctdb_key_list {
        struct ctdb_ltdb_header *headers;
        TDB_DATA *data;
 };
-int ctdb_ctrl_pulldb(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid, uint32_t lmaster, TALLOC_CTX *mem_ctx, struct ctdb_key_list *keys);
+
+int ctdb_ctrl_pulldb(
+       struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
+       uint32_t lmaster, TALLOC_CTX *mem_ctx,
+       struct timeval timeout, TDB_DATA *outdata);
+
+struct ctdb_client_control_state *ctdb_ctrl_pulldb_send(
+       struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
+       uint32_t lmaster, TALLOC_CTX *mem_ctx, struct timeval timeout);
+
+int ctdb_ctrl_pulldb_recv(
+       struct ctdb_context *ctdb,
+       TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state,
+       TDB_DATA *outdata);
+
+int ctdb_ctrl_pushdb(
+       struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
+       TALLOC_CTX *mem_ctx,
+       struct timeval timeout, TDB_DATA indata);
+
+struct ctdb_client_control_state *ctdb_ctrl_pushdb_send(
+       struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
+       TALLOC_CTX *mem_ctx, struct timeval timeout,
+       TDB_DATA indata);
+
+int ctdb_ctrl_pushdb_recv(
+       struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
+       struct ctdb_client_control_state *state);
+
+
 int ctdb_ctrl_copydb(struct ctdb_context *ctdb, 
        struct timeval timeout, uint32_t sourcenode, 
        uint32_t destnode, uint32_t dbid, uint32_t lmaster, 
index 7f5ff2d1b208bd6d1eb0796e5b73b00df43faff6..b705adad36bafe10793931aa0797a351adf4b5c9 100644 (file)
@@ -86,6 +86,7 @@ struct ctdb_tunable {
        uint32_t recovery_grace_period;
        uint32_t recovery_ban_period;
        uint32_t database_hash_size;
+       uint32_t database_max_dead;
        uint32_t rerecovery_timeout;
        uint32_t enable_bans;
        uint32_t deterministic_public_ips;
@@ -1058,8 +1059,25 @@ void ctdb_node_dead(struct ctdb_node *node);
 void ctdb_node_connected(struct ctdb_node *node);
 bool ctdb_blocking_freeze(struct ctdb_context *ctdb);
 int32_t ctdb_control_max_rsn(struct ctdb_context *ctdb, TDB_DATA indata, TDB_DATA *outdata);
+
+struct ctdb_client_control_state *ctdb_ctrl_set_rsn_nonempty_send(
+       struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, 
+       uint32_t destnode, uint32_t db_id, uint64_t rsn);
+int ctdb_ctrl_set_rsn_nonempty_recv(struct ctdb_context *ctdb, 
+                                   struct ctdb_client_control_state *state);
+int ctdb_ctrl_set_rsn_nonempty(struct ctdb_context *ctdb, struct timeval timeout, 
+                              uint32_t destnode, uint32_t db_id, uint64_t rsn);
+struct ctdb_client_control_state *ctdb_ctrl_delete_low_rsn_send(
+       struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, 
+       uint32_t destnode, uint32_t db_id, uint64_t rsn);
+int ctdb_ctrl_delete_low_rsn_recv(struct ctdb_context *ctdb, 
+                                 struct ctdb_client_control_state *state);
+int ctdb_ctrl_delete_low_rsn(struct ctdb_context *ctdb, struct timeval timeout, 
+                            uint32_t destnode, uint32_t db_id, uint64_t rsn);
+
 int32_t ctdb_control_set_rsn_nonempty(struct ctdb_context *ctdb, TDB_DATA indata, TDB_DATA *outdata);
 int32_t ctdb_control_delete_low_rsn(struct ctdb_context *ctdb, TDB_DATA indata, TDB_DATA *outdata);
+
 int ctdb_ctrl_get_max_rsn(struct ctdb_context *ctdb, struct timeval timeout, 
                          uint32_t destnode, uint32_t db_id, uint64_t *max_rsn);
 int ctdb_ctrl_set_rsn_nonempty(struct ctdb_context *ctdb, struct timeval timeout, 
index 862d5bb53dd64385fbda70930d4c9eaf265538ca..835e3f31b2cd8f74504d0d94eb0a104a93678fdb 100644 (file)
@@ -260,6 +260,9 @@ static int ctdb_local_attach(struct ctdb_context *ctdb, const char *db_name, boo
 
        DLIST_ADD(ctdb->db_list, ctdb_db);
 
+       /* setting this can help some high churn databases */
+       tdb_set_max_dead(ctdb_db->ltdb->tdb, ctdb->tunable.database_max_dead);
+
        /* 
           all databases support the "null" function. we need this in
           order to do forced migration of records
index 69b1b203de6374c4bf40214bb752e92ec089cae5..6c58e16aa1b373c63d7f96dd9590b19ac296bbe8 100644 (file)
@@ -42,6 +42,7 @@ static const struct {
        { "RecoveryGracePeriod", 60,  offsetof(struct ctdb_tunable, recovery_grace_period) },
        { "RecoveryBanPeriod",  300,  offsetof(struct ctdb_tunable, recovery_ban_period) },
        { "DatabaseHashSize", 10000,  offsetof(struct ctdb_tunable, database_hash_size) },
+       { "DatabaseMaxDead",      5,  offsetof(struct ctdb_tunable, database_max_dead) },
        { "RerecoveryTimeout",   10,  offsetof(struct ctdb_tunable, rerecovery_timeout) },
        { "EnableBans",           1,  offsetof(struct ctdb_tunable, enable_bans) },
        { "DeterministicIPs",     1,  offsetof(struct ctdb_tunable, deterministic_public_ips) },