summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-10-17 09:56:08 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-10-17 09:56:08 +0000
commitd0c01828bf846d555ba648c342e58f2aa71b6cc7 (patch)
tree134f0aaa67d6e6d678970db09d222aa6edcf64d6 /searchcore
parent4d60d2845dba1fcfb2b68bd64a616d50578bf88c (diff)
Make setActiveState async.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp5
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistence_handler_map/persistence_handler_map_test.cpp4
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp19
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/buckethandler.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h2
10 files changed, 25 insertions, 25 deletions
diff --git a/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp b/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
index 487c8741a65..29748a2010c 100644
--- a/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/buckethandler/buckethandler_test.cpp
@@ -96,7 +96,7 @@ struct Fixture
BucketStateCalculator::SP _calc;
test::BucketIdListResultHandler _bucketList;
test::BucketInfoResultHandler _bucketInfo;
- test::GenericResultHandler _genResult;
+ std::shared_ptr<test::GenericResultHandler> _genResult;
Fixture()
: _builder(),
_bucketDB(std::make_shared<bucketdb::BucketDBOwner>()),
@@ -107,7 +107,8 @@ struct Fixture
_handler(_exec),
_changedHandler(),
_calc(new BucketStateCalculator()),
- _bucketList(), _bucketInfo(), _genResult()
+ _bucketList(), _bucketInfo(),
+ _genResult(std::make_shared<test::GenericResultHandler>())
{
// bucket 2 & 3 & 4 & 7 in ready
_ready.insertDocs(_builder.createDocs(2, 1, 3). // 2 docs
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 2bb1eb44e25..e8cc1b54235 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
@@ -20,7 +20,7 @@ struct DummyPersistenceHandler : public IPersistenceHandler {
void handleRemove(FeedToken, const storage::spi::Bucket &, storage::spi::Timestamp, const document::DocumentId &) override {}
void handleListBuckets(IBucketIdListResultHandler &) override {}
void handleSetClusterState(const storage::spi::ClusterState &, IGenericResultHandler &) override {}
- void handleSetActiveState(const storage::spi::Bucket &, storage::spi::BucketInfo::ActiveState, IGenericResultHandler &) override {}
+ void handleSetActiveState(const storage::spi::Bucket &, storage::spi::BucketInfo::ActiveState, std::shared_ptr<IGenericResultHandler>) override {}
void handleGetBucketInfo(const storage::spi::Bucket &, IBucketInfoResultHandler &) override {}
void handleCreateBucket(FeedToken, const storage::spi::Bucket &) override {}
void handleDeleteBucket(FeedToken, const storage::spi::Bucket &) override {}
@@ -44,8 +44,6 @@ DummyPersistenceHandler::SP handler_b(std::make_shared<DummyPersistenceHandler>(
DummyPersistenceHandler::SP handler_c(std::make_shared<DummyPersistenceHandler>());
DummyPersistenceHandler::SP handler_a_new(std::make_shared<DummyPersistenceHandler>());
-
-
void
assertHandler(const IPersistenceHandler::SP & lhs, const IPersistenceHandler * rhs)
{
diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
index 9613c505f77..c252c89a2f8 100644
--- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
+++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp
@@ -227,10 +227,10 @@ struct MyHandler : public IPersistenceHandler, IBucketFreezer {
}
void handleSetActiveState(const Bucket &bucket, storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler) override {
+ std::shared_ptr<IGenericResultHandler> resultHandler) override {
lastBucket = bucket;
lastBucketState = newState;
- resultHandler.handle(bucketStateResult);
+ resultHandler->handle(bucketStateResult);
}
void handleGetBucketInfo(const Bucket &, IBucketInfoResultHandler &resultHandler) override {
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
index b4544868bbe..b393a85f632 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/ipersistencehandler.h
@@ -53,7 +53,7 @@ public:
virtual void handleSetActiveState(const storage::spi::Bucket &bucket,
storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler) = 0;
+ std::shared_ptr<IGenericResultHandler> resultHandler) = 0;
virtual void handleGetBucketInfo(const storage::spi::Bucket &bucket, IBucketInfoResultHandler &resultHandler) = 0;
virtual void handleCreateBucket(FeedToken token, const storage::spi::Bucket &bucket) = 0;
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 136d95a068b..cb26e80b3ff 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -306,20 +306,21 @@ PersistenceEngine::setClusterState(BucketSpace bucketSpace, const ClusterState &
}
-Result
-PersistenceEngine::setActiveState(const Bucket& bucket,
- storage::spi::BucketInfo::ActiveState newState)
+void
+PersistenceEngine::setActiveStateAsync(const Bucket & bucket, BucketInfo::ActiveState newState, OperationComplete::UP onComplete)
{
ReadGuard rguard(_rwMutex);
HandlerSnapshot snap = getHandlerSnapshot(rguard, bucket.getBucketSpace());
- auto catchResult = std::make_unique<storage::spi::CatchResult>();
- auto futureResult = catchResult->future_result();
- GenericResultHandler resultHandler(snap.size(), std::move(catchResult));
- for (; snap.handlers().valid(); snap.handlers().next()) {
+ auto resultHandler = std::make_shared<GenericResultHandler>(snap.size(), std::move(onComplete));
+ while (snap.handlers().valid()) {
IPersistenceHandler *handler = snap.handlers().get();
- handler->handleSetActiveState(bucket, newState, resultHandler);
+ snap.handlers().next();
+ if (snap.handlers().valid()) {
+ handler->handleSetActiveState(bucket, newState, resultHandler);
+ } else {
+ handler->handleSetActiveState(bucket, newState, std::move(resultHandler));
+ }
}
- return *futureResult.get();
}
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
index 0aeb3e16351..e131cb13ae1 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
@@ -103,7 +103,7 @@ public:
Result initialize() override;
BucketIdListResult listBuckets(BucketSpace bucketSpace) const override;
Result setClusterState(BucketSpace bucketSpace, const ClusterState& calc) override;
- Result setActiveState(const Bucket& bucket, BucketInfo::ActiveState newState) override;
+ void setActiveStateAsync(const Bucket&, BucketInfo::ActiveState, OperationComplete::UP) override;
BucketInfoResult getBucketInfo(const Bucket&) const override;
void putAsync(const Bucket &, Timestamp, storage::spi::DocumentSP, Context &context, OperationComplete::UP) override;
void removeAsync(const Bucket&, Timestamp, const document::DocumentId&, Context&, OperationComplete::UP) override;
diff --git a/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp b/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
index d6602e18c81..c15be9336fe 100644
--- a/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/buckethandler.cpp
@@ -98,10 +98,10 @@ BucketHandler::handleListBuckets(IBucketIdListResultHandler &resultHandler)
void
BucketHandler::handleSetCurrentState(const BucketId &bucketId,
storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler)
+ std::shared_ptr<IGenericResultHandler> resultHandlerSP)
{
- _executor.execute(makeLambdaTask([this, bucketId, newState, resultHandlerP = &resultHandler]() {
- performSetCurrentState(bucketId, newState, resultHandlerP);
+ _executor.execute(makeLambdaTask([this, bucketId, newState, resultHandler = std::move(resultHandlerSP)]() {
+ performSetCurrentState(bucketId, newState, resultHandler.get());
}));
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/buckethandler.h b/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
index 927744e1b8e..7f44d2ebd71 100644
--- a/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
+++ b/searchcore/src/vespa/searchcore/proton/server/buckethandler.h
@@ -55,7 +55,7 @@ public:
void handleListBuckets(IBucketIdListResultHandler &resultHandler);
void handleSetCurrentState(const document::BucketId &bucketId,
storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler);
+ std::shared_ptr<IGenericResultHandler> resultHandler);
void handleGetBucketInfo(const storage::spi::Bucket &bucket,
IBucketInfoResultHandler &resultHandler);
void handleListActiveBuckets(IBucketIdListResultHandler &resultHandler);
diff --git a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
index 3d464cced5b..bec9197501b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.cpp
@@ -69,9 +69,9 @@ PersistenceHandlerProxy::handleSetClusterState(const storage::spi::ClusterState
void
PersistenceHandlerProxy::handleSetActiveState(const storage::spi::Bucket &bucket,
storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler)
+ std::shared_ptr<IGenericResultHandler> resultHandler)
{
- _bucketHandler.handleSetCurrentState(bucket.getBucketId().stripUnused(), newState, resultHandler);
+ _bucketHandler.handleSetCurrentState(bucket.getBucketId().stripUnused(), newState, std::move(resultHandler));
}
void
diff --git a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
index 96bfbe18423..f4d6175391c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
+++ b/searchcore/src/vespa/searchcore/proton/server/persistencehandlerproxy.h
@@ -40,7 +40,7 @@ public:
void handleSetClusterState(const storage::spi::ClusterState &calc, IGenericResultHandler &resultHandler) override;
void handleSetActiveState(const storage::spi::Bucket &bucket, storage::spi::BucketInfo::ActiveState newState,
- IGenericResultHandler &resultHandler) override;
+ std::shared_ptr<IGenericResultHandler> resultHandler) override;
void handleGetBucketInfo(const storage::spi::Bucket &bucket, IBucketInfoResultHandler &resultHandler) override;
void handleCreateBucket(FeedToken token, const storage::spi::Bucket &bucket) override;