102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
/*
|
|
Copyright (C) 2013-2014, MariaDB Corporation Ab
|
|
|
|
This file is distributed as part of the MariaDB Corporation MaxScale. It is free
|
|
software: you can redistribute it and/or modify it under the terms of the
|
|
GNU General Public License as published by the Free Software Foundation,
|
|
version 2.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 51
|
|
Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
Author: Jan Lindström jan.lindstrom@mariadb.com
|
|
|
|
*/
|
|
|
|
#ifndef REPLICATION_LISTENER_MYSQL_GTID_H
|
|
#define REPLICATION_LISTENER_MYSQL_GTID_H
|
|
|
|
#include <boost/asio.hpp>
|
|
#include <boost/function.hpp>
|
|
#include <boost/bind.hpp>
|
|
|
|
namespace mysql
|
|
{
|
|
|
|
template <class T>
|
|
inline std::string gno_to_string (const T& t)
|
|
{
|
|
std::stringstream ss;
|
|
ss << t;
|
|
return ss.str();
|
|
}
|
|
|
|
enum mysql_server_types {
|
|
MYSQL_SERVER_TYPE_NA = 0,
|
|
MYSQL_SERVER_TYPE_MARIADB = 1,
|
|
MYSQL_SERVER_TYPE_MYSQL = 2
|
|
};
|
|
|
|
#define MYSQL_GTID_ENCODED_SIZE 24
|
|
|
|
class Gtid
|
|
{
|
|
public:
|
|
|
|
Gtid()
|
|
: m_real_gtid(false), m_domain_id(0), m_server_id(0), m_sequence_number(0),
|
|
m_server_type(MYSQL_SERVER_TYPE_NA), m_gtid_length(0), m_mariadb_gtid(std::string(""))
|
|
{
|
|
memset(m_mysql_gtid, 0, MYSQL_GTID_ENCODED_SIZE);
|
|
}
|
|
|
|
Gtid(const boost::uint32_t domain_id,
|
|
const boost::uint32_t server_id,
|
|
const boost::uint64_t sequence_number);
|
|
|
|
Gtid(const unsigned char *mysql_gtid,
|
|
const boost::uint64_t gno);
|
|
|
|
Gtid(const unsigned char *mysql_gtid);
|
|
|
|
~Gtid() {}
|
|
|
|
bool is_real_gtid() const { return m_real_gtid;}
|
|
|
|
const unsigned char* get_mysql_gtid() const { return m_mysql_gtid; }
|
|
|
|
const unsigned char* get_gtid() const;
|
|
|
|
size_t get_gtid_length() const { return m_gtid_length; }
|
|
|
|
|
|
std::string get_string() const;
|
|
|
|
boost::uint32_t get_domain_id() const { return m_domain_id; }
|
|
boost::uint32_t get_server_id() const { return m_server_id; }
|
|
boost::uint32_t get_sequence_number() const { return m_sequence_number; }
|
|
|
|
private:
|
|
|
|
bool m_real_gtid;
|
|
mysql_server_types m_server_type;
|
|
|
|
boost::uint32_t m_domain_id;
|
|
boost::uint32_t m_server_id;
|
|
boost::uint64_t m_sequence_number;
|
|
boost::uint32_t m_gtid_length;
|
|
|
|
unsigned char m_mysql_gtid[MYSQL_GTID_ENCODED_SIZE];
|
|
std::string m_mariadb_gtid;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|