summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-02-15 13:43:11 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-02-15 13:43:11 +0000
commit82921e349d0d1189754c483a663958eb5a9c6b70 (patch)
treeaa8010051ac891a5d4e6423b1823cbe801fcb803 /searchcore
parent92723e64844664b21f4bfe0b7f88a2bc230ca530 (diff)
The snapshot has 2 lightweight members only and hence does not need another indirection.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/handlermap.hpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp10
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h5
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp100
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h6
6 files changed, 64 insertions, 65 deletions
diff --git a/searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp
index ef12b694187..941628891fe 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp
@@ -59,10 +59,10 @@ assertNullHandler(const IPersistenceHandler::SP &handler)
}
void
-assertSnapshot(const std::vector<IPersistenceHandler::SP> &exp, const HandlerSnapshot::UP &snapshot)
+assertSnapshot(const std::vector<IPersistenceHandler::SP> &exp, HandlerSnapshot snapshot)
{
- EXPECT_EQUAL(exp.size(), snapshot->size());
- auto &sequence = snapshot->handlers();
+ EXPECT_EQUAL(exp.size(), snapshot.size());
+ auto &sequence = snapshot.handlers();
for (size_t i = 0; i < exp.size() && sequence.valid(); ++i, sequence.next()) {
EXPECT_EQUAL(exp[i].get(), sequence.get());
}
diff --git a/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp b/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp
index bddbfed371f..c5363b7a9e1 100644
--- a/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp
+++ b/searchcore/src/vespa/searchcore/proton/common/handlermap.hpp
@@ -164,7 +164,7 @@ public:
std::unique_ptr<Snapshot>
snapshot() const
{
- return std::unique_ptr<Snapshot>(new Snapshot(_handlers));
+ return std::make_unique<Snapshot>(_handlers);
}
// we want to use snapshots rather than direct iteration to reduce locking;
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 06969167ab3..7caccd33da9 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.cpp
@@ -42,7 +42,7 @@ PersistenceHandlerMap::removeHandler(document::BucketSpace bucketSpace,
return IPersistenceHandler::SP();
}
-HandlerSnapshot::UP
+HandlerSnapshot
PersistenceHandlerMap::getHandlerSnapshot() const
{
std::vector<IPersistenceHandler::SP> handlers;
@@ -52,7 +52,7 @@ PersistenceHandlerMap::getHandlerSnapshot() const
}
}
size_t handlersSize = handlers.size();
- return std::make_unique<HandlerSnapshot>
+ return HandlerSnapshot
(std::make_unique<DocTypeToHandlerMap::Snapshot>(std::move(handlers)),
handlersSize);
}
@@ -68,14 +68,14 @@ struct EmptySequence : public vespalib::Sequence<IPersistenceHandler *> {
}
-HandlerSnapshot::UP
+HandlerSnapshot
PersistenceHandlerMap::getHandlerSnapshot(document::BucketSpace bucketSpace) const
{
auto itr = _map.find(bucketSpace);
if (itr != _map.end()) {
- return std::make_unique<HandlerSnapshot>(itr->second.snapshot(), itr->second.size());
+ return HandlerSnapshot(itr->second.snapshot(), itr->second.size());
}
- return std::make_unique<HandlerSnapshot>(EmptySequence::make(), 0);
+ return HandlerSnapshot(EmptySequence::make(), 0);
}
namespace {
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 003c378d6a7..0c4440488e0 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistence_handler_map.h
@@ -28,7 +28,6 @@ public:
PersistenceHandlerSequence::UP _handlers;
size_t _size;
public:
- using UP = std::unique_ptr<HandlerSnapshot>;
HandlerSnapshot(PersistenceHandlerSequence::UP handlers_, size_t size_)
: _handlers(std::move(handlers_)),
_size(size_)
@@ -60,8 +59,8 @@ public:
const DocTypeName &docType);
PersistenceHandlerSP getHandler(document::BucketSpace bucketSpace,
const DocTypeName &docType) const;
- HandlerSnapshot::UP getHandlerSnapshot() const;
- HandlerSnapshot::UP getHandlerSnapshot(document::BucketSpace bucketSpace) const;
+ HandlerSnapshot getHandlerSnapshot() const;
+ HandlerSnapshot getHandlerSnapshot(document::BucketSpace bucketSpace) const;
};
}
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 9d40cbae633..a528519f3ae 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -163,19 +163,19 @@ BucketInfoResultHandler::~BucketInfoResultHandler() = default;
}
-PersistenceEngine::HandlerSnapshot::UP
+PersistenceEngine::HandlerSnapshot
PersistenceEngine::getHandlerSnapshot(const WriteGuard &) const
{
return _handlers.getHandlerSnapshot();
}
-PersistenceEngine::HandlerSnapshot::UP
+PersistenceEngine::HandlerSnapshot
PersistenceEngine::getHandlerSnapshot(const ReadGuard &, document::BucketSpace bucketSpace) const
{
return _handlers.getHandlerSnapshot(bucketSpace);
}
-PersistenceEngine::HandlerSnapshot::UP
+PersistenceEngine::HandlerSnapshot
PersistenceEngine::getHandlerSnapshot(const WriteGuard &, document::BucketSpace bucketSpace) const
{
return _handlers.getHandlerSnapshot(bucketSpace);
@@ -232,9 +232,9 @@ PersistenceEngine::initialize()
{
std::unique_lock<std::shared_timed_mutex> wguard(getWLock());
LOG(debug, "Begin initializing persistence handlers");
- HandlerSnapshot::UP snap = getHandlerSnapshot(wguard);
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(wguard);
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->initialize();
}
LOG(debug, "Done initializing persistence handlers");
@@ -260,10 +260,10 @@ PersistenceEngine::listBuckets(BucketSpace bucketSpace, PartitionId id) const
BucketIdListResult::List emptyList;
return BucketIdListResult(emptyList);
}
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, bucketSpace);
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, bucketSpace);
BucketIdListResultHandler resultHandler;
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleListBuckets(resultHandler);
}
return resultHandler.getResult();
@@ -275,10 +275,10 @@ PersistenceEngine::setClusterState(BucketSpace bucketSpace, const ClusterState &
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
saveClusterState(bucketSpace, calc);
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, bucketSpace);
- GenericResultHandler resultHandler(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, bucketSpace);
+ GenericResultHandler resultHandler(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleSetClusterState(calc, resultHandler);
}
resultHandler.await();
@@ -292,10 +292,10 @@ PersistenceEngine::setActiveState(const Bucket& bucket,
storage::spi::BucketInfo::ActiveState newState)
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, bucket.getBucketSpace());
- GenericResultHandler resultHandler(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, bucket.getBucketSpace());
+ GenericResultHandler resultHandler(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleSetActiveState(bucket, newState, resultHandler);
}
resultHandler.await();
@@ -309,10 +309,10 @@ PersistenceEngine::getBucketInfo(const Bucket& b) const
// Runs in SPI thread.
// No handover to write threads in persistence handlers.
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, b.getBucketSpace());
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, b.getBucketSpace());
BucketInfoResultHandler resultHandler;
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleGetBucketInfo(b, resultHandler);
}
return resultHandler.getResult();
@@ -432,9 +432,9 @@ PersistenceEngine::GetResult
PersistenceEngine::get(const Bucket& b, const document::FieldSet& fields, const DocumentId& did, Context& context) const
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
- HandlerSnapshot::UP snapshot = getHandlerSnapshot(rguard, b.getBucketSpace());
+ HandlerSnapshot snapshot = getHandlerSnapshot(rguard, b.getBucketSpace());
- for (PersistenceHandlerSequence & handlers = snapshot->handlers(); handlers.valid(); handlers.next()) {
+ for (PersistenceHandlerSequence & handlers = snapshot.handlers(); handlers.valid(); handlers.next()) {
BucketGuard::UP bucket_guard = handlers.get()->lockBucket(b);
IPersistenceHandler::RetrieversSP retrievers = handlers.get()->getDocumentRetrievers(context.getReadConsistency());
for (size_t i = 0; i < retrievers->size(); ++i) {
@@ -462,19 +462,19 @@ PersistenceEngine::createIterator(const Bucket &bucket, const document::FieldSet
IncludedVersions versions, Context & context)
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
- HandlerSnapshot::UP snapshot = getHandlerSnapshot(rguard, bucket.getBucketSpace());
+ HandlerSnapshot snapshot = getHandlerSnapshot(rguard, bucket.getBucketSpace());
auto entry = std::make_unique<IteratorEntry>(context.getReadConsistency(), bucket, fields, selection,
versions, _defaultSerializedSize, _ignoreMaxBytes);
- entry->bucket_guards.reserve(snapshot->size());
- for (PersistenceHandlerSequence & handlers = snapshot->handlers(); handlers.valid(); handlers.next()) {
+ entry->bucket_guards.reserve(snapshot.size());
+ for (PersistenceHandlerSequence & handlers = snapshot.handlers(); handlers.valid(); handlers.next()) {
entry->bucket_guards.push_back(handlers.get()->lockBucket(bucket));
IPersistenceHandler::RetrieversSP retrievers = handlers.get()->getDocumentRetrievers(context.getReadConsistency());
for (size_t i = 0; i < retrievers->size(); ++i) {
entry->it.add((*retrievers)[i]);
}
}
- entry->handler_sequence = HandlerSnapshot::release(std::move(*snapshot));
+ entry->handler_sequence = HandlerSnapshot::release(std::move(snapshot));
std::lock_guard<std::mutex> guard(_iterators_lock);
static IteratorId id_counter(0);
@@ -541,10 +541,10 @@ PersistenceEngine::createBucket(const Bucket &b, Context &)
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
LOG(spam, "createBucket(%s)", b.toString().c_str());
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, b.getBucketSpace());
- TransportLatch latch(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, b.getBucketSpace());
+ TransportLatch latch(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleCreateBucket(feedtoken::make(latch), b);
}
latch.await();
@@ -557,10 +557,10 @@ PersistenceEngine::deleteBucket(const Bucket& b, Context&)
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
LOG(spam, "deleteBucket(%s)", b.toString().c_str());
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, b.getBucketSpace());
- TransportLatch latch(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, b.getBucketSpace());
+ TransportLatch latch(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleDeleteBucket(feedtoken::make(latch), b);
}
latch.await();
@@ -578,10 +578,10 @@ PersistenceEngine::getModifiedBuckets(BucketSpace bucketSpace) const
std::lock_guard<std::mutex> guard(_lock);
extraModifiedBuckets.swap(_extraModifiedBuckets[bucketSpace]);
}
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, bucketSpace);
- SynchronizedBucketIdListResultHandler resultHandler(snap->size() + extraModifiedBuckets.size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, bucketSpace);
+ SynchronizedBucketIdListResultHandler resultHandler(snap.size() + extraModifiedBuckets.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleGetModifiedBuckets(resultHandler);
}
for (const auto & item : extraModifiedBuckets) {
@@ -599,10 +599,10 @@ PersistenceEngine::split(const Bucket& source, const Bucket& target1, const Buck
LOG(spam, "split(%s, %s, %s)", source.toString().c_str(), target1.toString().c_str(), target2.toString().c_str());
assert(source.getBucketSpace() == target1.getBucketSpace());
assert(source.getBucketSpace() == target2.getBucketSpace());
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, source.getBucketSpace());
- TransportLatch latch(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, source.getBucketSpace());
+ TransportLatch latch(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleSplit(feedtoken::make(latch), source, target1, target2);
}
latch.await();
@@ -617,10 +617,10 @@ PersistenceEngine::join(const Bucket& source1, const Bucket& source2, const Buck
LOG(spam, "join(%s, %s, %s)", source1.toString().c_str(), source2.toString().c_str(), target.toString().c_str());
assert(source1.getBucketSpace() == target.getBucketSpace());
assert(source2.getBucketSpace() == target.getBucketSpace());
- HandlerSnapshot::UP snap = getHandlerSnapshot(rguard, target.getBucketSpace());
- TransportLatch latch(snap->size());
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ HandlerSnapshot snap = getHandlerSnapshot(rguard, target.getBucketSpace());
+ TransportLatch latch(snap.size());
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleJoin(feedtoken::make(latch), source1, source2, target);
}
latch.await();
@@ -724,16 +724,16 @@ public:
void
PersistenceEngine::populateInitialBucketDB(const WriteGuard & guard, BucketSpace bucketSpace, IPersistenceHandler &targetHandler)
{
- HandlerSnapshot::UP snap = getHandlerSnapshot(guard, bucketSpace);
+ HandlerSnapshot snap = getHandlerSnapshot(guard, bucketSpace);
- size_t snapSize(snap->size());
+ size_t snapSize(snap.size());
size_t flawed = 0;
// handleListActiveBuckets() runs in SPI thread.
// No handover to write threads in persistence handlers.
ActiveBucketIdListResultHandler resultHandler;
- for (; snap->handlers().valid(); snap->handlers().next()) {
- IPersistenceHandler *handler = snap->handlers().get();
+ for (; snap.handlers().valid(); snap.handlers().next()) {
+ IPersistenceHandler *handler = snap.handlers().get();
handler->handleListActiveBuckets(resultHandler);
}
typedef std::map<document::BucketId, size_t> BucketIdMap;
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
index 3f2cf92acb7..a4a03f64db2 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
@@ -79,9 +79,9 @@ private:
using WriteGuard = std::unique_lock<std::shared_timed_mutex>;
IPersistenceHandler::SP getHandler(const ReadGuard & guard, document::BucketSpace bucketSpace, const DocTypeName &docType) const;
- HandlerSnapshot::UP getHandlerSnapshot(const WriteGuard & guard) const;
- HandlerSnapshot::UP getHandlerSnapshot(const ReadGuard & guard, document::BucketSpace bucketSpace) const;
- HandlerSnapshot::UP getHandlerSnapshot(const WriteGuard & guard, document::BucketSpace bucketSpace) const;
+ HandlerSnapshot getHandlerSnapshot(const WriteGuard & guard) const;
+ HandlerSnapshot getHandlerSnapshot(const ReadGuard & guard, document::BucketSpace bucketSpace) const;
+ HandlerSnapshot getHandlerSnapshot(const WriteGuard & guard, document::BucketSpace bucketSpace) const;
void saveClusterState(BucketSpace bucketSpace, const ClusterState &calc);
ClusterState::SP savedClusterState(BucketSpace bucketSpace) const;