summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-05-04 21:46:32 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2020-05-04 22:24:49 +0000
commit9d769dca411691680c16e73094ef27958b260959 (patch)
treeef92f32222f18bb53e73d37554e989be3495b360 /searchcore
parent8bf5ae859e0664c8fd797243328baf6dc1717f7e (diff)
Implement async put
Implement async remove.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp18
-rw-r--r--searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h5
2 files changed, 10 insertions, 13 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
index 8344996e298..1b64578607f 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp
@@ -347,26 +347,24 @@ PersistenceEngine::putAsync(const Bucket &bucket, Timestamp ts, storage::spi::Do
handler->handlePut(feedtoken::make(std::move(transportContext)), bucket, ts, std::move(doc));
}
-PersistenceEngine::RemoveResult
-PersistenceEngine::remove(const Bucket& b, Timestamp t, const DocumentId& did, Context&)
+void
+PersistenceEngine::removeAsync(const Bucket& b, Timestamp t, const DocumentId& did, Context&, OperationComplete::UP onComplete)
{
std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex);
LOG(spam, "remove(%s, %" PRIu64 ", \"%s\")", b.toString().c_str(),
static_cast<uint64_t>(t.getValue()), did.toString().c_str());
if (!did.hasDocType()) {
- return RemoveResult(Result::ErrorType::PERMANENT_ERROR,
- make_string("Old id scheme not supported in elastic mode (%s)", did.toString().c_str()));
+ return onComplete->onComplete(std::make_unique<RemoveResult>(Result::ErrorType::PERMANENT_ERROR,
+ make_string("Old id scheme not supported in elastic mode (%s)", did.toString().c_str())));
}
DocTypeName docType(did.getDocType());
IPersistenceHandler * handler = getHandler(rguard, b.getBucketSpace(), docType);
if (!handler) {
- return RemoveResult(Result::ErrorType::PERMANENT_ERROR,
- make_string("No handler for document type '%s'", docType.toString().c_str()));
+ return onComplete->onComplete(std::make_unique<RemoveResult>(Result::ErrorType::PERMANENT_ERROR,
+ make_string("No handler for document type '%s'", docType.toString().c_str())));
}
- TransportLatch latch(1);
- handler->handleRemove(feedtoken::make(latch), b, t, did);
- latch.await();
- return latch.getRemoveResult();
+ auto transportContext = std::make_unique<AsyncTranportContext>(1, std::move(onComplete));
+ handler->handleRemove(feedtoken::make(std::move(transportContext)), b, t, did);
}
diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
index 43239e95a96..a5a0c164499 100644
--- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
+++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h
@@ -102,9 +102,8 @@ public:
Result setActiveState(const Bucket& bucket, BucketInfo::ActiveState newState) override;
BucketInfoResult getBucketInfo(const Bucket&) const override;
void putAsync(const Bucket &, Timestamp, storage::spi::DocumentSP, Context &context, OperationComplete::UP) override;
- RemoveResult remove(const Bucket&, Timestamp, const document::DocumentId&, Context&) override;
- UpdateResult update(const Bucket&, Timestamp,
- const std::shared_ptr<document::DocumentUpdate>&, Context&) override;
+ void removeAsync(const Bucket&, Timestamp, const document::DocumentId&, Context&, OperationComplete::UP) override;
+ UpdateResult update(const Bucket&, Timestamp, const std::shared_ptr<document::DocumentUpdate>&, Context&) override;
GetResult get(const Bucket&, const document::FieldSet&, const document::DocumentId&, Context&) const override;
CreateIteratorResult createIterator(const Bucket&, const document::FieldSet&, const Selection&,
IncludedVersions, Context&) override;