aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2021-02-05 10:48:25 +0100
committerTor Egge <Tor.Egge@broadpark.no>2021-02-05 10:48:25 +0100
commit4332bf8944e022a422413c5efe870dc68c76dba1 (patch)
tree062cfe9ad0b4a389021d100159aae618d633512b /searchlib
parent1691b77f23c5cceb9141403a79441d78c3de797d (diff)
Only block for a short time when draining hold lists.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attributevector.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
index d2574bd32a2..dffd12677df 100644
--- a/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/attributevector.cpp
@@ -774,7 +774,7 @@ void
AttributeVector::drain_hold(uint64_t hold_limit)
{
incGeneration();
- for (int retry = 0; ; ++retry) {
+ for (int retry = 0; retry < 40; ++retry) {
removeAllOldGenerations();
updateStat(true);
if (_status.getOnHold() <= hold_limit) {
@@ -788,11 +788,16 @@ void
AttributeVector::update_config(const Config& cfg)
{
commit(true);
- drain_hold(1024 * 1024); // Wait until 1MiB or less on hold
+ bool compaction_strategy_changed = (cfg.getCompactionStrategy() != _config.getCompactionStrategy());
+ if (compaction_strategy_changed) {
+ drain_hold(1024 * 1024); // Wait until 1MiB or less on hold
+ }
_config.setGrowStrategy(cfg.getGrowStrategy());
_config.setCompactionStrategy(cfg.getCompactionStrategy());
- commit(); // might trigger compaction if compaction strategy changed
- drain_hold(1024 * 1024); // Wait until 1MiB or less on hold
+ if (compaction_strategy_changed) {
+ commit(); // might trigger compaction
+ drain_hold(1024 * 1024); // Wait until 1MiB or less on hold
+ }
}
template bool AttributeVector::append<StringChangeData>(ChangeVectorT< ChangeTemplate<StringChangeData> > &changes, uint32_t , const StringChangeData &, int32_t, bool);