summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-04-29 18:55:21 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-04-29 18:55:21 +0000
commite3da8487f35e6ff4ea65f27ba6f3e1bcb89d32a2 (patch)
tree5ddd4eee10596689bec9481538510def64e0095c
parenteb7b71781ca079b5577a13b300beafee388bc1ce (diff)
Move error checking to tracker.
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.cpp38
-rw-r--r--storage/src/vespa/storage/persistence/persistencethread.h1
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.cpp13
-rw-r--r--storage/src/vespa/storage/persistence/persistenceutil.h2
4 files changed, 27 insertions, 27 deletions
diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp
index 5905d93cc83..e663aa4a366 100644
--- a/storage/src/vespa/storage/persistence/persistencethread.cpp
+++ b/storage/src/vespa/storage/persistence/persistencethread.cpp
@@ -67,20 +67,6 @@ PersistenceThread::getBucket(const DocumentId& id, const document::Bucket &bucke
}
bool
-PersistenceThread::checkForError(const spi::Result& response, MessageTracker& tracker)
-{
- uint32_t code = PersistenceUtil::convertErrorCode(response);
-
- if (code != 0) {
- tracker.fail(code, response.getErrorMessage());
- return false;
- }
-
- return true;
-}
-
-
-bool
PersistenceThread::tasConditionExists(const api::TestAndSetCommand & cmd) {
return cmd.getCondition().isPresent();
}
@@ -118,7 +104,7 @@ PersistenceThread::handlePut(api::PutCommand& cmd, MessageTracker::UP tracker)
spi::Result response = _spi.put(getBucket(cmd.getDocumentId(), cmd.getBucket()),
spi::Timestamp(cmd.getTimestamp()), std::move(cmd.getDocument()), tracker->context());
- checkForError(response, *tracker);
+ tracker->checkForError(response);
return tracker;
}
@@ -135,7 +121,7 @@ PersistenceThread::handleRemove(api::RemoveCommand& cmd, MessageTracker::UP trac
spi::RemoveResult response = _spi.removeIfFound(getBucket(cmd.getDocumentId(), cmd.getBucket()),
spi::Timestamp(cmd.getTimestamp()), cmd.getDocumentId(), tracker->context());
- if (checkForError(response, *tracker)) {
+ if (tracker->checkForError(response)) {
tracker->setReply(std::make_shared<api::RemoveReply>(cmd, response.wasFound() ? cmd.getTimestamp() : 0));
}
if (!response.wasFound()) {
@@ -157,7 +143,7 @@ PersistenceThread::handleUpdate(api::UpdateCommand& cmd, MessageTracker::UP trac
spi::UpdateResult response = _spi.update(getBucket(cmd.getUpdate()->getId(), cmd.getBucket()),
spi::Timestamp(cmd.getTimestamp()), cmd.getUpdate(), tracker->context());
- if (checkForError(response, *tracker)) {
+ if (tracker->checkForError(response)) {
auto reply = std::make_shared<api::UpdateReply>(cmd);
reply->setOldTimestamp(response.getExistingTimestamp());
tracker->setReply(std::move(reply));
@@ -189,7 +175,7 @@ PersistenceThread::handleGet(api::GetCommand& cmd, MessageTracker::UP tracker)
spi::GetResult result =
_spi.get(getBucket(cmd.getDocumentId(), cmd.getBucket()), *fieldSet, cmd.getDocumentId(), tracker->context());
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
if (!result.hasDocument()) {
_env._metrics.get[cmd.getLoadType()].notFound.inc();
}
@@ -209,7 +195,7 @@ PersistenceThread::handleRepairBucket(RepairBucketCommand& cmd, MessageTracker::
api::BucketInfo before = _env.getBucketInfo(cmd.getBucket());
spi::Result result = _spi.maintain(spi::Bucket(cmd.getBucket(), spi::PartitionId(_env._partition)),
cmd.verifyBody() ? spi::HIGH : spi::LOW);
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
api::BucketInfo after = _env.getBucketInfo(cmd.getBucket());
RepairBucketReply::UP reply(new RepairBucketReply(cmd, after));
@@ -338,7 +324,7 @@ PersistenceThread::handleGetIter(GetIterCommand& cmd, MessageTracker::UP tracker
{
tracker->setMetric(_env._metrics.visit[cmd.getLoadType()]);
spi::IterateResult result(_spi.iterate(cmd.getIteratorId(), cmd.getMaxByteSize(), tracker->context()));
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
auto reply = std::make_shared<GetIterReply>(cmd);
reply->getEntries() = result.steal_entries();
_env._metrics.visit[cmd.getLoadType()].
@@ -357,7 +343,7 @@ PersistenceThread::handleReadBucketList(ReadBucketList& cmd, MessageTracker::UP
tracker->setMetric(_env._metrics.readBucketList);
spi::BucketIdListResult result(_spi.listBuckets(cmd.getBucketSpace(), cmd.getPartition()));
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
auto reply = std::make_shared<ReadBucketListReply>(cmd);
result.getList().swap(reply->getBuckets());
tracker->setReply(reply);
@@ -383,7 +369,7 @@ PersistenceThread::handleCreateIterator(CreateIteratorCommand& cmd, MessageTrack
spi::CreateIteratorResult result(_spi.createIterator(
spi::Bucket(cmd.getBucket(), spi::PartitionId(_env._partition)),
*fieldSet, cmd.getSelection(), cmd.getIncludedVersions(), tracker->context()));
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
tracker->setReply(std::make_shared<CreateIteratorReply>(cmd, spi::IteratorId(result.getIteratorId())));
}
return tracker;
@@ -604,7 +590,7 @@ PersistenceThread::handleJoinBuckets(api::JoinBucketsCommand& cmd, MessageTracke
spi::Bucket(secondBucket, spi::PartitionId(lock2.disk)),
spi::Bucket(destBucket, spi::PartitionId(_env._partition)),
tracker->context());
- if (!checkForError(result, *tracker)) {
+ if (!tracker->checkForError(result)) {
return tracker;
}
uint64_t lastModified = 0;
@@ -645,7 +631,7 @@ PersistenceThread::handleSetBucketState(api::SetBucketStateCommand& cmd, Message
spi::BucketInfo::ActiveState newState(shouldBeActive ? spi::BucketInfo::ACTIVE : spi::BucketInfo::NOT_ACTIVE);
spi::Result result(_spi.setActiveState(bucket, newState));
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
StorBucketDatabase::WrappedEntry
entry = _env.getBucketDatabase(bucket.getBucket().getBucketSpace()).get(cmd.getBucketId(), "handleSetBucketState");
if (entry.exist()) {
@@ -683,7 +669,7 @@ PersistenceThread::handleInternalBucketJoin(InternalBucketJoinCommand& cmd, Mess
spi::Bucket(destBucket, spi::PartitionId(cmd.getDiskOfInstanceToJoin())),
spi::Bucket(destBucket, spi::PartitionId(cmd.getDiskOfInstanceToKeep())),
tracker->context());
- if (checkForError(result, *tracker)) {
+ if (tracker->checkForError(result)) {
tracker->setReply(std::make_shared<InternalBucketJoinReply>(cmd, _env.getBucketInfo(cmd.getBucket())));
}
return tracker;
@@ -813,7 +799,7 @@ PersistenceThread::processMessage(api::StorageMessage& msg, MessageTracker::UP t
LOG(debug, "Caught exception for %s: %s", msg.toString().c_str(), e.what());
}
} else {
- api::StorageCommand& initiatingCommand = static_cast<api::StorageCommand&>(msg);
+ auto & initiatingCommand = static_cast<api::StorageCommand&>(msg);
try {
int64_t startTime(_component->getClock().getTimeInMillis().getTime());
diff --git a/storage/src/vespa/storage/persistence/persistencethread.h b/storage/src/vespa/storage/persistence/persistencethread.h
index a3c8099f228..156c6a0496e 100644
--- a/storage/src/vespa/storage/persistence/persistencethread.h
+++ b/storage/src/vespa/storage/persistence/persistencethread.h
@@ -78,7 +78,6 @@ private:
// Thread main loop
void run(framework::ThreadHandle&) override;
- static bool checkForError(const spi::Result& response, MessageTracker& tracker);
spi::Bucket getBucket(const DocumentId& id, const document::Bucket &bucket) const;
friend class TestAndSetHelper;
diff --git a/storage/src/vespa/storage/persistence/persistenceutil.cpp b/storage/src/vespa/storage/persistence/persistenceutil.cpp
index 53679a1a364..c46b9ab7059 100644
--- a/storage/src/vespa/storage/persistence/persistenceutil.cpp
+++ b/storage/src/vespa/storage/persistence/persistenceutil.cpp
@@ -80,6 +80,19 @@ MessageTracker::sendReply() {
}
}
+bool
+MessageTracker::checkForError(const spi::Result& response)
+{
+ uint32_t code = PersistenceUtil::convertErrorCode(response);
+
+ if (code != 0) {
+ fail(code, response.getErrorMessage());
+ return false;
+ }
+
+ return true;
+}
+
void
MessageTracker::fail(const ReturnCode& result)
{
diff --git a/storage/src/vespa/storage/persistence/persistenceutil.h b/storage/src/vespa/storage/persistence/persistenceutil.h
index c6cb943f0b9..6773e687ab1 100644
--- a/storage/src/vespa/storage/persistence/persistenceutil.h
+++ b/storage/src/vespa/storage/persistence/persistenceutil.h
@@ -65,6 +65,8 @@ public:
void sendReply();
+ bool checkForError(const spi::Result& response);
+
private:
bool _sendReply;
bool _updateBucketInfo;