diff --git a/fdbclient/ServerKnobs.cpp b/fdbclient/ServerKnobs.cpp index 0d3226ea35..aeed11b925 100644 --- a/fdbclient/ServerKnobs.cpp +++ b/fdbclient/ServerKnobs.cpp @@ -364,6 +364,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi init( START_TRANSACTION_MAX_EMPTY_QUEUE_BUDGET, 10.0 ); init( START_TRANSACTION_MAX_QUEUE_SIZE, 1e6 ); init( KEY_LOCATION_MAX_QUEUE_SIZE, 1e6 ); + init( COMMIT_PROXY_LIVENESS_TIMEOUT, 20.0 ); init( COMMIT_TRANSACTION_BATCH_INTERVAL_FROM_IDLE, 0.0005 ); if( randomize && BUGGIFY ) COMMIT_TRANSACTION_BATCH_INTERVAL_FROM_IDLE = 0.005; init( COMMIT_TRANSACTION_BATCH_INTERVAL_MIN, 0.001 ); if( randomize && BUGGIFY ) COMMIT_TRANSACTION_BATCH_INTERVAL_MIN = 0.1; diff --git a/fdbclient/ServerKnobs.h b/fdbclient/ServerKnobs.h index c8a093a091..18c2a93eac 100644 --- a/fdbclient/ServerKnobs.h +++ b/fdbclient/ServerKnobs.h @@ -297,6 +297,7 @@ public: double START_TRANSACTION_MAX_EMPTY_QUEUE_BUDGET; int START_TRANSACTION_MAX_QUEUE_SIZE; int KEY_LOCATION_MAX_QUEUE_SIZE; + double COMMIT_PROXY_LIVENESS_TIMEOUT; double COMMIT_TRANSACTION_BATCH_INTERVAL_FROM_IDLE; double COMMIT_TRANSACTION_BATCH_INTERVAL_MIN; diff --git a/fdbserver/CommitProxyServer.actor.cpp b/fdbserver/CommitProxyServer.actor.cpp index 337a24e956..63fd4e9016 100644 --- a/fdbserver/CommitProxyServer.actor.cpp +++ b/fdbserver/CommitProxyServer.actor.cpp @@ -1922,10 +1922,14 @@ ACTOR Future commitProxyServerCore(CommitProxyInterface proxy, lastCommit = now(); if (trs.size() || lastCommitComplete.isReady()) { - lastCommitComplete = - commitBatch(&commitData, - const_cast*>(&batchedRequests.first), - batchBytes); + lastCommitComplete = transformError( + timeoutError( + commitBatch(&commitData, + const_cast*>(&batchedRequests.first), + batchBytes), + SERVER_KNOBS->COMMIT_PROXY_LIVENESS_TIMEOUT), + timed_out(), + failed_to_progress()); addActor.send(lastCommitComplete); } } @@ -2067,9 +2071,11 @@ ACTOR Future commitProxyServer(CommitProxyInterface proxy, if (e.code() != error_code_worker_removed && e.code() != error_code_tlog_stopped && e.code() != error_code_master_tlog_failed && e.code() != error_code_coordinators_changed && - e.code() != error_code_coordinated_state_conflict && e.code() != error_code_new_coordinators_timed_out) { + e.code() != error_code_coordinated_state_conflict && e.code() != error_code_new_coordinators_timed_out && + e.code() != error_code_failed_to_progress) { throw; } + TEST(e.code() == error_code_failed_to_progress); // Commit proxy failed to progress } return Void(); }