aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-10-15 00:22:41 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-10-15 00:22:41 +0200
commit8b8ef46e25b0423af0cec6ace77e6e1d73c1874e (patch)
tree64296dd811c966bfd554d791a0a84bb7d62a212a /searchcore/src
parentbc337a34cce61e302c1ee70414839adaf6a4b39c (diff)
Use shared ptr and Idesructorcallback to make it more flexible.
Diffstat (limited to 'searchcore/src')
-rw-r--r--searchcore/src/tests/proton/documentdb/documentdb_test.cpp2
-rw-r--r--searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp8
-rw-r--r--searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp6
-rw-r--r--searchcore/src/tests/proton/feedtoken/feedtoken.cpp10
-rw-r--r--searchcore/src/tests/proton/persistenceengine/persistenceengine_test.cpp28
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp17
-rw-r--r--searchcore/src/vespa/searchcore/proton/common/feedtoken.h65
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp75
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h18
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/feedhandler.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/iheartbeathandler.h14
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
-