summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-02-15 18:30:26 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-02-15 18:30:26 +0000
commitd9f3a56816f2d462c276759776a5d719ffb4350c (patch)
treeb9f6eef7e01d3fefa280f9ad74587e5d6ef755d9 /searchcore
parent3b1a0b01b31382a39e8e4889f5761f1d62554fa2 (diff)
Remove another indirection not necessary and GC some unused code.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/handlermap.hpp83
-rw-r--r--searchcore/src/vespa/searchcore/proton/matchengine/matchengine.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp34
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h20
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/summaryengine/summaryengine.cpp6
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));