common/zmqproducerstatetable.h (36 lines of code) (raw):

#pragma once #include <memory> #include <vector> #include <queue> #include <thread> #include <mutex> #include "asyncdbupdater.h" #include "producerstatetable.h" #include "redispipeline.h" #include "table.h" #include "zmqclient.h" namespace swss { class ZmqProducerStateTable : public ProducerStateTable { public: ZmqProducerStateTable(DBConnector *db, const std::string &tableName, ZmqClient &zmqClient, bool dbPersistence = true); ZmqProducerStateTable(RedisPipeline *pipeline, const std::string &tableName, ZmqClient &zmqClient, bool buffered = false, bool dbPersistence = true); /* Implements set() and del() commands using notification messages */ virtual void set(const std::string &key, const std::vector<FieldValueTuple> &values, const std::string &op = SET_COMMAND, const std::string &prefix = EMPTY_PREFIX); virtual void del(const std::string &key, const std::string &op = DEL_COMMAND, const std::string &prefix = EMPTY_PREFIX); // Batched version of set() and del(). virtual void set(const std::vector<KeyOpFieldsValuesTuple> &values); virtual void del(const std::vector<std::string> &keys); // Batched send that can include both SET and DEL requests. virtual void send(const std::vector<KeyOpFieldsValuesTuple> &kcos); size_t dbUpdaterQueueSize(); private: void initialize(DBConnector *db, const std::string &tableName, bool dbPersistence); ZmqClient& m_zmqClient; const std::string m_dbName; const std::string m_tableNameStr; std::unique_ptr<AsyncDBUpdater> m_asyncDBUpdater; }; }