diff options
author | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-05-18 09:23:45 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-05-18 09:23:45 +0000 |
commit | a7049f5cc3852c72373325eb58c6ed12bf587c04 (patch) | |
tree | f8148b3d97e483f9d82bfeff3f0851274b5490c0 /searchcore | |
parent | 9bfdd5618fe19872f0ae584711e05ded012a23fb (diff) |
Avoid flush engine busy loop: set flushed time even if not able to flush.
Diffstat (limited to 'searchcore')
3 files changed, 15 insertions, 7 deletions
diff --git a/searchcore/src/tests/proton/attribute/attributeflush_test.cpp b/searchcore/src/tests/proton/attribute/attributeflush_test.cpp index 714e9076d16..705e489f61c 100644 --- a/searchcore/src/tests/proton/attribute/attributeflush_test.cpp +++ b/searchcore/src/tests/proton/attribute/attributeflush_test.cpp @@ -530,7 +530,7 @@ Test::requireThatShrinkWorks() AttributeVector::SP av = f.addAttribute("a10"); av->addDocs(1000 - av->getNumDocs()); - av->commit(10, 10); + av->commit(50, 50); IFlushTarget::SP ft = am.getShrinker("a10"); EXPECT_EQUAL(ft->getApproxMemoryGain().getBefore(), ft->getApproxMemoryGain().getAfter()); @@ -544,21 +544,22 @@ Test::requireThatShrinkWorks() EXPECT_FALSE(av->canShrinkLidSpace()); EXPECT_EQUAL(1000u, av->getNumDocs()); EXPECT_EQUAL(100u, av->getCommittedDocIdLimit()); - f._aw.heartBeat(11); + f._aw.heartBeat(51); EXPECT_TRUE(av->wantShrinkLidSpace()); EXPECT_FALSE(av->canShrinkLidSpace()); EXPECT_EQUAL(ft->getApproxMemoryGain().getBefore(), ft->getApproxMemoryGain().getAfter()); g.reset(); - f._aw.heartBeat(11); + f._aw.heartBeat(52); EXPECT_TRUE(av->wantShrinkLidSpace()); EXPECT_TRUE(av->canShrinkLidSpace()); EXPECT_TRUE(ft->getApproxMemoryGain().getBefore() > ft->getApproxMemoryGain().getAfter()); EXPECT_EQUAL(1000u, av->getNumDocs()); EXPECT_EQUAL(100u, av->getCommittedDocIdLimit()); + EXPECT_EQUAL(createSerialNum - 1, ft->getFlushedSerialNum()); vespalib::ThreadStackExecutor exec(1, 128 * 1024); - vespalib::Executor::Task::UP task = ft->initFlush(11); + vespalib::Executor::Task::UP task = ft->initFlush(53); exec.execute(std::move(task)); exec.sync(); exec.shutdown(); diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp index 8d2665c0c3f..c89dbb9efd8 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_populator.cpp @@ -70,8 +70,10 @@ AttributePopulator::done() for (const auto &flushTarget : flushTargets) { assert(flushTarget->getFlushedSerialNum() < _configSerialNum); auto task = flushTarget->initFlush(_configSerialNum); - assert(task); - task->run(); + // shrink target only return task if able to shrink. + if (task) { + task->run(); + } assert(flushTarget->getFlushedSerialNum() == _configSerialNum); } } diff --git a/searchcore/src/vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.cpp b/searchcore/src/vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.cpp index a2c154e8192..2137d6f5c79 100644 --- a/searchcore/src/vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.cpp +++ b/searchcore/src/vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.cpp @@ -92,7 +92,12 @@ ShrinkLidSpaceFlushTarget::needUrgentFlush() const IFlushTarget::Task::UP ShrinkLidSpaceFlushTarget::initFlush(SerialNum currentSerial) { - if (!_target->canShrinkLidSpace() && currentSerial <= _flushedSerialNum) { + if (currentSerial < _flushedSerialNum) { + _lastFlushTime = fastos::ClockSystem::now(); + return IFlushTarget::Task::UP(); + } else if (!_target->canShrinkLidSpace()) { + _flushedSerialNum = currentSerial; + _lastFlushTime = fastos::ClockSystem::now(); return IFlushTarget::Task::UP(); } else { return std::make_unique<Flusher>(*this, currentSerial); |