diff --git a/fdbclient/Knobs.cpp b/fdbclient/Knobs.cpp index 5168333bb0..1d30370784 100644 --- a/fdbclient/Knobs.cpp +++ b/fdbclient/Knobs.cpp @@ -60,7 +60,7 @@ ClientKnobs::ClientKnobs(bool randomize) { init( SPLIT_KEY_SIZE_LIMIT, KEY_SIZE_LIMIT/2 ); if( randomize && BUGGIFY ) SPLIT_KEY_SIZE_LIMIT = KEY_SIZE_LIMIT - serverKeysPrefixFor(UID()).size() - 1; init( METADATA_VERSION_CACHE_SIZE, 1000 ); - init( MAX_BATCH_SIZE, 20 ); if( randomize && BUGGIFY ) MAX_BATCH_SIZE = 1; // Note that SERVER_KNOBS->START_TRANSACTION_MAX_BUDGET_SIZE is set to match this value + init( MAX_BATCH_SIZE, 1000 ); if( randomize && BUGGIFY ) MAX_BATCH_SIZE = 1; // Note that SERVER_KNOBS->START_TRANSACTION_MAX_BUDGET_SIZE is set to match this value init( GRV_BATCH_TIMEOUT, 0.005 ); if( randomize && BUGGIFY ) GRV_BATCH_TIMEOUT = 0.1; init( LOCATION_CACHE_EVICTION_SIZE, 300000 ); diff --git a/fdbserver/Knobs.cpp b/fdbserver/Knobs.cpp index 0d7122cccf..7064672ef8 100644 --- a/fdbserver/Knobs.cpp +++ b/fdbserver/Knobs.cpp @@ -250,8 +250,9 @@ ServerKnobs::ServerKnobs(bool randomize, ClientKnobs* clientKnobs) { init( START_TRANSACTION_BATCH_INTERVAL_LATENCY_FRACTION, 0.5 ); init( START_TRANSACTION_BATCH_INTERVAL_SMOOTHER_ALPHA, 0.1 ); init( START_TRANSACTION_BATCH_QUEUE_CHECK_INTERVAL, 0.001 ); - init( START_TRANSACTION_MAX_TRANSACTIONS_TO_START, 10000 ); - init( START_TRANSACTION_MAX_BUDGET_SIZE, 20 ); // Currently set to match CLIENT_KNOBS->MAX_BATCH_SIZE + init( START_TRANSACTION_MAX_TRANSACTIONS_TO_START, 500000 ); + init( START_TRANSACTION_MAX_BUDGET_SIZE, 1000 ); // Currently set to match CLIENT_KNOBS->MAX_BATCH_SIZE + init( START_TRANSACTION_MAX_REQUESTS_TO_START, 10000 ); 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/fdbserver/Knobs.h b/fdbserver/Knobs.h index 219a5c89d2..3244818f58 100644 --- a/fdbserver/Knobs.h +++ b/fdbserver/Knobs.h @@ -199,6 +199,7 @@ public: double START_TRANSACTION_BATCH_QUEUE_CHECK_INTERVAL; double START_TRANSACTION_MAX_TRANSACTIONS_TO_START; double START_TRANSACTION_MAX_BUDGET_SIZE; + int START_TRANSACTION_MAX_REQUESTS_TO_START; double COMMIT_TRANSACTION_BATCH_INTERVAL_FROM_IDLE; double COMMIT_TRANSACTION_BATCH_INTERVAL_MIN; diff --git a/fdbserver/MasterProxyServer.actor.cpp b/fdbserver/MasterProxyServer.actor.cpp index 07c0a8a533..3886f18ed5 100644 --- a/fdbserver/MasterProxyServer.actor.cpp +++ b/fdbserver/MasterProxyServer.actor.cpp @@ -1156,7 +1156,8 @@ ACTOR static Future transactionStarter( double leftToStart = 0; double batchLeftToStart = 0; - while (!transactionQueue.empty()) { + int requestsToStart = 0; + while (!transactionQueue.empty() && requestsToStart < SERVER_KNOBS->START_TRANSACTION_MAX_REQUESTS_TO_START) { auto& req = transactionQueue.top().first; int tc = req.transactionCount; @@ -1182,6 +1183,7 @@ ACTOR static Future transactionStarter( start[req.flags & 1].push_back(std::move(req)); static_assert(GetReadVersionRequest::FLAG_CAUSAL_READ_RISKY == 1, "Implementation dependent on flag value"); transactionQueue.pop(); + requestsToStart++; } if (!transactionQueue.empty())