common/asyncdbupdater.h (28 lines of code) (raw):

#pragma once #include <string> #include <deque> #include <condition_variable> #include "dbconnector.h" #include "table.h" #define MQ_SIZE 100 #define MQ_MAX_RETRY 10 #define MQ_POLL_TIMEOUT (1000) namespace swss { class AsyncDBUpdater { public: AsyncDBUpdater(DBConnector *db, const std::string &tableName); ~AsyncDBUpdater(); void update(std::shared_ptr<KeyOpFieldsValuesTuple> pkco); size_t queueSize(); private: void dbUpdateThread(); volatile bool m_runThread; std::shared_ptr<std::thread> m_dbUpdateThread; std::mutex m_dbUpdateDataQueueMutex; std::condition_variable m_dbUpdateDataNotifyCv; std::queue<std::shared_ptr<KeyOpFieldsValuesTuple>> m_dbUpdateDataQueue; DBConnector *m_db; std::string m_tableName; }; }