FETCH COLLAPSE : Change the fetch-lock collapse to collapse ALL fetches, including...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Tue, 20 Mar 2012 00:31:59 +0000 (11:31 +1100)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Tue, 20 Mar 2012 00:39:00 +0000 (11:39 +1100)
(This used to be ctdb commit eafd7bbaaa5931546a96c8beae3cf9a39a49c925)

ctdb/include/ctdb_private.h
ctdb/server/ctdb_daemon.c
ctdb/server/ctdb_tunables.c

index 303995389fad4ecbfbf11872662055acb15bc793..aa687d4311bfa872b66752a8475886f65afa4978 100644 (file)
@@ -125,6 +125,7 @@ struct ctdb_tunable {
        uint32_t allow_client_db_attach;
        uint32_t recover_pdb_by_seqnum;
        uint32_t deferred_rebalance_on_node_add;
+       uint32_t fetch_collapse;
 };
 
 /*
index 65ad055b1b95e98cd383ec6cb93178aaa6885c80..a267b88e1b191d09d17658f99bd5402f0b8b3ade 100644 (file)
@@ -673,11 +673,12 @@ static void daemon_request_call_from_client(struct ctdb_client *client,
                return;
        }
 
-       if (c->flags & CTDB_IMMEDIATE_MIGRATION) {
-               /* check if this fetch-lock request is a duplicate for a
-                  request we already have in flight. If so defer it until
-                  the first request completes.
-                */
+
+       /* check if this fetch request is a duplicate for a
+          request we already have in flight. If so defer it until
+          the first request completes.
+       */
+       if (ctdb->tunable.fetch_collapse == 1) {
                if (requeue_duplicate_fetch(ctdb_db, client, key, c) == 0) {
                        ret = ctdb_ltdb_unlock(ctdb_db, key);
                        if (ret != 0) {
@@ -790,7 +791,7 @@ static void daemon_request_call_from_client(struct ctdb_client *client,
                state = ctdb_call_local_send(ctdb_db, call, &header, &data);
        } else {
                state = ctdb_daemon_call_send_remote(ctdb_db, call, &header);
-               if (call->flags & CTDB_IMMEDIATE_MIGRATION) {
+               if (ctdb->tunable.fetch_collapse == 1) {
                        /* This request triggered a remote fetch-lock.
                           set up a deferral for this key so any additional
                           fetch-locks are deferred until the current one
index 76af85d4c6e34dd285d9a4da5e6afdc18f9b1fcc..016acc446717f82dc5c239bdca6684c332925de1 100644 (file)
@@ -73,7 +73,8 @@ static const struct {
        { "DeferredAttachTO",  120,  offsetof(struct ctdb_tunable, deferred_attach_timeout), false },
        { "AllowClientDBAttach", 1, offsetof(struct ctdb_tunable, allow_client_db_attach), false },
        { "RecoverPDBBySeqNum",  0, offsetof(struct ctdb_tunable, recover_pdb_by_seqnum), false },
-       { "DeferredRebalanceOnNodeAdd", 300, offsetof(struct ctdb_tunable, deferred_rebalance_on_node_add) }
+       { "DeferredRebalanceOnNodeAdd", 300, offsetof(struct ctdb_tunable, deferred_rebalance_on_node_add) },
+       { "FetchCollapse",       1, offsetof(struct ctdb_tunable, fetch_collapse) }
 };
 
 /*