X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=include%2Fprivate%2Fsyncstorageimpl.hpp;fp=include%2Fprivate%2Fsyncstorageimpl.hpp;h=735274f549f3dc0f855320f13c184cc3c18dab71;hb=faf9fc79e58fa4ace9b0ef317b741afb2c1a8abe;hp=db762e050bbc1aa7760423fd898523e585e67bce;hpb=6e77ef4f748bdfa40505fc11c0a190e7a40fdb46;p=ric-plt%2Fsdl.git diff --git a/include/private/syncstorageimpl.hpp b/include/private/syncstorageimpl.hpp index db762e0..735274f 100644 --- a/include/private/syncstorageimpl.hpp +++ b/include/private/syncstorageimpl.hpp @@ -22,13 +22,13 @@ #ifndef SHAREDDATALAYER_SYNCSTORAGEIMPL_HPP_ #define SHAREDDATALAYER_SYNCSTORAGEIMPL_HPP_ +#include #include +#include #include namespace shareddatalayer { - class AsyncStorage; - class System; class SyncStorageImpl: public SyncStorage @@ -39,38 +39,50 @@ namespace shareddatalayer SyncStorageImpl(std::unique_ptr asyncStorage, System& system); - void set(const Namespace& ns, const DataMap& dataMap) override; + virtual void set(const Namespace& ns, const DataMap& dataMap) override; + + virtual bool setIf(const Namespace& ns, const Key& key, const Data& oldData, const Data& newData) override; - bool setIf(const Namespace& ns, const Key& key, const Data& oldData, const Data& newData) override; + virtual bool setIfNotExists(const Namespace& ns, const Key& key, const Data& data) override; - bool setIfNotExists(const Namespace& ns, const Key& key, const Data& data) override; + virtual DataMap get(const Namespace& ns, const Keys& keys) override; - DataMap get(const Namespace& ns, const Keys& keys) override; + virtual void remove(const Namespace& ns, const Keys& keys) override; - void remove(const Namespace& ns, const Keys& keys) override; + virtual bool removeIf(const Namespace& ns, const Key& key, const Data& data) override; - bool removeIf(const Namespace& ns, const Key& key, const Data& data) override; + virtual Keys findKeys(const Namespace& ns, const std::string& keyPrefix) override; - Keys findKeys(const Namespace& ns, const std::string& keyPrefix) override; + virtual void removeAll(const Namespace& ns) override; - void removeAll(const Namespace& ns) override; + virtual void setOperationTimeout(const std::chrono::steady_clock::duration& timeout) override; + + static constexpr int NO_TIMEOUT = -1; private: std::unique_ptr asyncStorage; System& system; - int pFd; DataMap localMap; Keys localKeys; bool localStatus; std::error_code localError; bool synced; + bool isReady; + struct pollfd events; + std::chrono::steady_clock::duration operationTimeout; void verifyBackendResponse(); - void waitForCallback(); + void pollAndHandleEvents(int timeout_ms); + + void waitForReadinessCheckCallback(); + + void waitForOperationCallback(); void waitSdlToBeReady(const Namespace& ns); + void waitReadyAck(const std::error_code& error); + void modifyAck(const std::error_code& error); void modifyIfAck(const std::error_code& error, bool status); @@ -78,6 +90,8 @@ namespace shareddatalayer void getAck(const std::error_code& error, const DataMap& dataMap); void findKeysAck(const std::error_code& error, const Keys& keys); + + void handlePendingEvents(); }; }