diff options
Diffstat (limited to 'searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp b/searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp index a5b0df67b77..35d6973e34b 100644 --- a/searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/memory_flush_config_updater.cpp @@ -20,7 +20,7 @@ shouldUseConservativeMode(const ResourceUsageState &resourceState, } void -MemoryFlushConfigUpdater::considerUseConservativeDiskMode(const LockGuard &, +MemoryFlushConfigUpdater::considerUseConservativeDiskMode(const LockGuard &guard, MemoryFlush::Config &newConfig) { if (shouldUseConservativeMode(_currState.diskState(), _useConservativeDiskMode, @@ -30,6 +30,9 @@ MemoryFlushConfigUpdater::considerUseConservativeDiskMode(const LockGuard &, _useConservativeDiskMode = true; } else { _useConservativeDiskMode = false; + if (_nodeRetired) { + considerUseRelaxedDiskMode(guard, newConfig); + } } } @@ -49,6 +52,18 @@ MemoryFlushConfigUpdater::considerUseConservativeMemoryMode(const LockGuard &, } void +MemoryFlushConfigUpdater::considerUseRelaxedDiskMode(const LockGuard &, MemoryFlush::Config &newConfig) +{ + double utilization = _currState.diskState().utilization(); + double bloatMargin = _currConfig.conservative.lowwatermarkfactor - utilization; + if (bloatMargin > 0.0) { + // Node retired and disk utiliation is below low mater mark factor. + newConfig.diskBloatFactor = 1.0; + newConfig.globalDiskBloatFactor = std::max(bloatMargin * 0.8, _currConfig.diskbloatfactor); + } +} + +void MemoryFlushConfigUpdater::updateFlushStrategy(const LockGuard &guard) { MemoryFlush::Config newConfig = convertConfig(_currConfig, _memory); @@ -66,7 +81,8 @@ MemoryFlushConfigUpdater::MemoryFlushConfigUpdater(const MemoryFlush::SP &flushS _memory(memory), _currState(), _useConservativeDiskMode(false), - _useConservativeMemoryMode(false) + _useConservativeMemoryMode(false), + _nodeRetired(false) { } @@ -86,6 +102,14 @@ MemoryFlushConfigUpdater::notifyDiskMemUsage(DiskMemUsageState newState) updateFlushStrategy(guard); } +void +MemoryFlushConfigUpdater::setNodeRetired(bool nodeRetired) +{ + LockGuard guard(_mutex); + _nodeRetired = nodeRetired; + updateFlushStrategy(guard); +} + namespace { size_t |