summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-13 13:42:08 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-13 13:42:08 +0000
commit3bee3fe25fb3f18ab80005b1e8c757bd42738883 (patch)
treea251fa77974e3233035cb88372d2c16930fa0d9b /searchcore
parentd91f0dbeda2a6ab71befb9b425078b2f1ac7432a (diff)
Shortcut bucket creation if it already exist.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/buckethandler.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp6
4 files changed, 15 insertions, 2 deletions
diff --git a/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp b/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
index 4b68481c386..487c8741a65 100644
--- a/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
@@ -156,6 +156,11 @@ TEST_F("require that handleListBuckets() returns buckets from all sub dbs", Fixt
EXPECT_EQUAL(f._notReady.bucket(4), f._bucketList.getList()[2]);
}
+TEST_F("test hasBucket", Fixture) {
+ EXPECT_FALSE(f._handler.hasBucket(makeSpiBucket(BUCKET_1)));
+ EXPECT_TRUE(f._handler.hasBucket(makeSpiBucket(f._ready.bucket(2))));
+}
+
TEST_F("require that bucket is reported in handleGetBucketInfo()", Fixture)
{
diff --git a/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp b/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
index c29498ad87a..d6602e18c81 100644
--- a/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
@@ -118,6 +118,11 @@ BucketHandler::handleGetBucketInfo(const Bucket &bucket,
resultHandler.handle(BucketInfoResult(bucketInfo));
}
+bool
+BucketHandler::hasBucket(const storage::spi::Bucket &bucket) {
+ return _ready->getBucketDB().takeGuard()->hasBucket(bucket);
+}
+
void
BucketHandler::handleListActiveBuckets(IBucketIdListResultHandler &resultHandler)
{
diff --git a/searchcore/src/vespa/searchcore/proton/server/buckethandler.h b/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
index 03ec4449418..927744e1b8e 100644
--- a/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
+++ b/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
@@ -61,6 +61,7 @@ public:
void handleListActiveBuckets(IBucketIdListResultHandler &resultHandler);
void handlePopulateActiveBuckets(document::BucketId::List &buckets,
IGenericResultHandler &resultHandler);
+ bool hasBucket(const storage::spi::Bucket &bucket);
// Implements IClusterStateChangedHandler
void notifyClusterStateChanged(const std::shared_ptr<IBucketStateCalculator> &newCalc) override;
diff --git a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
index 932bab9016c..3d464cced5b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
@@ -83,8 +83,10 @@ PersistenceHandlerProxy::handleGetBucketInfo(const Bucket &bucket, IBucketInfoRe
void
PersistenceHandlerProxy::handleCreateBucket(FeedToken token, const Bucket &bucket)
{
- auto op = std::make_unique<CreateBucketOperation>(bucket.getBucketId().stripUnused());
- _feedHandler.handleOperation(std::move(token), std::move(op));
+ if ( ! _bucketHandler.hasBucket(bucket)) {
+ auto op = std::make_unique<CreateBucketOperation>(bucket.getBucketId().stripUnused());
+ _feedHandler.handleOperation(std::move(token), std::move(op));
+ }
}
void