diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-15 00:22:41 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-15 00:22:41 +0200 |
commit | 8b8ef46e25b0423af0cec6ace77e6e1d73c1874e (patch) | |
tree | 64296dd811c966bfd554d791a0a84bb7d62a212a /searchcore | |
parent | bc337a34cce61e302c1ee70414839adaf6a4b39c (diff) |
Use shared ptr and Idesructorcallback to make it more flexible.
Diffstat (limited to 'searchcore')
13 files changed, 84 insertions, 169 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp index 5e3e5cd78be..eb2ffff620d 100644 --- a/searchcore/src/tests/proton/documentdb/documentdb_test.cpp +++ b/searchcore/src/tests/proton/documentdb/documentdb_test.cpp @@ -46,7 +46,7 @@ using vespalib::Slime; namespace { -class LocalTransport : public FeedToken::ITransport { +class LocalTransport : public feedtoken::ITransport { mbus::Receptor _receptor; public: diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp index e70e83fd61e..dc63f5329ce 100644 --- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp @@ -295,7 +295,7 @@ struct UpdateContext { }; -struct MyTransport : public FeedToken::ITransport { +struct MyTransport : public feedtoken::ITransport { vespalib::Gate gate; ResultUP result; bool documentWasFound; @@ -309,7 +309,7 @@ struct MyTransport : public FeedToken::ITransport { }; MyTransport::MyTransport() : gate(), result(), documentWasFound(false) {} -MyTransport::~MyTransport() {} +MyTransport::~MyTransport() = default; struct FeedTokenContext { MyTransport transport; @@ -322,13 +322,13 @@ struct FeedTokenContext { if (transport.result.get()) { return transport.result.get(); } - return &token.getResult(); + return &token->getResult(); } }; FeedTokenContext::FeedTokenContext() : transport(), - token(transport) + token(feedtoken::make(transport)) {} FeedTokenContext::~FeedTokenContext() = default; diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp index 548ce8ba20d..78f3d37675f 100644 --- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp @@ -405,7 +405,7 @@ MyAttributeWriter::MyAttributeWriter(MyTracer &tracer) } MyAttributeWriter::~MyAttributeWriter() {} -struct MyTransport : public FeedToken::ITransport +struct MyTransport : public feedtoken::ITransport { ResultUP lastResult; vespalib::Gate _gate; @@ -421,7 +421,7 @@ struct MyTransport : public FeedToken::ITransport }; MyTransport::MyTransport(MyTracer &tracer) : lastResult(), _gate(), _tracer(tracer) {} -MyTransport::~MyTransport() {} +MyTransport::~MyTransport() = default; struct MyResultHandler : public IGenericResultHandler { @@ -491,7 +491,7 @@ struct FeedTokenContext }; FeedTokenContext::FeedTokenContext(MyTracer &tracer) - : mt(tracer), ft(mt) + : mt(tracer), ft(feedtoken::make(mt)) {} FeedTokenContext::~FeedTokenContext() = default; diff --git a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp index 0fea9501d93..8bd1d92657f 100644 --- a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp +++ b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp @@ -5,7 +5,7 @@ using namespace proton; -class LocalTransport : public FeedToken::ITransport { +class LocalTransport : public feedtoken::ITransport { private: size_t _receivedCount; @@ -46,7 +46,7 @@ Test::testAck() { LocalTransport transport; { - FeedToken token(transport); + FeedToken token = feedtoken::make(transport); } EXPECT_EQUAL(1u, transport.getReceivedCount()); } @@ -55,8 +55,8 @@ void Test::testFail() { LocalTransport transport; - FeedToken token(transport); - token.fail(); + FeedToken token = feedtoken::make(transport); + token->fail(); EXPECT_EQUAL(1u, transport.getReceivedCount()); } @@ -72,7 +72,7 @@ Test::testHandover() LocalTransport transport; { - FeedToken token(transport); + FeedToken token = feedtoken::make(transport); token = MyHandover::handover(token); } EXPECT_EQUAL(1u, transport.getReceivedCount()); diff --git a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp index 38d4d809d60..f7b35851696 100644 --- a/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp +++ b/searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp @@ -214,13 +214,13 @@ struct MyHandler : public IPersistenceHandler, IBucketFreezer { void handlePut(FeedToken token, const Bucket& bucket, Timestamp timestamp, const document::Document::SP& doc) override { - token.setResult(ResultUP(new storage::spi::Result()), false); + token->setResult(ResultUP(new storage::spi::Result()), false); handle(token, bucket, timestamp, doc->getId()); } void handleUpdate(FeedToken token, const Bucket& bucket, Timestamp timestamp, const document::DocumentUpdate::SP& upd) override { - token.setResult(ResultUP(new storage::spi::UpdateResult(existingTimestamp)), + token->setResult(ResultUP(new storage::spi::UpdateResult(existingTimestamp)), existingTimestamp > 0); handle(token, bucket, timestamp, upd->getId()); } @@ -228,7 +228,7 @@ struct MyHandler : public IPersistenceHandler, IBucketFreezer { void handleRemove(FeedToken token, const Bucket& bucket, Timestamp timestamp, const DocumentId& id) override { bool wasFound = existingTimestamp > 0; - token.setResult(ResultUP(new storage::spi::RemoveResult(wasFound)), wasFound); + token->setResult(ResultUP(new storage::spi::RemoveResult(wasFound)), wasFound); handle(token, bucket, timestamp, id); } @@ -253,33 +253,27 @@ struct MyHandler : public IPersistenceHandler, IBucketFreezer { } void handleCreateBucket(FeedToken token, const storage::spi::Bucket &) override { - token.setResult(ResultUP(new Result(_createBucketResult)), true); + token->setResult(ResultUP(new Result(_createBucketResult)), true); } void handleDeleteBucket(FeedToken token, const storage::spi::Bucket &) override { - token.setResult(ResultUP(new Result(deleteBucketResult)), true); + token->setResult(ResultUP(new Result(deleteBucketResult)), true); } void handleGetModifiedBuckets(IBucketIdListResultHandler &resultHandler) override { resultHandler.handle(BucketIdListResult(modBucketList)); } - void handleSplit(FeedToken token, const storage::spi::Bucket &source, const storage::spi::Bucket &target1, - const storage::spi::Bucket &target2) override + void handleSplit(FeedToken token, const storage::spi::Bucket &, const storage::spi::Bucket &, + const storage::spi::Bucket &) override { - (void) source; - (void) target1; - (void) target2; - token.setResult(ResultUP(new Result(_splitResult)), true); + token->setResult(ResultUP(new Result(_splitResult)), true); } - void handleJoin(FeedToken token, const storage::spi::Bucket &source1, const storage::spi::Bucket &source2, - const storage::spi::Bucket &target) override + void handleJoin(FeedToken token, const storage::spi::Bucket &, const storage::spi::Bucket &, + const storage::spi::Bucket &) override { - (void) source1; - (void) source2; - (void) target; - token.setResult(ResultUP(new Result(_joinResult)), true); + token->setResult(ResultUP(new Result(_joinResult)), true); } RetrieversSP getDocumentRetrievers(storage::spi::ReadConsistency) override { diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp index 6fcd6bae4ec..b6223dd41ab 100644 --- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp +++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp @@ -2,16 +2,9 @@ #include "feedtoken.h" -namespace proton { +namespace proton::feedtoken { -FeedToken::FeedToken() = default; - -FeedToken::FeedToken(ITransport &transport) : - _state(new State(transport)) -{ -} - -FeedToken::State::State(ITransport & transport) : +State::State(ITransport & transport) : _transport(transport), _result(new storage::spi::Result()), _documentWasFound(false), @@ -19,13 +12,13 @@ FeedToken::State::State(ITransport & transport) : { } -FeedToken::State::~State() +State::~State() { ack(); } void -FeedToken::State::ack() +State::ack() { bool alreadySent = _alreadySent.exchange(true); if ( !alreadySent ) { @@ -34,7 +27,7 @@ FeedToken::State::ack() } void -FeedToken::State::fail() +State::fail() { bool alreadySent = _alreadySent.exchange(true); if ( !alreadySent ) { diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h index d43a80b25ed..bc7e249ca3b 100644 --- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h +++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h @@ -2,7 +2,7 @@ #pragma once #include <vespa/persistence/spi/persistenceprovider.h> -#include <vespa/vespalib/util/exception.h> +#include <vespa/searchlib/common/idestructorcallback.h> #include <vespa/vespalib/util/sync.h> #include <atomic> @@ -15,20 +15,19 @@ typedef std::unique_ptr<storage::spi::Result> ResultUP; * for an IFeedHandler to perform an async reply to an operation. A unique * instance of this class is passed to every invokation of the IFeedHandler. */ -class FeedToken { -public: +namespace feedtoken { class ITransport { public: virtual ~ITransport() { } virtual void send(ResultUP result, bool documentWasFound) = 0; }; - class State { + class State : public search::IDestructorCallback { public: State(const State &) = delete; State & operator = (const State &) = delete; State(ITransport & transport); - ~State(); + ~State() override; void fail(); void setResult(ResultUP result, bool documentWasFound) { _documentWasFound = documentWasFound; @@ -42,58 +41,14 @@ public: bool _documentWasFound; std::atomic<bool> _alreadySent; }; - std::shared_ptr<State> _state; -public: - typedef std::unique_ptr<FeedToken> UP; - typedef std::shared_ptr<FeedToken> SP; - - /** - * Constructs a unique FeedToken. This is the constructor used by the - * FeedEngine when processing input. If the given message is empty, or it - * does not belong to the document protocol, this method throws a - * vespalib::IllegalArgumentException. - * - * @param transport The transport to pass the reply to. - */ - FeedToken(ITransport &transport); - FeedToken(); - - FeedToken(FeedToken &&) = default; - FeedToken & operator =(FeedToken &&) = default; - FeedToken(const FeedToken &) = default; - FeedToken & operator =(const FeedToken &) = default; - ~FeedToken() = default; - - explicit operator bool() const { return static_cast<bool>(_state); } - State * operator ->() { return _state.get(); } - const State * operator -> () const { return _state.get(); } - void reset() { _state.reset(); } - - /** - * Passes a receipt back to the originating FeedEngine, declaring that this - * operation failed for some reason. Invoking this and/or fail() more than - * once is void. - * - * @param errNum A numerical representation of the error. - * @param errMsg A readable string detailing the error. - */ - void fail() const { _state->fail(); } - - /** - * Gives you access to the underlying result. - * - * @return The result - */ - const storage::spi::Result &getResult() const { return _state->getResult(); } - - /** - * Sets the underlying result. - */ - void setResult(ResultUP result, bool documentWasFound) { - _state->setResult(std::move(result), documentWasFound); + inline std::shared_ptr<State> + make(ITransport & latch) { + return std::make_shared<State>(latch); } -}; +} + +using FeedToken = std::shared_ptr<feedtoken::State>; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp index ddaf7d8d6a4..6cdec1ec0f9 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp @@ -3,10 +3,6 @@ #include "persistenceengine.h" #include "ipersistenceengineowner.h" #include "transport_latch.h" -#include <vespa/documentapi/messagebus/documentprotocol.h> -#include <vespa/documentapi/messagebus/messages/feedreply.h> -#include <vespa/documentapi/messagebus/messages/removedocumentreply.h> -#include <vespa/documentapi/messagebus/messages/updatedocumentreply.h> #include <vespa/vespalib/stllike/hash_set.h> #include <vespa/fastos/thread.h> @@ -15,9 +11,6 @@ LOG_SETUP(".proton.persistenceengine.persistenceengine"); using document::Document; using document::DocumentId; -using documentapi::DocumentReply; -using documentapi::RemoveDocumentReply; -using mbus::Reply; using storage::spi::BucketChecksum; using storage::spi::BucketIdListResult; using storage::spi::BucketInfo; @@ -49,7 +42,7 @@ ResultHandlerBase::ResultHandlerBase(uint32_t waitCnt) : _lock(), _latch(waitCnt) {} -ResultHandlerBase::~ResultHandlerBase() { } +ResultHandlerBase::~ResultHandlerBase() = default; class GenericResultHandler : public ResultHandlerBase, public IGenericResultHandler { private: @@ -74,7 +67,7 @@ public: const Result &getResult() const { return _result; } }; -GenericResultHandler::~GenericResultHandler() {} +GenericResultHandler::~GenericResultHandler() = default; class BucketIdListResultHandler : public IBucketIdListResultHandler { @@ -85,8 +78,8 @@ public: BucketIdListResultHandler() : _bucketSet() { } - ~BucketIdListResultHandler(); - virtual void handle(const BucketIdListResult &result) override { + ~BucketIdListResultHandler() override; + void handle(const BucketIdListResult &result) override { const BucketIdListResult::List &buckets = result.getList(); for (size_t i = 0; i < buckets.size(); ++i) { _bucketSet.insert(buckets[i]); @@ -103,7 +96,7 @@ public: }; -BucketIdListResultHandler::~BucketIdListResultHandler() {} +BucketIdListResultHandler::~BucketIdListResultHandler() = default; class SynchronizedBucketIdListResultHandler : public ResultHandlerBase, public BucketIdListResultHandler @@ -113,8 +106,8 @@ public: : ResultHandlerBase(waitCnt), BucketIdListResultHandler() { } - ~SynchronizedBucketIdListResultHandler(); - virtual void handle(const BucketIdListResult &result) override { + ~SynchronizedBucketIdListResultHandler() override; + void handle(const BucketIdListResult &result) override { { vespalib::LockGuard guard(_lock); BucketIdListResultHandler::handle(result); @@ -123,7 +116,7 @@ public: } }; -SynchronizedBucketIdListResultHandler::~SynchronizedBucketIdListResultHandler() {} +SynchronizedBucketIdListResultHandler::~SynchronizedBucketIdListResultHandler() = default; class BucketInfoResultHandler : public IBucketInfoResultHandler { private: @@ -135,8 +128,8 @@ public: _first(true) { } - ~BucketInfoResultHandler(); - virtual void handle(const BucketInfoResult &result) override { + ~BucketInfoResultHandler() override; + void handle(const BucketInfoResult &result) override { if (_first) { _result = result; _first = false; @@ -161,12 +154,10 @@ public: const BucketInfoResult &getResult() const { return _result; } }; -BucketInfoResultHandler::~BucketInfoResultHandler() {} +BucketInfoResultHandler::~BucketInfoResultHandler() = default; } -#define NOT_YET throw vespalib::IllegalArgumentException("Not implemented yet") - PersistenceEngine::HandlerSnapshot::UP PersistenceEngine::getHandlerSnapshot() const { @@ -355,8 +346,7 @@ PersistenceEngine::put(const Bucket& b, Timestamp t, const document::Document::S make_string("No handler for document type '%s'", docType.toString().c_str())); } TransportLatch latch(1); - FeedToken token(latch); - handler->handlePut(std::move(token), b, t, doc); + handler->handlePut(feedtoken::make(latch), b, t, doc); latch.await(); return latch.getResult(); } @@ -374,8 +364,7 @@ PersistenceEngine::remove(const Bucket& b, Timestamp t, const DocumentId& did, C TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch); - handler->handleRemove(std::move(token), b, t, did); + handler->handleRemove(feedtoken::make(latch), b, t, did); } latch.await(); return latch.getRemoveResult(); @@ -395,24 +384,20 @@ PersistenceEngine::update(const Bucket& b, Timestamp t, const DocumentUpdate::SP } std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex); DocTypeName docType(upd->getType()); - LOG(spam, - "update(%s, %" PRIu64 ", (\"%s\", \"%s\"), createIfNonExistent='%s')", - b.toString().c_str(), - static_cast<uint64_t>(t.getValue()), - docType.toString().c_str(), - upd->getId().toString().c_str(), - (upd->getCreateIfNonExistent() ? "true" : "false")); + LOG(spam, "update(%s, %" PRIu64 ", (\"%s\", \"%s\"), createIfNonExistent='%s')", + b.toString().c_str(), static_cast<uint64_t>(t.getValue()), docType.toString().c_str(), + upd->getId().toString().c_str(), (upd->getCreateIfNonExistent() ? "true" : "false")); IPersistenceHandler::SP handler = getHandler(b.getBucketSpace(), docType); - TransportLatch latch(1); + if (handler) { - FeedToken token(latch); + TransportLatch latch(1); LOG(debug, "update = %s", upd->toXml().c_str()); - handler->handleUpdate(std::move(token), b, t, upd); + handler->handleUpdate(feedtoken::make(latch), b, t, upd); latch.await(); + return latch.getUpdateResult(); } else { return UpdateResult(Result::PERMANENT_ERROR, make_string("No handler for document type '%s'", docType.toString().c_str())); } - return latch.getUpdateResult(); } @@ -477,7 +462,7 @@ PersistenceEngine::iterate(IteratorId id, uint64_t maxByteSize, Context&) const { std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex); LockGuard guard(_iterators_lock); - Iterators::const_iterator it = _iterators.find(id); + auto it = _iterators.find(id); if (it == _iterators.end()) { return IterateResult(Result::PERMANENT_ERROR, make_string("Unknown iterator with id %" PRIu64, id.getValue())); } @@ -508,7 +493,7 @@ PersistenceEngine::destroyIterator(IteratorId id, Context&) { std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex); LockGuard guard(_iterators_lock); - Iterators::iterator it = _iterators.find(id); + auto it = _iterators.find(id); if (it == _iterators.end()) { return Result(); } @@ -530,8 +515,7 @@ PersistenceEngine::createBucket(const Bucket &b, Context &) TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch); - handler->handleCreateBucket(std::move(token), b); + handler->handleCreateBucket(feedtoken::make(latch), b); } latch.await(); return latch.getResult(); @@ -547,8 +531,7 @@ PersistenceEngine::deleteBucket(const Bucket& b, Context&) TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch); - handler->handleDeleteBucket(std::move(token), b); + handler->handleDeleteBucket(feedtoken::make(latch), b); } latch.await(); return latch.getResult(); @@ -590,8 +573,7 @@ PersistenceEngine::split(const Bucket& source, const Bucket& target1, const Buck TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch); - handler->handleSplit(std::move(token), source, target1, target2); + handler->handleSplit(feedtoken::make(latch), source, target1, target2); } latch.await(); return latch.getResult(); @@ -609,8 +591,7 @@ PersistenceEngine::join(const Bucket& source1, const Bucket& source2, const Buck TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch); - handler->handleJoin(std::move(token), source1, source2, target); + handler->handleJoin(feedtoken::make(latch), source1, source2, target); } latch.await(); return latch.getResult(); @@ -690,8 +671,8 @@ PersistenceEngine::grabExtraModifiedBuckets(BucketSpace bucketSpace, IPersistenc class ActiveBucketIdListResultHandler : public IBucketIdListResultHandler { private: - typedef std::map<document::BucketId, size_t> BucketIdMap; - typedef std::pair<BucketIdMap::iterator, bool> IR; + using BucketIdMap = std::map<document::BucketId, size_t>; + using IR = std::pair<BucketIdMap::iterator, bool>; BucketIdMap _bucketMap; public: ActiveBucketIdListResultHandler() : _bucketMap() { } diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp index e0d512ae6e0..12ba5e7ab29 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp @@ -3,6 +3,7 @@ #include "transport_latch.h" #include <vespa/vespalib/util/stringfmt.h> +using vespalib::make_string; using storage::spi::Result; namespace proton { @@ -13,7 +14,7 @@ TransportLatch::TransportLatch(uint32_t cnt) _result() {} -TransportLatch::~TransportLatch() {} +TransportLatch::~TransportLatch() = default; void TransportLatch::send(ResultUP result, bool documentWasFound) @@ -35,7 +36,7 @@ Result TransportLatch::mergeErrorResults(const Result &lhs, const Result &rhs) { Result::ErrorType error = (lhs.getErrorCode() > rhs.getErrorCode() ? lhs : rhs).getErrorCode(); - return Result(error, vespalib::make_string("%s, %s", lhs.getErrorMessage().c_str(), rhs.getErrorMessage().c_str())); + return Result(error, make_string("%s, %s", lhs.getErrorMessage().c_str(), rhs.getErrorMessage().c_str())); } } // proton diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h index 12f92722dfa..10dae553a80 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h @@ -11,8 +11,11 @@ namespace proton { * Implementation of FeedToken::ITransport for handling the async reply for an operation. * Uses an internal count down latch to keep track the number of outstanding replies. */ -class TransportLatch : public FeedToken::ITransport { +class TransportLatch : public feedtoken::ITransport { private: + using Result = storage::spi::Result; + using UpdateResult = storage::spi::UpdateResult; + using RemoveResult = storage::spi::RemoveResult; vespalib::CountDownLatch _latch; vespalib::Lock _lock; ResultUP _result; @@ -24,17 +27,16 @@ public: void await() { _latch.await(); } - const storage::spi::UpdateResult &getUpdateResult() const { - return dynamic_cast<const storage::spi::UpdateResult &>(*_result); + const UpdateResult &getUpdateResult() const { + return dynamic_cast<const UpdateResult &>(*_result); } - const storage::spi::Result &getResult() const { + const Result &getResult() const { return *_result; } - const storage::spi::RemoveResult &getRemoveResult() const { - return dynamic_cast<const storage::spi::RemoveResult &>(*_result); + const RemoveResult &getRemoveResult() const { + return dynamic_cast<const RemoveResult &>(*_result); } - static storage::spi::Result mergeErrorResults(const storage::spi::Result &lhs, - const storage::spi::Result &rhs); + static Result mergeErrorResults(const Result &lhs, const Result &rhs); }; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp index ea81b64ff22..4b5597548bb 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp @@ -152,8 +152,7 @@ FeedHandler::createNonExistingDocument(FeedToken token, const UpdateOperation &o token->setResult(ResultUP(new UpdateResult(putOp.getTimestamp())), true); } TransportLatch latch(1); - FeedToken putToken(latch); - _activeFeedView->handlePut(std::move(putToken), putOp); + _activeFeedView->handlePut(feedtoken::make(latch), putOp); latch.await(); } diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.h b/searchcore/src/vespa/searchcore/proton/server/feedhandler.h index 4aec9196491..d717346883a 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.h +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.h @@ -23,7 +23,6 @@ class DDBState; class DeleteBucketOperation; class FeedConfigStore; class FeedState; -class FeedToken; class IDocumentDBOwner; class IFeedHandlerOwner; class IFeedView; @@ -55,7 +54,6 @@ private: typedef storage::spi::Timestamp Timestamp; typedef document::BucketId BucketId; using FeedStateSP = std::shared_ptr<FeedState>; - using FeedTokenUP = std::unique_ptr<FeedToken>; using FeedOperationUP = std::unique_ptr<FeedOperation>; class TlsMgrWriter : public TlsWriter { diff --git a/searchcore/src/vespa/searchcore/proton/server/iheartbeathandler.h b/searchcore/src/vespa/searchcore/proton/server/iheartbeathandler.h index 7919d2f383b..3e8267f5aa5 100644 --- a/searchcore/src/vespa/searchcore/proton/server/iheartbeathandler.h +++ b/searchcore/src/vespa/searchcore/proton/server/iheartbeathandler.h @@ -2,22 +2,14 @@ #pragma once -namespace proton -{ - -class FeedToken; +namespace proton { class IHeartBeatHandler { public: - virtual void - heartBeat() = 0; + virtual void heartBeat() = 0; - virtual - ~IHeartBeatHandler() - { - } + virtual ~IHeartBeatHandler() = default; }; } // namespace proton - |