1
0
Fork 0

[3.5] Minimize unnecessary dropping of followers due to poorly set synchronous replication timeouts (#9810)

* Minimize unnecessary dropping of followers due to poorly set synchronous replication timeouts.

* Add changelog entry.

* Add setIntroducedIn versions.
This commit is contained in:
Dan Larkin-York 2019-08-28 07:07:33 -04:00 committed by KVS85
parent 34957ee223
commit 7aea108197
8 changed files with 13 additions and 21 deletions

View File

@ -1,6 +1,10 @@
v3.5.1 (XXXX-XX-XX)
-------------------
* Make minimum timeout for synchronous replication configurable via parameter
(--cluster.synchronous-replication-timeout-minimum) and increase default value
to prevent dropping followers unnecessarily.
* Added support for TLS 1.3 for the arangod server and the client tools.
The default TLS protocol for the arangod server is still TLS 1.2 however, in order

View File

@ -31,7 +31,7 @@ namespace arangodb {
double ReplicationTimeoutFeature::timeoutFactor = 1.0;
double ReplicationTimeoutFeature::timeoutPer4k = 0.1;
double ReplicationTimeoutFeature::lowerLimit = 0.5;
double ReplicationTimeoutFeature::lowerLimit = 30.0;
ReplicationTimeoutFeature::ReplicationTimeoutFeature(application_features::ApplicationServer& server)
: ApplicationFeature(server, "ReplicationTimeout") {
@ -42,6 +42,14 @@ ReplicationTimeoutFeature::ReplicationTimeoutFeature(application_features::Appli
void ReplicationTimeoutFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
options->addSection("cluster", "Configure the cluster");
options
->addOption("--cluster.synchronous-replication-timeout-minimum",
"all synchronous replication timeouts will be at least "
"this value (in seconds)",
new DoubleParameter(&lowerLimit))
.setIntroducedIn(30501)
.setIntroducedIn(30408);
options->addOption(
"--cluster.synchronous-replication-timeout-factor",
"all synchronous replication timeouts are multiplied by this factor",
@ -55,10 +63,4 @@ void ReplicationTimeoutFeature::collectOptions(std::shared_ptr<ProgramOptions> o
arangodb::options::makeFlags(arangodb::options::Flags::Hidden));
}
void ReplicationTimeoutFeature::prepare() {
// set minimum timeout. this depends on the selected storage engine
TRI_ASSERT(EngineSelectorFeature::ENGINE != nullptr);
lowerLimit = EngineSelectorFeature::ENGINE->minimumSyncReplicationTimeout();
}
} // namespace arangodb

View File

@ -35,7 +35,6 @@ class ReplicationTimeoutFeature : public application_features::ApplicationFeatur
explicit ReplicationTimeoutFeature(application_features::ApplicationServer& server);
void collectOptions(std::shared_ptr<options::ProgramOptions>) override final;
void prepare() override final;
static double timeoutFactor;
static double timeoutPer4k;

View File

@ -63,9 +63,6 @@ class ClusterEngine final : public StorageEngine {
void prepare() override;
void start() override;
// minimum timeout for the synchronous replication
double minimumSyncReplicationTimeout() const override { return 1.0; }
bool supportsDfdb() const override { return false; }
bool useRawDocumentPointers() override { return false; }

View File

@ -80,9 +80,6 @@ class MMFilesEngine final : public StorageEngine {
// flush wal wait for collector
void stop() override;
// minimum timeout for the synchronous replication
double minimumSyncReplicationTimeout() const override { return 0.5; }
bool supportsDfdb() const override { return true; }
bool useRawDocumentPointers() override { return true; }

View File

@ -143,9 +143,6 @@ class RocksDBEngine final : public StorageEngine {
void stop() override;
void unprepare() override;
// minimum timeout for the synchronous replication
double minimumSyncReplicationTimeout() const override { return 1.0; }
bool supportsDfdb() const override { return false; }
bool useRawDocumentPointers() override { return false; }

View File

@ -114,9 +114,6 @@ class StorageEngine : public application_features::ApplicationFeature {
virtual std::unique_ptr<PhysicalCollection> createPhysicalCollection(
LogicalCollection& collection, velocypack::Slice const& info) = 0;
// minimum timeout for the synchronous replication
virtual double minimumSyncReplicationTimeout() const = 0;
// status functionality
// --------------------

View File

@ -195,7 +195,6 @@ class StorageEngineMock: public arangodb::StorageEngine {
virtual arangodb::RecoveryState recoveryState() override;
virtual TRI_voc_tick_t recoveryTick() override;
virtual arangodb::Result lastLogger(TRI_vocbase_t& vocbase, std::shared_ptr<arangodb::transaction::Context> transactionContext, uint64_t tickStart, uint64_t tickEnd, std::shared_ptr<VPackBuilder>& builderSPtr) override;
virtual double minimumSyncReplicationTimeout() const override { return 1.0; }
virtual std::unique_ptr<TRI_vocbase_t> openDatabase(arangodb::velocypack::Slice const& args, bool isUpgrade, bool isVersionCheck, int& status) override;
virtual arangodb::Result persistCollection(TRI_vocbase_t& vocbase, arangodb::LogicalCollection const& collection) override;
virtual void prepareDropDatabase(TRI_vocbase_t& vocbase, bool useWriteMarker, int& status) override;