X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fsyncstorageimpl.cpp;h=19f0e547d8e8e329c5889d63c1ee0f9d549b7b92;hb=63869e10ac4d8572238989e1b582c0314da91f9c;hp=76c15467f5026a3d3b016ef598180556c1eac00d;hpb=faf9fc79e58fa4ace9b0ef317b741afb2c1a8abe;p=ric-plt%2Fsdl.git diff --git a/src/syncstorageimpl.cpp b/src/syncstorageimpl.cpp index 76c1546..19f0e54 100644 --- a/src/syncstorageimpl.cpp +++ b/src/syncstorageimpl.cpp @@ -79,9 +79,10 @@ SyncStorageImpl::SyncStorageImpl(std::unique_ptr pAsyncStorage, { } -void SyncStorageImpl::waitReadyAck(const std::error_code&) +void SyncStorageImpl::waitReadyAck(const std::error_code& error) { isReady = true; + localError = error; } void SyncStorageImpl::modifyAck(const std::error_code& error) @@ -129,30 +130,44 @@ void SyncStorageImpl::pollAndHandleEvents(int timeout_ms) asyncStorage->handleEvents(); } -void SyncStorageImpl::waitForReadinessCheckCallback() +void SyncStorageImpl::waitForReadinessCheckCallback(const std::chrono::steady_clock::duration& timeout) { - if (operationTimeout == std::chrono::steady_clock::duration::zero()) + if (timeout == std::chrono::steady_clock::duration::zero()) { while (!isReady) pollAndHandleEvents(NO_TIMEOUT); } else { - int pollTimeout_ms = std::chrono::duration_cast(operationTimeout).count() / 10; + auto timeout_ms(std::chrono::duration_cast(timeout).count()); + auto pollTimeout_ms(timeout_ms / 10); std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now(); - while(!isReady && (std::chrono::steady_clock::now() - start < operationTimeout)) + while(!isReady && (std::chrono::steady_clock::now() - start < std::chrono::milliseconds(timeout_ms))) pollAndHandleEvents(pollTimeout_ms); } } void SyncStorageImpl::waitSdlToBeReady(const Namespace& ns) +{ + waitSdlToBeReady(ns, operationTimeout); +} + +void SyncStorageImpl::waitSdlToBeReady(const Namespace& ns, const std::chrono::steady_clock::duration& timeout) { isReady = false; asyncStorage->waitReadyAsync(ns, std::bind(&shareddatalayer::SyncStorageImpl::waitReadyAck, this, - std::error_code())); - waitForReadinessCheckCallback(); + std::placeholders::_1)); + waitForReadinessCheckCallback(timeout); +} + +void SyncStorageImpl::waitReady(const Namespace& ns, const std::chrono::steady_clock::duration& timeout) +{ + waitSdlToBeReady(ns, timeout); + if(!isReady) + throw RejectedBySdl("Timeout, SDL service not ready for the '" + ns + "' namespace"); + verifyBackendResponse(); } void SyncStorageImpl::set(const Namespace& ns, const DataMap& dataMap) @@ -268,6 +283,22 @@ SyncStorageImpl::Keys SyncStorageImpl::findKeys(const Namespace& ns, const std:: return localKeys; } +SyncStorageImpl::Keys SyncStorageImpl::listKeys(const Namespace& ns, const std::string& pattern) +{ + handlePendingEvents(); + waitSdlToBeReady(ns); + synced = false; + asyncStorage->listKeys(ns, + pattern, + std::bind(&shareddatalayer::SyncStorageImpl::findKeysAck, + this, + std::placeholders::_1, + std::placeholders::_2)); + waitForOperationCallback(); + verifyBackendResponse(); + return localKeys; +} + void SyncStorageImpl::removeAll(const Namespace& ns) { handlePendingEvents();