diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-05-09 01:22:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-09 01:22:17 +0200 |
commit | 46926aae45554905c7895536391852233f1a8a5b (patch) | |
tree | 3ff761c77d0418d5eefae4baa0b4b0efad443763 | |
parent | 0e76145c27c47e01b4f5d49da9f99a41dc0d312a (diff) | |
parent | 36b2ee30dd912e44a4f85cd4d2d86046bbbab2ce (diff) |
Merge pull request #13198 from vespa-engine/balder/make-test-wrapper-thread-safe
Use a lock to ensure it is thread safe.
-rw-r--r-- | storage/src/tests/persistence/common/persistenceproviderwrapper.cpp | 9 | ||||
-rw-r--r-- | storage/src/tests/persistence/common/persistenceproviderwrapper.h | 16 |
2 files changed, 17 insertions, 8 deletions
diff --git a/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp b/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp index 13a254e7a76..dd9ce6e6cba 100644 --- a/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp +++ b/storage/src/tests/persistence/common/persistenceproviderwrapper.cpp @@ -9,11 +9,13 @@ { \ std::ostringstream logStream; \ logStream << ops; \ + Guard guard(_lock); \ _log.push_back(logStream.str()); \ } #define CHECK_ERROR(className, failType) \ { \ + Guard guard(_lock); \ if (_result.getErrorCode() != spi::Result::ErrorType::NONE && (_failureMask & (failType))) { \ return className(_result.getErrorCode(), _result.getErrorMessage()); \ } \ @@ -42,16 +44,18 @@ includedVersionsToString(spi::IncludedVersions versions) PersistenceProviderWrapper::PersistenceProviderWrapper(spi::PersistenceProvider& spi) : _spi(spi), _result(spi::Result(spi::Result::ErrorType::NONE, "")), + _lock(), _log(), _failureMask(0) { } -PersistenceProviderWrapper::~PersistenceProviderWrapper() {} +PersistenceProviderWrapper::~PersistenceProviderWrapper() = default; std::string PersistenceProviderWrapper::toString() const { std::ostringstream ss; + Guard guard(_lock); for (size_t i = 0; i < _log.size(); ++i) { ss << _log[i] << "\n"; } @@ -74,8 +78,7 @@ PersistenceProviderWrapper::listBuckets(BucketSpace bucketSpace, spi::PartitionI } spi::Result -PersistenceProviderWrapper::createBucket(const spi::Bucket& bucket, - spi::Context& context) +PersistenceProviderWrapper::createBucket(const spi::Bucket& bucket, spi::Context& context) { LOG_SPI("createBucket(" << bucket << ")"); CHECK_ERROR(spi::Result, FAIL_CREATE_BUCKET); diff --git a/storage/src/tests/persistence/common/persistenceproviderwrapper.h b/storage/src/tests/persistence/common/persistenceproviderwrapper.h index 9ca08becabe..21e5d8016aa 100644 --- a/storage/src/tests/persistence/common/persistenceproviderwrapper.h +++ b/storage/src/tests/persistence/common/persistenceproviderwrapper.h @@ -19,6 +19,7 @@ #include <vespa/persistence/spi/abstractpersistenceprovider.h> #include <vector> #include <string> +#include <mutex> namespace storage { @@ -50,8 +51,10 @@ public: private: spi::PersistenceProvider& _spi; spi::Result _result; + mutable std::mutex _lock; mutable std::vector<std::string> _log; uint32_t _failureMask; + using Guard = std::lock_guard<std::mutex>; public: PersistenceProviderWrapper(spi::PersistenceProvider& spi); ~PersistenceProviderWrapper() override; @@ -61,12 +64,13 @@ public: * return the given error without the wrapped SPI ever being invoked. */ void setResult(const spi::Result& result) { + Guard guard(_lock); _result = result; } - void clearResult() { - _result = spi::Result(spi::Result::ErrorType::NONE, ""); + spi::Result getResult() const { + Guard guard(_lock); + return _result; } - const spi::Result& getResult() const { return _result; } /** * Set a mask for operations to fail with _result */ @@ -81,8 +85,10 @@ public: /** * Clear log of all operations performed. */ - void clearOperationLog() { _log.clear(); } - const std::vector<std::string>& getOperationLog() const { return _log; } + void clearOperationLog() { + Guard guard(_lock); + _log.clear(); + } spi::Result createBucket(const spi::Bucket&, spi::Context&) override; spi::PartitionStateListResult getPartitionStates() const override; |