diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-02-15 18:30:26 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-02-15 18:30:26 +0000 |
commit | d9f3a56816f2d462c276759776a5d719ffb4350c (patch) | |
tree | b9f6eef7e01d3fefa280f9ad74587e5d6ef755d9 /searchcore | |
parent | 3b1a0b01b31382a39e8e4889f5761f1d62554fa2 (diff) |
Remove another indirection not necessary and GC some unused code.
Diffstat (limited to 'searchcore')
6 files changed, 33 insertions, 120 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp b/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp index 4eaca3892ab..3fb32a9d1e0 100644 --- a/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp +++ b/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp @@ -38,8 +38,7 @@ public: size_t _offset; public: - typedef std::unique_ptr<Snapshot> UP; - + Snapshot() : _handlers(), _offset(0) { } Snapshot(const StdMap &map) : _handlers(), _offset(0) { _handlers.reserve(map.size()); for (auto itr : map) { @@ -47,6 +46,11 @@ public: } } Snapshot(std::vector<HandlerSP> &&handlers) : _handlers(std::move(handlers)), _offset(0) {} + Snapshot(Snapshot &&) noexcept = default; + Snapshot & operator = (Snapshot &&) noexcept = default; + Snapshot(const Snapshot &) = delete; + Snapshot & operator = (const Snapshot &) = delete; + bool valid() const override { return (_offset < _handlers.size()); } T *get() const override { return _handlers[_offset].get(); } HandlerSP getSP() const { return _handlers[_offset]; } @@ -62,11 +66,7 @@ public: /** * Constructs a new instance of this class. */ - HandlerMap() - : _handlers() - { - // empty - } + HandlerMap() = default; /** * Registers a new handler for the given document type. If another handler @@ -160,11 +160,7 @@ public: /** * Clear all handlers. */ - void - clear() - { - _handlers.clear(); - } + void clear() { _handlers.clear(); } /** * Create a snapshot of the handlers currently contained in this @@ -173,68 +169,15 @@ public: * * @return handler sequence **/ - std::unique_ptr<Snapshot> - snapshot() const - { - return std::make_unique<Snapshot>(_handlers); - } + Snapshot snapshot() const { return Snapshot(_handlers); } // we want to use snapshots rather than direct iteration to reduce locking; // the below functions should be deprecated when possible. - /** - * Returns a bidirectional iterator that points at the first element of the - * sequence (or just beyond the end of an empty sequence). - * - * @return The beginning of this map. - */ - iterator - begin() - { - return _handlers.begin(); - } - - /** - * Returns a const bidirectional iterator that points at the first element - * of the sequence (or just beyond the end of an empty sequence). - * - * @return The beginning of this map. - */ - const_iterator - begin() const - { - return _handlers.begin(); - } - - /** - * Returns a bidirectional iterator that points just beyond the end of the - * sequence. - * - * @return The end of this map. - */ - iterator - end() - { - return _handlers.end(); - } - - /** - * Returns a const bidirectional iterator that points just beyond the end of - * the sequence. - * - * @return The end of this map. - */ - const_iterator - end() const - { - return _handlers.end(); - } - - /** - * Returns the number of handlers in this map. - * - * @return the number of handlers. - */ + iterator begin() { return _handlers.begin(); } + const_iterator begin() const { return _handlers.begin(); } + iterator end() { return _handlers.end(); } + const_iterator end() const { return _handlers.end(); } size_t size() const { return _handlers.size(); } }; diff --git a/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp b/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp index 480359f8382..b170f60d71f 100644 --- a/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp +++ b/searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp @@ -128,13 +128,13 @@ MatchEngine::performSearch(search::engine::SearchRequest::Source req, if (searchHandler) { ret = searchHandler->match(searchHandler, *searchRequest, *threadBundle); } else { - HandlerMap<ISearchHandler>::Snapshot::UP snapshot; + HandlerMap<ISearchHandler>::Snapshot snapshot; { std::lock_guard<std::mutex> guard(_lock); snapshot = _handlers.snapshot(); } - if (snapshot->valid()) { - ISearchHandler::SP handler = snapshot->getSP(); + if (snapshot.valid()) { + ISearchHandler::SP handler = snapshot.getSP(); ret = handler->match(handler, *searchRequest, *threadBundle); // use the first handler } } diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp index 10d42e3a905..5b62a290353 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp @@ -52,20 +52,7 @@ PersistenceHandlerMap::getHandlerSnapshot() const } } size_t handlersSize = handlers.size(); - return HandlerSnapshot - (std::make_unique<DocTypeToHandlerMap::Snapshot>(std::move(handlers)), - handlersSize); -} - -namespace { - -struct EmptySequence : public vespalib::Sequence<IPersistenceHandler *> { - virtual bool valid() const override { return false; } - virtual IPersistenceHandler *get() const override { return nullptr; } - virtual void next() override { } - static EmptySequence::UP make() { return std::make_unique<EmptySequence>(); } -}; - + return HandlerSnapshot(DocTypeToHandlerMap::Snapshot(std::move(handlers)), handlersSize); } HandlerSnapshot @@ -75,24 +62,7 @@ PersistenceHandlerMap::getHandlerSnapshot(document::BucketSpace bucketSpace) con if (itr != _map.end()) { return HandlerSnapshot(itr->second.snapshot(), itr->second.size()); } - return HandlerSnapshot(EmptySequence::make(), 0); -} - -namespace { - -class SequenceOfOne : public vespalib::Sequence<IPersistenceHandler *> { -private: - bool _done; - IPersistenceHandler *_value; -public: - SequenceOfOne(IPersistenceHandler *value) : _done(false), _value(value) {} - - virtual bool valid() const override { return !_done; } - virtual IPersistenceHandler *get() const override { return _value; } - virtual void next() override { _done = true; } - static SequenceOfOne::UP make(IPersistenceHandler *value) { return std::make_unique<SequenceOfOne>(value); } -}; - + return HandlerSnapshot(); } } diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h index 72be050b686..64241e1ad2b 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h @@ -20,15 +20,17 @@ class IPersistenceHandler; */ class PersistenceHandlerMap { public: - using PersistenceHandlerSequence = vespalib::Sequence<IPersistenceHandler *>; + using DocTypeToHandlerMap = HandlerMap<IPersistenceHandler>; + using PersistenceHandlerSequence = DocTypeToHandlerMap::Snapshot; using PersistenceHandlerSP = std::shared_ptr<IPersistenceHandler>; class HandlerSnapshot { private: - PersistenceHandlerSequence::UP _handlers; - size_t _size; + PersistenceHandlerSequence _handlers; + size_t _size; public: - HandlerSnapshot(PersistenceHandlerSequence::UP handlers_, size_t size_) + HandlerSnapshot() : _handlers(), _size(0) {} + HandlerSnapshot(DocTypeToHandlerMap::Snapshot handlers_, size_t size_) : _handlers(std::move(handlers_)), _size(size_) {} @@ -36,12 +38,12 @@ public: HandlerSnapshot & operator = (const HandlerSnapshot &) = delete; size_t size() const { return _size; } - PersistenceHandlerSequence &handlers() { return *_handlers; } - static PersistenceHandlerSequence::UP release(HandlerSnapshot &&rhs) { return std::move(rhs._handlers); } + PersistenceHandlerSequence &handlers() { return _handlers; } + static PersistenceHandlerSequence release(HandlerSnapshot &&rhs) { return std::move(rhs._handlers); } }; private: - using DocTypeToHandlerMap = HandlerMap<IPersistenceHandler>; + struct BucketSpaceHash { std::size_t operator() (const document::BucketSpace &bucketSpace) const { return bucketSpace.getId(); } @@ -52,9 +54,7 @@ private: public: PersistenceHandlerMap(); - PersistenceHandlerSP putHandler(document::BucketSpace bucketSpace, - const DocTypeName &docType, - const PersistenceHandlerSP &handler); + PersistenceHandlerSP putHandler(document::BucketSpace bucketSpace, const DocTypeName &docType, const PersistenceHandlerSP &handler); PersistenceHandlerSP removeHandler(document::BucketSpace bucketSpace, const DocTypeName &docType); IPersistenceHandler * getHandler(document::BucketSpace bucketSpace, const DocTypeName &docType) const; HandlerSnapshot getHandlerSnapshot() const; diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h index b0d4f1f4c53..65b49045d1f 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h @@ -18,7 +18,7 @@ class IPersistenceEngineOwner; class PersistenceEngine : public storage::spi::AbstractPersistenceProvider { private: - using PersistenceHandlerSequence = vespalib::Sequence<IPersistenceHandler *>; + using PersistenceHandlerSequence = PersistenceHandlerMap::PersistenceHandlerSequence; using HandlerSnapshot = PersistenceHandlerMap::HandlerSnapshot; using DocumentUpdate = document::DocumentUpdate; using Bucket = storage::spi::Bucket; @@ -43,7 +43,7 @@ private: using UpdateResult = storage::spi::UpdateResult; struct IteratorEntry { - PersistenceHandlerSequence::UP handler_sequence; + PersistenceHandlerSequence handler_sequence; DocumentIterator it; bool in_use; std::vector<BucketGuard::UP> bucket_guards; diff --git a/searchcore/src/vespa/searchcore/proton/summaryengine/summaryengine.cpp b/searchcore/src/vespa/searchcore/proton/summaryengine/summaryengine.cpp index e154c6761e2..692b05899f4 100644 --- a/searchcore/src/vespa/searchcore/proton/summaryengine/summaryengine.cpp +++ b/searchcore/src/vespa/searchcore/proton/summaryengine/summaryengine.cpp @@ -128,13 +128,13 @@ SummaryEngine::getDocsums(DocsumRequest::UP req) if (searchHandler) { reply = searchHandler->getDocsums(*req); } else { - vespalib::Sequence<ISearchHandler*>::UP snapshot; + HandlerMap<ISearchHandler>::Snapshot snapshot; { std::lock_guard<std::mutex> guard(_lock); snapshot = _handlers.snapshot(); } - if (snapshot->valid()) { - reply = snapshot->get()->getDocsums(*req); // use the first handler + if (snapshot.valid()) { + reply = snapshot.get()->getDocsums(*req); // use the first handler } } updateDocsumMetrics(vespalib::to_s(req->getTimeUsed()), getNumDocs(*reply)); |