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) 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. * 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 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::timeoutFactor = 1.0;
double ReplicationTimeoutFeature::timeoutPer4k = 0.1; double ReplicationTimeoutFeature::timeoutPer4k = 0.1;
double ReplicationTimeoutFeature::lowerLimit = 0.5; double ReplicationTimeoutFeature::lowerLimit = 30.0;
ReplicationTimeoutFeature::ReplicationTimeoutFeature(application_features::ApplicationServer& server) ReplicationTimeoutFeature::ReplicationTimeoutFeature(application_features::ApplicationServer& server)
: ApplicationFeature(server, "ReplicationTimeout") { : ApplicationFeature(server, "ReplicationTimeout") {
@ -42,6 +42,14 @@ ReplicationTimeoutFeature::ReplicationTimeoutFeature(application_features::Appli
void ReplicationTimeoutFeature::collectOptions(std::shared_ptr<ProgramOptions> options) { void ReplicationTimeoutFeature::collectOptions(std::shared_ptr<ProgramOptions> options) {
options->addSection("cluster", "Configure the cluster"); 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( options->addOption(
"--cluster.synchronous-replication-timeout-factor", "--cluster.synchronous-replication-timeout-factor",
"all synchronous replication timeouts are multiplied by this 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)); 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 } // namespace arangodb

View File

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

View File

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

View File

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

View File

@ -143,9 +143,6 @@ class RocksDBEngine final : public StorageEngine {
void stop() override; void stop() override;
void unprepare() override; void unprepare() override;
// minimum timeout for the synchronous replication
double minimumSyncReplicationTimeout() const override { return 1.0; }
bool supportsDfdb() const override { return false; } bool supportsDfdb() const override { return false; }
bool useRawDocumentPointers() 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( virtual std::unique_ptr<PhysicalCollection> createPhysicalCollection(
LogicalCollection& collection, velocypack::Slice const& info) = 0; LogicalCollection& collection, velocypack::Slice const& info) = 0;
// minimum timeout for the synchronous replication
virtual double minimumSyncReplicationTimeout() const = 0;
// status functionality // status functionality
// -------------------- // --------------------

View File

@ -195,7 +195,6 @@ class StorageEngineMock: public arangodb::StorageEngine {
virtual arangodb::RecoveryState recoveryState() override; virtual arangodb::RecoveryState recoveryState() override;
virtual TRI_voc_tick_t recoveryTick() 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 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 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 arangodb::Result persistCollection(TRI_vocbase_t& vocbase, arangodb::LogicalCollection const& collection) override;
virtual void prepareDropDatabase(TRI_vocbase_t& vocbase, bool useWriteMarker, int& status) override; virtual void prepareDropDatabase(TRI_vocbase_t& vocbase, bool useWriteMarker, int& status) override;