client: Increase the timeout for TRANS3_COMMIT control 2.5 ctdb-2.5.6
authorAmitay Isaacs <amitay@gmail.com>
Thu, 10 Mar 2016 07:01:31 +0000 (18:01 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Tue, 15 Mar 2016 02:01:41 +0000 (13:01 +1100)
On a busy system, TRANS3_COMMIT control can take upto or longer than
3 seconds.  On timeout, there are few possible outcomes.

1. The transaction has completed on all nodes and TRANS3_COMMIT control
   has returned.  In such a case, there is no problem.

2. The transaction has completed on the local node, but TRANS3_COMMIT
   control is still active.  In such a case, ctdb_transaction_commit()
   can return successfully.  If this is being called from ctdb, then
   ctdb will exit.  This will cause ctdb daemon to trigger recovery
   since the client exited while transaction is active.  This will cause
   unnecessary recovery.

3. Database recovery was started and ctdb_transaction_commit() will
   retry till the recovery completes the transaction.

Increasing the timeout to 30 seconds will avoid the spurious database
recoveries when TRANS3_COMMIT control takes longer to finish.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Fri Mar 11 19:59:53 CET 2016 on sn-devel-144

(Imported from commit ad5b9c3df2f2e3c93642fb1c069a6f4c56eb94f4)

client/ctdb_client.c

index d09e1c64147accb16f2e1f76c879154859e1a0e5..cc96d981e1c2d0d4c07b241f94a9d0a34175f4f1 100644 (file)
@@ -4320,7 +4320,7 @@ int ctdb_transaction_commit(struct ctdb_transaction_handle *h)
        }
 
 again:
-       timeout = timeval_current_ofs(3,0);
+       timeout = timeval_current_ofs(30,0);
        ret = ctdb_control(h->ctdb_db->ctdb, CTDB_CURRENT_NODE,
                           h->ctdb_db->db_id,
                           CTDB_CONTROL_TRANS3_COMMIT, 0,