diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-06-12 11:48:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-12 11:48:38 +0200 |
commit | 23d9213d4f58410cd78410dc10950b3bab86c563 (patch) | |
tree | 68f4e14449fe5581fde1a950380286c3d973e3f5 /searchcore | |
parent | 49ea989662f402f6c96737636b497724a4bb457f (diff) | |
parent | 06d3ba8c9e0edea16dafce70c13280330c4ab59f (diff) |
Merge branch 'master' into balder/reduce-code-visibility-rebased
Diffstat (limited to 'searchcore')
16 files changed, 82 insertions, 108 deletions
diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp index 0a73e0b2b6e..e774728b41e 100644 --- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp @@ -28,6 +28,7 @@ #include <vespa/searchlib/transactionlog/translogserver.h> #include <vespa/vespalib/testkit/testapp.h> #include <vespa/vespalib/util/closuretask.h> +#include <vespa/vespalib/util/lambdatask.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/vespalib/io/fileutil.h> diff --git a/searchcore/src/tests/proton/index/fusionrunner_test.cpp b/searchcore/src/tests/proton/index/fusionrunner_test.cpp index e6efa246484..429452df2ec 100644 --- a/searchcore/src/tests/proton/index/fusionrunner_test.cpp +++ b/searchcore/src/tests/proton/index/fusionrunner_test.cpp @@ -11,6 +11,7 @@ #include <vespa/searchlib/index/docbuilder.h> #include <vespa/searchlib/index/dummyfileheadercontext.h> #include <vespa/searchlib/query/tree/simplequery.h> +#include <vespa/searchlib/common/isequencedtaskexecutor.h> #include <vespa/vespalib/testkit/testapp.h> #include <vespa/fastos/file.h> #include <set> diff --git a/searchcore/src/versiontag.mak b/searchcore/src/versiontag.mak deleted file mode 100644 index 3f8d09a48e0..00000000000 --- a/searchcore/src/versiontag.mak +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -VTAG_DATE=$(shell date +%Y.%m.%d-%H.%M.%S) -VTAG_SYSTEM=$(shell uname -s) -VTAG_SYSTEM_REV=$(shell uname -r) -VTAG_BUILDER=$(shell (whoami) 2>/dev/null||logname)@$(shell uname -n) -ifneq (X$(SPECIFIED_VTAG),XDISABLE) - ifeq (X$(UNAME), XWin32) - VTAG=-DV_TAG='\"$(SPECIFIED_VTAG)\"' - else - VTAG=-DV_TAG='"$(SPECIFIED_VTAG)"' - endif -else - ifeq (X$(UNAME), XWin32) - VTAG= - else - VTAG_TAG=$(shell cat $(TOP)/CVS/Tag 2>/dev/null | sed "s/^.//" 2>/dev/null) - ifeq (X$(VTAG_TAG),X) - VTAG_TAG=CURRENT - endif - ifeq ($(findstring _RELEASE, $(VTAG_TAG)),_RELEASE) - VTAG_SYSTEM=$(shell uname -s) - VTAG=-DV_TAG='"$(VTAG_TAG)-$(VTAG_SYSTEM)"' - else - VTAG_DATE=$(shell date +%Y.%m.%d-%H:%M:%S) - VTAG_SYSTEM=$(shell (whoami) 2>/dev/null||logname)@$(shell uname -n)-$(shell uname -s)-$(shell uname -r) - VTAG=-DV_TAG='"$(VTAG_TAG)-$(VTAG_SYSTEM)-$(VTAG_DATE)"' - endif - endif -endif -VTAG+= -DV_TAG_DATE='"$(VTAG_DATE)"' -VTAG+= -DV_TAG_SYSTEM='"$(VTAG_SYSTEM)"' -VTAG+= -DV_TAG_SYSTEM_REV='"$(VTAG_SYSTEM_REV)"' -VTAG+= -DV_TAG_BUILDER='"$(VTAG_BUILDER)"' - diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp index 2d78f837ecf..239f91b449f 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp @@ -21,6 +21,7 @@ LOG_SETUP(".proton.server.attributeadapter"); using namespace document; using namespace search; using search::attribute::ImportedAttributeVector; +using ExecutorId = search::ISequencedTaskExecutor::ExecutorId; namespace proton { @@ -50,7 +51,7 @@ AttributeWriter::WriteField::buildFieldPath(const DocumentType &docType) _fieldPath = std::move(fp); } -AttributeWriter::WriteContext::WriteContext(uint32_t executorId) +AttributeWriter::WriteContext::WriteContext(ExecutorId executorId) : _executorId(executorId), _fields(), _hasStructFieldAttribute(false) @@ -214,15 +215,15 @@ struct BatchUpdateTask : public vespalib::Executor::Task { class FieldContext { - vespalib::string _name; - uint32_t _executorId; - AttributeVector *_attr; + vespalib::string _name; + ExecutorId _executorId; + AttributeVector *_attr; public: FieldContext(ISequencedTaskExecutor &writer, AttributeVector *attr); ~FieldContext(); bool operator<(const FieldContext &rhs) const; - uint32_t getExecutorId() const { return _executorId; } + ExecutorId getExecutorId() const { return _executorId; } AttributeVector *getAttribute() const { return _attr; } }; @@ -554,7 +555,7 @@ AttributeWriter::update(SerialNum serialNum, const DocumentUpdate &upd, Document // document and attribute. if (attrp->getStatus().getLastSyncToken() >= serialNum) continue; - args[_attributeFieldWriter.getExecutorId(attrp->getName())]->_updates.emplace_back(attrp, &fupd); + args[_attributeFieldWriter.getExecutorId(attrp->getName()).getId()]->_updates.emplace_back(attrp, &fupd); LOG(debug, "About to apply update for docId %u in attribute vector '%s'.", lid, attrp->getName().c_str()); } // NOTE: The lifetime of the field update will be ensured by keeping the document update alive @@ -562,7 +563,7 @@ AttributeWriter::update(SerialNum serialNum, const DocumentUpdate &upd, Document for (uint32_t id(0); id < args.size(); id++) { if ( ! args[id]->_updates.empty()) { args[id]->_onWriteDone = onWriteDone; - _attributeFieldWriter.executeTask(id, std::move(args[id])); + _attributeFieldWriter.executeTask(ExecutorId(id), std::move(args[id])); } } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h index bed2a7cb23d..f89089ed335 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.h @@ -5,6 +5,7 @@ #include "i_attribute_writer.h" #include <vespa/searchcore/proton/common/commit_time_tracker.h> #include <vespa/document/base/fieldpath.h> +#include <vespa/searchlib/common/isequencedtaskexecutor.h> namespace document { class DocumentType; } @@ -25,6 +26,7 @@ private: const IAttributeManager::SP _mgr; search::ISequencedTaskExecutor &_attributeFieldWriter; const std::vector<search::AttributeVector *> &_writableAttributes; + using ExecutorId = search::ISequencedTaskExecutor::ExecutorId; public: class WriteField { @@ -41,17 +43,17 @@ public: }; class WriteContext { - uint32_t _executorId; + ExecutorId _executorId; std::vector<WriteField> _fields; bool _hasStructFieldAttribute; public: - WriteContext(uint32_t executorId); + WriteContext(ExecutorId executorId); WriteContext(WriteContext &&rhs); ~WriteContext(); WriteContext &operator=(WriteContext &&rhs); void buildFieldPaths(const DocumentType &docType); void add(AttributeVector &attr); - uint32_t getExecutorId() const { return _executorId; } + ExecutorId getExecutorId() const { return _executorId; } const std::vector<WriteField> &getFields() const { return _fields; } bool hasStructFieldAttribute() const { return _hasStructFieldAttribute; } }; diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp index b4f087c65c0..ef818f7b407 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.cpp @@ -87,8 +87,7 @@ std::shared_ptr<ShrinkLidSpaceFlushTarget> allocShrinker(const AttributeVector:: } -AttributeManager::AttributeWrap::AttributeWrap(const AttributeVectorSP & a, - bool isExtra_) +AttributeManager::AttributeWrap::AttributeWrap(const AttributeVectorSP & a, bool isExtra_) : _attr(a), _isExtra(isExtra_) { @@ -100,9 +99,7 @@ AttributeManager::AttributeWrap::AttributeWrap() { } -AttributeManager::AttributeWrap::~AttributeWrap() -{ -} +AttributeManager::AttributeWrap::~AttributeWrap() = default; AttributeManager::AttributeWrap AttributeManager::AttributeWrap::extraAttribute(const AttributeVectorSP &a) @@ -128,9 +125,7 @@ AttributeManager::FlushableWrap::FlushableWrap(FlushableAttributeSP flusher, Shr { } -AttributeManager::FlushableWrap::~FlushableWrap() -{ -} +AttributeManager::FlushableWrap::~FlushableWrap() = default; AttributeVector::SP AttributeManager::internalAddAttribute(const AttributeSpec &spec, @@ -168,7 +163,7 @@ AttributeManager::findAttribute(const vespalib::string &name) const { AttributeMap::const_iterator itr = _attributes.find(name); return (itr != _attributes.end()) - ? static_cast<const AttributeVector::SP &>(itr->second.getAttribute()) + ? itr->second.getAttribute() : AttributeVector::SP(); } diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h index b8f245d9c68..f904c1b4b53 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/attributemanager.h @@ -63,7 +63,7 @@ private: static AttributeWrap extraAttribute(const AttributeVectorSP &a); static AttributeWrap normalAttribute(const AttributeVectorSP &a); bool isExtra() const { return _isExtra; } - const AttributeVectorSP getAttribute() const { return _attr; } + const AttributeVectorSP & getAttribute() const { return _attr; } }; class FlushableWrap diff --git a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h index 0e9298e3e51..d4c349bd1d7 100644 --- a/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h +++ b/searchcore/src/vespa/searchcore/proton/reference/gid_to_lid_change_listener.h @@ -7,7 +7,6 @@ #include <vespa/searchlib/common/sequencedtaskexecutor.h> #include <vespa/searchcore/proton/common/monitored_refcount.h> - namespace proton { /* @@ -16,12 +15,12 @@ namespace proton { */ class GidToLidChangeListener : public IGidToLidChangeListener { - search::ISequencedTaskExecutor &_attributeFieldWriter; - uint32_t _executorId; + search::ISequencedTaskExecutor &_attributeFieldWriter; + search::ISequencedTaskExecutor::ExecutorId _executorId; std::shared_ptr<search::attribute::ReferenceAttribute> _attr; - MonitoredRefCount &_refCount; - vespalib::string _name; - vespalib::string _docTypeName; + MonitoredRefCount &_refCount; + vespalib::string _name; + vespalib::string _docTypeName; public: GidToLidChangeListener(search::ISequencedTaskExecutor &attributeFieldWriter, diff --git a/searchcore/src/vespa/searchcore/proton/server/executor_thread_service.h b/searchcore/src/vespa/searchcore/proton/server/executor_thread_service.h index c938288c714..4b1e8408c8e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/executor_thread_service.h +++ b/searchcore/src/vespa/searchcore/proton/server/executor_thread_service.h @@ -24,15 +24,15 @@ public: /** * Implements IThreadService */ - virtual vespalib::Executor::Task::UP execute(vespalib::Executor::Task::UP task) override { + vespalib::Executor::Task::UP execute(vespalib::Executor::Task::UP task) override { return _executor.execute(std::move(task)); } - virtual void run(vespalib::Runnable &runnable) override; - virtual vespalib::Syncable &sync() override { + void run(vespalib::Runnable &runnable) override; + vespalib::Syncable &sync() override { _executor.sync(); return *this; } - virtual bool isCurrentThread() const override; + bool isCurrentThread() const override; size_t getNumThreads() const override { return _executor.getNumThreads(); } }; diff --git a/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.cpp b/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.cpp index 1c4825753a8..3d9525f0471 100644 --- a/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.cpp @@ -1,16 +1,15 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "executorthreadingservice.h" -#include <vespa/vespalib/util/executor.h> #include <vespa/searchcore/proton/metrics/executor_threading_service_stats.h> +#include <vespa/searchlib/common/sequencedtaskexecutor.h> using vespalib::ThreadStackExecutorBase; +using search::SequencedTaskExecutor; namespace proton { -ExecutorThreadingService::ExecutorThreadingService(uint32_t threads, - uint32_t stackSize, - uint32_t taskLimit) +ExecutorThreadingService::ExecutorThreadingService(uint32_t threads, uint32_t stackSize, uint32_t taskLimit) : _masterExecutor(1, stackSize), _indexExecutor(1, stackSize, taskLimit), @@ -18,14 +17,13 @@ ExecutorThreadingService::ExecutorThreadingService(uint32_t threads, _masterService(_masterExecutor), _indexService(_indexExecutor), _summaryService(_summaryExecutor), - _indexFieldInverter(threads, taskLimit), - _indexFieldWriter(threads, taskLimit), - _attributeFieldWriter(threads, taskLimit) + _indexFieldInverter(std::make_unique<SequencedTaskExecutor>(threads, taskLimit)), + _indexFieldWriter(std::make_unique<SequencedTaskExecutor>(threads, taskLimit)), + _attributeFieldWriter(std::make_unique<SequencedTaskExecutor>(threads, taskLimit)) { } -ExecutorThreadingService::~ExecutorThreadingService() { -} +ExecutorThreadingService::~ExecutorThreadingService() = default; vespalib::Syncable & ExecutorThreadingService::sync() @@ -34,11 +32,11 @@ ExecutorThreadingService::sync() if (!isMasterThread) { _masterExecutor.sync(); } - _attributeFieldWriter.sync(); + _attributeFieldWriter->sync(); _indexExecutor.sync(); _summaryExecutor.sync(); - _indexFieldInverter.sync(); - _indexFieldWriter.sync(); + _indexFieldInverter->sync(); + _indexFieldWriter->sync(); if (!isMasterThread) { _masterExecutor.sync(); } @@ -50,13 +48,13 @@ ExecutorThreadingService::shutdown() { _masterExecutor.shutdown(); _masterExecutor.sync(); - _attributeFieldWriter.sync(); + _attributeFieldWriter->sync(); _summaryExecutor.shutdown(); _summaryExecutor.sync(); _indexExecutor.shutdown(); _indexExecutor.sync(); - _indexFieldInverter.sync(); - _indexFieldWriter.sync(); + _indexFieldInverter->sync(); + _indexFieldWriter->sync(); } void @@ -64,9 +62,9 @@ ExecutorThreadingService::setTaskLimit(uint32_t taskLimit, uint32_t summaryTaskL { _indexExecutor.setTaskLimit(taskLimit); _summaryExecutor.setTaskLimit(summaryTaskLimit); - _indexFieldInverter.setTaskLimit(taskLimit); - _indexFieldWriter.setTaskLimit(taskLimit); - _attributeFieldWriter.setTaskLimit(taskLimit); + _indexFieldInverter->setTaskLimit(taskLimit); + _indexFieldWriter->setTaskLimit(taskLimit); + _attributeFieldWriter->setTaskLimit(taskLimit); } ExecutorThreadingServiceStats @@ -75,9 +73,24 @@ ExecutorThreadingService::getStats() return ExecutorThreadingServiceStats(_masterExecutor.getStats(), _indexExecutor.getStats(), _summaryExecutor.getStats(), - _indexFieldInverter.getStats(), - _indexFieldWriter.getStats(), - _attributeFieldWriter.getStats()); + _indexFieldInverter->getStats(), + _indexFieldWriter->getStats(), + _attributeFieldWriter->getStats()); +} + +search::ISequencedTaskExecutor & +ExecutorThreadingService::indexFieldInverter() { + return *_indexFieldInverter; +} + +search::ISequencedTaskExecutor & +ExecutorThreadingService::indexFieldWriter() { + return *_indexFieldWriter; +} + +search::ISequencedTaskExecutor & +ExecutorThreadingService::attributeFieldWriter() { + return *_attributeFieldWriter; } } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.h b/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.h index 25aa65d43a7..240eefab2a7 100644 --- a/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.h +++ b/searchcore/src/vespa/searchcore/proton/server/executorthreadingservice.h @@ -5,8 +5,8 @@ #include <vespa/searchcorespi/index/ithreadingservice.h> #include <vespa/vespalib/util/blockingthreadstackexecutor.h> #include <vespa/vespalib/util/threadstackexecutor.h> -#include <vespa/searchlib/common/sequencedtaskexecutor.h> +namespace search { class SequencedTaskExecutor; } namespace proton { class ExecutorThreadingServiceStats; @@ -24,9 +24,9 @@ private: ExecutorThreadService _masterService; ExecutorThreadService _indexService; ExecutorThreadService _summaryService; - search::SequencedTaskExecutor _indexFieldInverter; - search::SequencedTaskExecutor _indexFieldWriter; - search::SequencedTaskExecutor _attributeFieldWriter; + std::unique_ptr<search::SequencedTaskExecutor> _indexFieldInverter; + std::unique_ptr<search::SequencedTaskExecutor> _indexFieldWriter; + std::unique_ptr<search::SequencedTaskExecutor> _attributeFieldWriter; public: /** @@ -38,12 +38,12 @@ public: ExecutorThreadingService(uint32_t threads = 1, uint32_t stackSize = 128 * 1024, uint32_t taskLimit = 1000); - ~ExecutorThreadingService(); + ~ExecutorThreadingService() override; /** * Implements vespalib::Syncable */ - virtual vespalib::Syncable &sync() override; + vespalib::Syncable &sync() override; void shutdown(); @@ -63,29 +63,20 @@ public: /** * Implements IThreadingService */ - virtual searchcorespi::index::IThreadService &master() override { + searchcorespi::index::IThreadService &master() override { return _masterService; } - virtual searchcorespi::index::IThreadService &index() override { + searchcorespi::index::IThreadService &index() override { return _indexService; } - virtual searchcorespi::index::IThreadService &summary() override { + searchcorespi::index::IThreadService &summary() override { return _summaryService; } - virtual search::ISequencedTaskExecutor &indexFieldInverter() override { - return _indexFieldInverter; - } - - virtual search::ISequencedTaskExecutor &indexFieldWriter() override { - return _indexFieldWriter; - } - - virtual search::ISequencedTaskExecutor &attributeFieldWriter() override { - return _attributeFieldWriter; - } - + search::ISequencedTaskExecutor &indexFieldInverter() override; + search::ISequencedTaskExecutor &indexFieldWriter() override; + search::ISequencedTaskExecutor &attributeFieldWriter() override; ExecutorThreadingServiceStats getStats(); }; diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp index 858e1d51d3f..6364e772f94 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp @@ -5,6 +5,7 @@ #include "operationdonecontext.h" #include "removedonecontext.h" #include "putdonecontext.h" +#include <vespa/searchlib/common/isequencedtaskexecutor.h> using document::Document; using document::DocumentUpdate; diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp index e8dc4eecbf3..66e721f9222 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp @@ -18,6 +18,7 @@ #include <vespa/searchcorespi/index/ithreadingservice.h> #include <vespa/searchlib/common/gatecallback.h> #include <vespa/vespalib/util/exceptions.h> +#include <vespa/vespalib/util/lambdatask.h> #include <unistd.h> #include <vespa/log/log.h> diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp index 4cda07eee8b..28b1c407429 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp @@ -6,6 +6,7 @@ #include "removedonecontext.h" #include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h> +#include <vespa/searchlib/common/isequencedtaskexecutor.h> #include <vespa/vespalib/text/stringtokenizer.h> #include <vespa/vespalib/util/closuretask.h> #include <vespa/vespalib/util/exceptions.h> diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index ab47a72e899..29615b0daf9 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -12,14 +12,15 @@ #include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h> #include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h> +#include <vespa/searchcore/proton/attribute/ifieldupdatecallback.h> + +#include <vespa/searchlib/common/isequencedtaskexecutor.h> #include <vespa/document/datatype/documenttype.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/fieldvalue/document.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/log/log.h> -#include <vespa/searchcore/proton/attribute/ifieldupdatecallback.h> - LOG_SETUP(".proton.server.storeonlyfeedview"); using document::BucketId; diff --git a/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp index dd12a5cfd3d..71197a5c530 100644 --- a/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/visibilityhandler.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "visibilityhandler.h" +#include <vespa/searchlib/common/isequencedtaskexecutor.h> #include <vespa/vespalib/util/closuretask.h> using vespalib::makeTask; |