common/redistran.h (24 lines of code) (raw):
#pragma once
#include <system_error>
#include <deque>
#include "dbconnector.h"
#include "rediscommand.h"
#include "logger.h"
namespace swss {
class RedisTransactioner {
public:
RedisTransactioner(DBConnector *db);
~RedisTransactioner();
/* Start a transaction */
void multi();
/* Execute a transaction and get results */
bool exec();
/* Send a command within a transaction */
void enqueue(const std::string& command, int expectedType);
void enqueue(const RedisCommand& command, int expectedType);
redisReply *dequeueReply();
protected:
DBConnector *m_db;
private:
/* Remember the expected results for the transaction */
std::deque<int> m_expectedResults;
std::deque<redisReply *> m_results;
void clearResults();
};
}