From 338bc23ec03e414cda8964763e1a1890aadfd563 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 18 Oct 2021 12:52:04 +0000 Subject: Only keep async variant to simplify what to implement and what fallback there are. --- .../common/persistenceproviderwrapper.cpp | 68 +++++++++++++--------- .../common/persistenceproviderwrapper.h | 26 ++++++--- .../filestorage/operationabortingtest.cpp | 8 ++- .../storage/persistence/provider_error_wrapper.cpp | 26 --------- .../storage/persistence/provider_error_wrapper.h | 4 -- 5 files changed, 64 insertions(+), 68 deletions(-) (limited to 'storage') diff --git a/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp b/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp index 5f1acf6e7da..b3bd1c6a253 100644 --- a/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp +++ b/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp @@ -96,46 +96,40 @@ PersistenceProviderWrapper::getBucketInfo(const spi::Bucket& bucket) const return _spi.getBucketInfo(bucket); } -spi::Result -PersistenceProviderWrapper::put(const spi::Bucket& bucket, spi::Timestamp timestamp, - document::Document::SP doc, spi::Context& context) +void +PersistenceProviderWrapper::putAsync(const spi::Bucket& bucket, spi::Timestamp timestamp, document::Document::SP doc, + spi::Context& context, spi::OperationComplete::UP onComplete) { LOG_SPI("put(" << bucket << ", " << timestamp << ", " << doc->getId() << ")"); - CHECK_ERROR(spi::Result, FAIL_PUT); - return _spi.put(bucket, timestamp, std::move(doc), context); + CHECK_ERROR_ASYNC(spi::Result, FAIL_PUT, onComplete); + _spi.putAsync(bucket, timestamp, std::move(doc), context, std::move(onComplete)); } -spi::RemoveResult -PersistenceProviderWrapper::remove(const spi::Bucket& bucket, - spi::Timestamp timestamp, - const spi::DocumentId& id, - spi::Context& context) +void +PersistenceProviderWrapper::removeAsync(const spi::Bucket& bucket, spi::Timestamp timestamp, const spi::DocumentId& id, + spi::Context& context, spi::OperationComplete::UP onComplete) { LOG_SPI("remove(" << bucket << ", " << timestamp << ", " << id << ")"); - CHECK_ERROR(spi::RemoveResult, FAIL_REMOVE); - return _spi.remove(bucket, timestamp, id, context); + CHECK_ERROR_ASYNC(spi::RemoveResult, FAIL_REMOVE, onComplete); + _spi.removeAsync(bucket, timestamp, id, context, std::move(onComplete)); } -spi::RemoveResult -PersistenceProviderWrapper::removeIfFound(const spi::Bucket& bucket, - spi::Timestamp timestamp, - const spi::DocumentId& id, - spi::Context& context) +void +PersistenceProviderWrapper::removeIfFoundAsync(const spi::Bucket& bucket, spi::Timestamp timestamp, const spi::DocumentId& id, + spi::Context& context, spi::OperationComplete::UP onComplete) { LOG_SPI("removeIfFound(" << bucket << ", " << timestamp << ", " << id << ")"); - CHECK_ERROR(spi::RemoveResult, FAIL_REMOVE_IF_FOUND); - return _spi.removeIfFound(bucket, timestamp, id, context); + CHECK_ERROR_ASYNC(spi::RemoveResult, FAIL_REMOVE_IF_FOUND, onComplete); + _spi.removeIfFoundAsync(bucket, timestamp, id, context, std::move(onComplete)); } -spi::UpdateResult -PersistenceProviderWrapper::update(const spi::Bucket& bucket, - spi::Timestamp timestamp, - document::DocumentUpdate::SP upd, - spi::Context& context) +void +PersistenceProviderWrapper::updateAsync(const spi::Bucket& bucket, spi::Timestamp timestamp, document::DocumentUpdate::SP upd, + spi::Context& context, spi::OperationComplete::UP onComplete) { LOG_SPI("update(" << bucket << ", " << timestamp << ", " << upd->getId() << ")"); - CHECK_ERROR(spi::UpdateResult, FAIL_UPDATE); - return _spi.update(bucket, timestamp, std::move(upd), context); + CHECK_ERROR_ASYNC(spi::UpdateResult, FAIL_UPDATE, onComplete); + _spi.updateAsync(bucket, timestamp, std::move(upd), context, std::move(onComplete)); } spi::GetResult @@ -234,4 +228,26 @@ PersistenceProviderWrapper::removeEntry(const spi::Bucket& bucket, return _spi.removeEntry(bucket, timestamp, context); } +spi::Result +PersistenceProviderWrapper::initialize() { + return _spi.initialize(); +} + +spi::BucketIdListResult +PersistenceProviderWrapper::getModifiedBuckets(spi::PersistenceProvider::BucketSpace bucketSpace) const { + return _spi.getModifiedBuckets(bucketSpace); +} + +spi::Result +PersistenceProviderWrapper::setClusterState(spi::PersistenceProvider::BucketSpace bucketSpace, const spi::ClusterState &state) { + return _spi.setClusterState(bucketSpace, state); +} + +void +PersistenceProviderWrapper::setActiveStateAsync(const spi::Bucket &bucket, spi::BucketInfo::ActiveState state, + spi::OperationComplete::UP onComplete) +{ + _spi.setActiveStateAsync(bucket, state, std::move(onComplete)); +} + } diff --git a/storage/src/tests/persistence/common/persistenceproviderwrapper.h b/storage/src/tests/persistence/common/persistenceproviderwrapper.h index 64828a2a3ee..c6628814dba 100644 --- a/storage/src/tests/persistence/common/persistenceproviderwrapper.h +++ b/storage/src/tests/persistence/common/persistenceproviderwrapper.h @@ -21,7 +21,7 @@ namespace storage { -class PersistenceProviderWrapper : public spi::AbstractPersistenceProvider +class PersistenceProviderWrapper : public spi::PersistenceProvider { public: enum OPERATION_FAILURE_FLAGS @@ -47,11 +47,11 @@ public: // TODO: add more as needed }; private: - spi::PersistenceProvider& _spi; - spi::Result _result; - mutable std::mutex _lock; + spi::PersistenceProvider& _spi; + spi::Result _result; + mutable std::mutex _lock; mutable std::vector _log; - uint32_t _failureMask; + uint32_t _failureMask; using Guard = std::lock_guard; public: PersistenceProviderWrapper(spi::PersistenceProvider& spi); @@ -88,13 +88,21 @@ public: _log.clear(); } + spi::Result initialize() override; + spi::BucketIdListResult getModifiedBuckets(BucketSpace bucketSpace) const override; + + spi::Result setClusterState(BucketSpace bucketSpace, const spi::ClusterState &state) override; + + void setActiveStateAsync(const spi::Bucket &bucket, spi::BucketInfo::ActiveState state, + spi::OperationComplete::UP up) override; + spi::Result createBucket(const spi::Bucket&, spi::Context&) override; spi::BucketIdListResult listBuckets(BucketSpace bucketSpace) const override; spi::BucketInfoResult getBucketInfo(const spi::Bucket&) const override; - spi::Result put(const spi::Bucket&, spi::Timestamp, spi::DocumentSP, spi::Context&) override; - spi::RemoveResult remove(const spi::Bucket&, spi::Timestamp, const spi::DocumentId&, spi::Context&) override; - spi::RemoveResult removeIfFound(const spi::Bucket&, spi::Timestamp, const spi::DocumentId&, spi::Context&) override; - spi::UpdateResult update(const spi::Bucket&, spi::Timestamp, spi::DocumentUpdateSP, spi::Context&) override; + void putAsync(const spi::Bucket&, spi::Timestamp, spi::DocumentSP, spi::Context&, spi::OperationComplete::UP) override; + void removeAsync(const spi::Bucket&, spi::Timestamp, const spi::DocumentId&, spi::Context&, spi::OperationComplete::UP) override; + void removeIfFoundAsync(const spi::Bucket&, spi::Timestamp, const spi::DocumentId&, spi::Context&, spi::OperationComplete::UP) override; + void updateAsync(const spi::Bucket&, spi::Timestamp, spi::DocumentUpdateSP, spi::Context&, spi::OperationComplete::UP) override; spi::GetResult get(const spi::Bucket&, const document::FieldSet&, const spi::DocumentId&, spi::Context&) const override; spi::CreateIteratorResult diff --git a/storage/src/tests/persistence/filestorage/operationabortingtest.cpp b/storage/src/tests/persistence/filestorage/operationabortingtest.cpp index c3caac7121c..07d2b24d536 100644 --- a/storage/src/tests/persistence/filestorage/operationabortingtest.cpp +++ b/storage/src/tests/persistence/filestorage/operationabortingtest.cpp @@ -46,14 +46,15 @@ public: _deleteBucketInvocations(0) {} - spi::Result put(const spi::Bucket&, spi::Timestamp, document::Document::SP, spi::Context&) override + void + putAsync(const spi::Bucket&, spi::Timestamp, document::Document::SP, spi::Context&, spi::OperationComplete::UP onComplete) override { _queueBarrier.await(); // message abort stage with active opertion in disk queue std::this_thread::sleep_for(75ms); _completionBarrier.await(); // test finished - return spi::Result(); + onComplete->onComplete(std::make_unique()); } spi::BucketInfoResult getBucketInfo(const spi::Bucket& bucket) const override { @@ -66,7 +67,8 @@ public: return PersistenceProviderWrapper::createBucket(bucket, ctx); } - void deleteBucketAsync(const spi::Bucket& bucket, spi::Context& ctx, spi::OperationComplete::UP onComplete) override { + void + deleteBucketAsync(const spi::Bucket& bucket, spi::Context& ctx, spi::OperationComplete::UP onComplete) override { ++_deleteBucketInvocations; PersistenceProviderWrapper::deleteBucketAsync(bucket, ctx, std::move(onComplete)); } diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp index 73033132e5d..ce424f0ce83 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp @@ -73,32 +73,6 @@ ProviderErrorWrapper::getBucketInfo(const spi::Bucket& bucket) const return checkResult(_impl.getBucketInfo(bucket)); } -spi::Result -ProviderErrorWrapper::put(const spi::Bucket& bucket, spi::Timestamp ts, spi::DocumentSP doc, spi::Context& context) -{ - return checkResult(_impl.put(bucket, ts, std::move(doc), context)); -} - -spi::RemoveResult -ProviderErrorWrapper::remove(const spi::Bucket& bucket, spi::Timestamp ts, const document::DocumentId& docId, spi::Context& context) -{ - return checkResult(_impl.remove(bucket, ts, docId, context)); -} - -spi::RemoveResult -ProviderErrorWrapper::removeIfFound(const spi::Bucket& bucket, spi::Timestamp ts, - const document::DocumentId& docId, spi::Context& context) -{ - return checkResult(_impl.removeIfFound(bucket, ts, docId, context)); -} - -spi::UpdateResult -ProviderErrorWrapper::update(const spi::Bucket& bucket, spi::Timestamp ts, - spi::DocumentUpdateSP docUpdate, spi::Context& context) -{ - return checkResult(_impl.update(bucket, ts, std::move(docUpdate), context)); -} - spi::GetResult ProviderErrorWrapper::get(const spi::Bucket& bucket, const document::FieldSet& fieldSet, const document::DocumentId& docId, spi::Context& context) const diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.h b/storage/src/vespa/storage/persistence/provider_error_wrapper.h index 6e7986ad65c..c9d2411e372 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.h +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.h @@ -43,10 +43,6 @@ public: spi::Result setClusterState(BucketSpace bucketSpace, const spi::ClusterState&) override; spi::BucketInfoResult getBucketInfo(const spi::Bucket&) const override; - spi::Result put(const spi::Bucket&, spi::Timestamp, spi::DocumentSP, spi::Context&) override; - spi::RemoveResult remove(const spi::Bucket&, spi::Timestamp, const document::DocumentId&, spi::Context&) override; - spi::RemoveResult removeIfFound(const spi::Bucket&, spi::Timestamp, const document::DocumentId&, spi::Context&) override; - spi::UpdateResult update(const spi::Bucket&, spi::Timestamp, spi::DocumentUpdateSP, spi::Context&) override; spi::GetResult get(const spi::Bucket&, const document::FieldSet&, const document::DocumentId&, spi::Context&) const override; spi::CreateIteratorResult createIterator(const spi::Bucket &bucket, FieldSetSP, const spi::Selection &, spi::IncludedVersions versions, -- cgit v1.2.3