diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-05-04 21:46:32 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-05-04 22:24:49 +0000 |
commit | 9d769dca411691680c16e73094ef27958b260959 (patch) | |
tree | ef92f32222f18bb53e73d37554e989be3495b360 /searchcore | |
parent | 8bf5ae859e0664c8fd797243328baf6dc1717f7e (diff) |
Implement async put
Implement async remove.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp | 18 | ||||
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.h | 5 |
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; |