X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fsyncstorageimpl.cpp;fp=src%2Fsyncstorageimpl.cpp;h=3eaeb03514c6f58d80b52c97b3eb640c1742e7df;hb=d565df6613d97c08664a00f3fbc7cb5fdcf233f6;hp=76c15467f5026a3d3b016ef598180556c1eac00d;hpb=faf9fc79e58fa4ace9b0ef317b741afb2c1a8abe;p=ric-plt%2Fsdl.git diff --git a/src/syncstorageimpl.cpp b/src/syncstorageimpl.cpp index 76c1546..3eaeb03 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)