aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-10 14:45:37 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-05-10 14:45:37 +0000
commitcf82274b96e19b07182e978e226fc2c4da94f7c7 (patch)
tree6564f20b13b86372550e0025f51b5a6434ee8541
parent87117615807b157cbbad5deadbd45028bff66be3 (diff)
No need for the bucket guard anymore for get and visit as all bucket operations are now controlled from the content layer.
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp1
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp31
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/bucket_guard.h35
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h1
10 files changed, 2 insertions, 90 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 8eace5ac657..9f6b82bb277 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
@@ -29,7 +29,6 @@ struct DummyPersistenceHandler : public IPersistenceHandler {
void handleJoin(FeedToken, const storage::spi::Bucket &, const storage::spi::Bucket &, const storage::spi::Bucket &) override {}
RetrieversSP getDocumentRetrievers(storage::spi::ReadConsistency) override { return RetrieversSP(); }
- BucketGuard::UP lockBucket(const storage::spi::Bucket &) override { return BucketGuard::UP(); }
void handleListActiveBuckets(IBucketIdListResultHandler &) override {}
void handlePopulateActiveBuckets(document::BucketId::List &, IGenericResultHandler &) override {}
};
diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
index 90e934bd823..f1e0306a660 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
@@ -11,9 +11,9 @@
#include <vespa/document/update/assignvalueupdate.h>
#include <vespa/persistence/spi/documentselection.h>
#include <vespa/persistence/spi/test.h>
-#include <vespa/searchcore/proton/persistenceengine/bucket_guard.h>
#include <vespa/searchcore/proton/persistenceengine/ipersistenceengineowner.h>
#include <vespa/searchcore/proton/persistenceengine/persistenceengine.h>
+#include <vespa/searchcore/proton/server/ibucketfreezer.h>
#include <vespa/searchcore/proton/test/disk_mem_usage_notifier.h>
#include <vespa/vdslib/distribution/distribution.h>
#include <vespa/vdslib/state/clusterstate.h>
@@ -268,10 +268,6 @@ struct MyHandler : public IPersistenceHandler, IBucketFreezer {
return ret;
}
- BucketGuard::UP lockBucket(const storage::spi::Bucket &b) override {
- return std::make_unique<BucketGuard>(b.getBucketId(), *this);
- }
-
void handleListActiveBuckets(IBucketIdListResultHandler &resultHandler) override {
BucketIdListResult::List list;
resultHandler.handle(BucketIdListResult(list));
@@ -668,17 +664,6 @@ TEST_F("require that get is sent to all handlers", SimpleFixture) {
EXPECT_EQUAL(docId1, f.hset.handler2.lastDocId);
}
-TEST_F("require that get freezes the bucket", SimpleFixture) {
- EXPECT_FALSE(f.hset.handler1.wasFrozen(bucket1));
- EXPECT_FALSE(f.hset.handler2.wasFrozen(bucket1));
- Context context(storage::spi::Priority(0), storage::spi::Trace::TraceLevel(0));
- f.engine.get(bucket1, document::AllFields(), docId1, context);
- EXPECT_TRUE(f.hset.handler1.wasFrozen(bucket1));
- EXPECT_TRUE(f.hset.handler2.wasFrozen(bucket1));
- EXPECT_FALSE(f.hset.handler1.isFrozen(bucket1));
- EXPECT_FALSE(f.hset.handler2.isFrozen(bucket1));
-}
-
TEST_F("require that get returns the first document found", SimpleFixture) {
f.hset.handler1.setDocument(*doc1, tstamp1);
f.hset.handler2.setDocument(*doc2, tstamp2);
@@ -773,20 +758,6 @@ TEST_F("require that destroyIterator prevents iteration", SimpleFixture) {
EXPECT_EQUAL(msg_prefix, it_result.getErrorMessage().substr(0, msg_prefix.size()));
}
-TEST_F("require that buckets are frozen during iterator life", SimpleFixture) {
- EXPECT_FALSE(f.hset.handler1.isFrozen(bucket1));
- EXPECT_FALSE(f.hset.handler2.isFrozen(bucket1));
- Context context(storage::spi::Priority(0), storage::spi::Trace::TraceLevel(0));
- CreateIteratorResult create_result =
- f.engine.createIterator(bucket1, std::make_shared<document::AllFields>(), selection,
- storage::spi::NEWEST_DOCUMENT_ONLY, context);
- EXPECT_TRUE(f.hset.handler1.isFrozen(bucket1));
- EXPECT_TRUE(f.hset.handler2.isFrozen(bucket1));
- f.engine.destroyIterator(create_result.getIteratorId(), context);
- EXPECT_FALSE(f.hset.handler1.isFrozen(bucket1));
- EXPECT_FALSE(f.hset.handler2.isFrozen(bucket1));
-}
-
TEST_F("require that multiple bucket spaces works", SimpleFixture(altBucketSpace)) {
f.hset.prepareListBuckets();
TEST_DO(assertBucketList(f.engine, makeBucketSpace(), { bckId1, bckId2 }));
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/bucket_guard.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/bucket_guard.h
deleted file mode 100644
index 7eb864137a1..00000000000
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/bucket_guard.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include <vespa/document/bucket/bucketid.h>
-#include <memory>
-#include <vespa/searchcore/proton/server/ibucketfreezer.h>
-
-namespace proton {
-
-class BucketGuard {
- document::BucketId _bucket;
- IBucketFreezer &_freezer;
-
-public:
- typedef std::unique_ptr<BucketGuard> UP;
- BucketGuard(const BucketGuard &) = delete;
- BucketGuard & operator=(const BucketGuard &) = delete;
- BucketGuard(BucketGuard &&) = delete;
- BucketGuard & operator=(BucketGuard &&) = delete;
-
- BucketGuard(document::BucketId bucket, IBucketFreezer &freezer)
- : _bucket(bucket),
- _freezer(freezer)
- {
- freezer.freezeBucket(bucket);
- }
-
- ~BucketGuard() {
- _freezer.thawBucket(_bucket);
- }
-};
-
-} // namespace proton
-
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
index 1af6c2e60bc..314a87a150d 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once
-#include "bucket_guard.h"
#include "i_document_retriever.h"
#include "resulthandler.h"
#include <vespa/searchcore/proton/common/feedtoken.h>
@@ -68,7 +67,6 @@ public:
const storage::spi::Bucket &target1, const storage::spi::Bucket &target2) = 0;
virtual RetrieversSP getDocumentRetrievers(storage::spi::ReadConsistency consistency) = 0;
- virtual BucketGuard::UP lockBucket(const storage::spi::Bucket &bucket) = 0;
virtual void handleListActiveBuckets(IBucketIdListResultHandler &resultHandler) = 0;
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 31acf183989..6fccd66e50a 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -417,7 +417,6 @@ PersistenceEngine::get(const Bucket& b, const document::FieldSet& fields, const
HandlerSnapshot snapshot = getHandlerSnapshot(rguard, b.getBucketSpace());
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) {
IDocumentRetriever &retriever = *(*retrievers)[i];
@@ -450,9 +449,7 @@ PersistenceEngine::createIterator(const Bucket &bucket, FieldSetSP fields, const
auto entry = std::make_unique<IteratorEntry>(context.getReadConsistency(), bucket, std::move(fields), selection,
versions, _defaultSerializedSize, _ignoreMaxBytes);
- 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 (const auto & retriever : *retrievers) {
entry->it.add(retriever);
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
index ac7a9847873..041b031478c 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
@@ -48,13 +48,11 @@ private:
PersistenceHandlerSequence handler_sequence;
DocumentIterator it;
bool in_use;
- std::vector<BucketGuard::UP> bucket_guards;
IteratorEntry(storage::spi::ReadConsistency readConsistency, const Bucket &b, FieldSetSP f,
const Selection &s, IncludedVersions v, ssize_t defaultSerializedSize, bool ignoreMaxBytes)
: handler_sequence(),
it(b, std::move(f), s, v, defaultSerializedSize, ignoreMaxBytes, readConsistency),
- in_use(false),
- bucket_guards() {}
+ in_use(false) {}
};
struct BucketSpaceHash {
std::size_t operator() (const document::BucketSpace &bucketSpace) const { return bucketSpace.getId(); }
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index 3b4bf320b70..aa633536419 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -744,11 +744,6 @@ DocumentDB::startTransactionLogReplay()
LOG(debug, "DocumentDB(%s): Database started.", _docTypeName.toString().c_str());
}
-BucketGuard::UP DocumentDB::lockBucket(const document::BucketId &bucket)
-{
- return std::make_unique<BucketGuard>(bucket, _maintenanceController);
-}
-
std::shared_ptr<std::vector<IDocumentRetriever::SP> >
DocumentDB::getDocumentRetrievers(IDocumentRetriever::ReadConsistency consistency)
{
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index ad0225d6f86..999ccad708e 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -22,7 +22,6 @@
#include <vespa/searchcore/proton/common/monitored_refcount.h>
#include <vespa/searchcore/proton/metrics/documentdb_job_trackers.h>
#include <vespa/searchcore/proton/metrics/documentdb_tagged_metrics.h>
-#include <vespa/searchcore/proton/persistenceengine/bucket_guard.h>
#include <vespa/searchcore/proton/persistenceengine/i_resource_write_filter.h>
#include <vespa/searchcore/proton/index/indexmanager.h>
#include <vespa/searchlib/docstore/cachestats.h>
@@ -365,10 +364,7 @@ public:
return _maintenanceController;
}
- BucketGuard::UP lockBucket(const document::BucketId &bucket);
-
virtual SerialNum getOldestFlushedSerial();
-
virtual SerialNum getNewestFlushedSerial();
std::unique_ptr<search::engine::SearchReply>
diff --git a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
index d298c0fac24..95fbcdaa204 100644
--- a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
@@ -124,12 +124,6 @@ PersistenceHandlerProxy::getDocumentRetrievers(storage::spi::ReadConsistency con
return _documentDB->getDocumentRetrievers(consistency);
}
-BucketGuard::UP
-PersistenceHandlerProxy::lockBucket(const storage::spi::Bucket &bucket)
-{
- return _documentDB->lockBucket(bucket.getBucketId().stripUnused());
-}
-
void
PersistenceHandlerProxy::handleListActiveBuckets(IBucketIdListResultHandler &resultHandler)
{
diff --git a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
index ce95cc3bddd..fa32c01fb23 100644
--- a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
+++ b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
@@ -54,7 +54,6 @@ public:
const storage::spi::Bucket &target1, const storage::spi::Bucket &target2) override;
RetrieversSP getDocumentRetrievers(storage::spi::ReadConsistency consistency) override;
- BucketGuard::UP lockBucket(const storage::spi::Bucket &bucket) override;
void handleListActiveBuckets(IBucketIdListResultHandler &resultHandler) override;