
Using the same implementation of the Backend and SessionCommand classes in both schemarouter and readwritesplit will prevent duplication of code. This commit only splits the generic parts of the class to a Backend class which the schemarouter then extends. The session commands for both routers are similar so they require no special handling.
91 lines
2.3 KiB
C++
91 lines
2.3 KiB
C++
#pragma once
|
|
/*
|
|
* Copyright (c) 2016 MariaDB Corporation Ab
|
|
*
|
|
* Use of this software is governed by the Business Source License included
|
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
|
*
|
|
* Change Date: 2020-01-01
|
|
*
|
|
* On the date above, in accordance with the Business Source License, use
|
|
* of this software will be governed by version 2 or later of the General
|
|
* Public License.
|
|
*/
|
|
|
|
#include <maxscale/cppdefs.hh>
|
|
|
|
#include <tr1/memory>
|
|
#include <list>
|
|
#include <string>
|
|
|
|
#include <maxscale/buffer.hh>
|
|
|
|
namespace maxscale
|
|
{
|
|
|
|
class SessionCommand
|
|
{
|
|
SessionCommand(const SessionCommand&);
|
|
SessionCommand& operator=(const SessionCommand&);
|
|
public:
|
|
/**
|
|
* @brief Mark reply as received
|
|
*/
|
|
void mark_reply_received();
|
|
|
|
/**
|
|
* @brief Check if the session command has received a reply
|
|
* @return True if the reply is already received
|
|
*/
|
|
bool is_reply_received() const;
|
|
|
|
/**
|
|
* @brief Get the command type of the session command
|
|
*
|
|
* @return The type of the command
|
|
*/
|
|
uint8_t get_command() const;
|
|
|
|
/**
|
|
* @brief Get the position of this session command
|
|
*
|
|
* @return The position of the session command
|
|
*/
|
|
uint64_t get_position() const;
|
|
|
|
/**
|
|
* @brief Creates a copy of the internal buffer
|
|
* @return A copy of the internal buffer
|
|
*/
|
|
mxs::Buffer copy_buffer() const;
|
|
|
|
/**
|
|
* @brief Create a new session command
|
|
*
|
|
* @param buffer The buffer containing the command. Note that the ownership
|
|
* of @c buffer is transferred to this object.
|
|
* @param id A unique position identifier used to track replies
|
|
*/
|
|
SessionCommand(GWBUF *buffer, uint64_t id);
|
|
|
|
~SessionCommand();
|
|
|
|
/**
|
|
* @brief Debug function for printing session commands
|
|
*
|
|
* @return String representation of the object
|
|
*/
|
|
std::string to_string();
|
|
|
|
private:
|
|
mxs::Buffer m_buffer; /**< The buffer containing the command */
|
|
uint8_t m_command; /**< The command being executed */
|
|
uint64_t m_pos; /**< Unique position identifier */
|
|
bool m_reply_sent; /**< Whether the session command reply has been sent */
|
|
};
|
|
|
|
typedef std::tr1::shared_ptr<SessionCommand> SSessionCommand;
|
|
typedef std::list<SSessionCommand> SessionCommandList;
|
|
|
|
}
|