X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=include%2Fprivate%2Fsyncstorageimpl.hpp;h=f67009d7bdb2f02ff935fc44b069f0c41263a6d7;hb=63869e10ac4d8572238989e1b582c0314da91f9c;hp=db762e050bbc1aa7760423fd898523e585e67bce;hpb=a0745d294dcd72f7d78ea4c3accd3b477dd668a5;p=ric-plt%2Fsdl.git diff --git a/include/private/syncstorageimpl.hpp b/include/private/syncstorageimpl.hpp index db762e0..f67009d 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,56 @@ namespace shareddatalayer SyncStorageImpl(std::unique_ptr asyncStorage, System& system); - void set(const Namespace& ns, const DataMap& dataMap) override; + virtual void waitReady(const Namespace& ns, const std::chrono::steady_clock::duration& timeout) 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; + + virtual bool setIfNotExists(const Namespace& ns, const Key& key, const Data& data) override; + + virtual DataMap get(const Namespace& ns, const Keys& keys) override; - bool setIf(const Namespace& ns, const Key& key, const Data& oldData, const Data& newData) override; + virtual void remove(const Namespace& ns, const Keys& keys) override; - bool setIfNotExists(const Namespace& ns, const Key& key, const Data& data) override; + virtual bool removeIf(const Namespace& ns, const Key& key, const Data& data) override; - DataMap get(const Namespace& ns, const Keys& keys) override; + virtual Keys findKeys(const Namespace& ns, const std::string& keyPrefix) override; - void remove(const Namespace& ns, const Keys& keys) override; + virtual Keys listKeys(const Namespace& ns, const std::string& pattern) override; - bool removeIf(const Namespace& ns, const Key& key, const Data& data) override; + virtual void removeAll(const Namespace& ns) override; - Keys findKeys(const Namespace& ns, const std::string& keyPrefix) override; + virtual void setOperationTimeout(const std::chrono::steady_clock::duration& timeout) override; - void removeAll(const Namespace& ns) 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(const std::chrono::steady_clock::duration& timeout); + + void waitForOperationCallback(); void waitSdlToBeReady(const Namespace& ns); + void waitSdlToBeReady(const Namespace& ns, const std::chrono::steady_clock::duration& timeout); + + 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 +96,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(); }; }