diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-13 13:42:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-10-13 13:42:08 +0000 |
commit | 3bee3fe25fb3f18ab80005b1e8c757bd42738883 (patch) | |
tree | a251fa77974e3233035cb88372d2c16930fa0d9b /searchcore | |
parent | d91f0dbeda2a6ab71befb9b425078b2f1ac7432a (diff) |
Shortcut bucket creation if it already exist.
Diffstat (limited to 'searchcore')
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 |