Markus Mäkelä 36c960a141
Add helper functions and default parameters
Added some helper functions into the MaxScale class and default parameters
into the connection creation functions. Also made the ip() function const
correct.
2018-03-14 13:02:50 +02:00

268 lines
7.3 KiB
C++

#ifndef MAXSCALES_H
#define MAXSCALES_H
#include "nodes.h"
#include "mariadb_func.h"
#include "mariadb_nodes.h"
class Maxscales: public Nodes
{
public:
enum service
{
RWSPLIT,
READCONN_MASTER,
READCONN_SLAVE
};
Maxscales(const char *pref, const char *test_cwd, bool verbose);
int read_env();
/**
* @brief rwsplit_port RWSplit service port
*/
int rwsplit_port[256];
/**
* @brief readconn_master_port ReadConnection in master mode service port
*/
int readconn_master_port[256];
/**
* @brief readconn_slave_port ReadConnection in slave mode service port
*/
int readconn_slave_port[256];
/**
* @brief Get port number of a MaxScale service
*
* @param type Type of service
* @param m MaxScale instance to use
*
* @return Port number of the service
*/
int port(enum service type = RWSPLIT, int m = 0) const;
/**
* @brief binlog_port binlog router service port
*/
int binlog_port[256];
/**
* @brief conn_rwsplit MYSQL connection struct to RWSplit service
*/
MYSQL *conn_rwsplit[256];
/**
* @brief conn_master MYSQL connection struct to ReadConnection in master mode service
*/
MYSQL *conn_master[256];
/**
* @brief conn_slave MYSQL connection struct to ReadConnection in slave mode service
*/
MYSQL *conn_slave[256];
/**
* @brief routers Array of 3 MYSQL handlers which contains copies of conn_rwsplit, conn_master, conn_slave
*/
MYSQL *routers[256][3];
/**
* @brief ports of 3 int which contains copies of rwsplit_port, readconn_master_port, readconn_slave_port
*/
int ports[256][3];
/**
* @brief maxadmin_Password Password to access Maxadmin tool
*/
char maxadmin_password[256][256];
/**
* @brief maxscale_cnf full name of Maxscale configuration file
*/
char maxscale_cnf[256][4096];
/**
* @brief maxscale_log_dir name of log files directory
*/
char maxscale_log_dir[256][4096];
/**
* @brief maxscale_lbinog_dir name of binlog files (for binlog router) directory
*/
char maxscale_binlog_dir[256][4096];
/**
* @brief N_ports Default number of routers
*/
int N_ports[256];
/**
* @brief test_dir path to test application
*/
char test_dir[4096];
bool ssl;
/**
* @brief ConnectMaxscale Opens connections to RWSplit, ReadConn master and ReadConn slave Maxscale services
* Opens connections to RWSplit, ReadConn master and ReadConn slave Maxscale services
* Connections stored in maxscales->conn_rwsplit[0], maxscales->conn_master[0] and maxscales->conn_slave[0] MYSQL structs
* @return 0 in case of success
*/
int connect_maxscale(int m = 0);
int connect(int m = 0)
{
return connect_maxscale(m);
}
/**
* @brief CloseMaxscaleConn Closes connection that were opened by ConnectMaxscale()
* @return 0
*/
int close_maxscale_connections(int m = 0);
int disconnect(int m = 0)
{
return close_maxscale_connections(m);
}
/**
* @brief ConnectRWSplit Opens connections to RWSplit and store MYSQL struct in maxscales->conn_rwsplit[0]
* @return 0 in case of success
*/
int connect_rwsplit(int m = 0);
/**
* @brief ConnectReadMaster Opens connections to ReadConn master and store MYSQL struct in maxscales->conn_master[0]
* @return 0 in case of success
*/
int connect_readconn_master(int m = 0);
/**
* @brief ConnectReadSlave Opens connections to ReadConn slave and store MYSQL struct in maxscales->conn_slave[0]
* @return 0 in case of success
*/
int connect_readconn_slave(int m = 0);
/**
* @brief OpenRWSplitConn Opens new connections to RWSplit and returns MYSQL struct
* To close connection mysql_close() have to be called
* @return MYSQL struct
*/
MYSQL * open_rwsplit_connection(int m = 0)
{
return open_conn(rwsplit_port[m], IP[m], user_name, password, ssl);
}
/**
* @brief OpenReadMasterConn Opens new connections to ReadConn master and returns MYSQL struct
* To close connection mysql_close() have to be called
* @return MYSQL struct
*/
MYSQL * open_readconn_master_connection(int m = 0)
{
return open_conn(readconn_master_port[m], IP[m], user_name,
password, ssl);
}
/**
* @brief OpenReadSlaveConn Opens new connections to ReadConn slave and returns MYSQL struct
* To close connection mysql_close() have to be called
* @return MYSQL struct
*/
MYSQL * open_readconn_slave_connection(int m = 0)
{
return open_conn(readconn_slave_port[m], IP[m], user_name,
password, ssl);
}
/**
* @brief CloseRWSplit Closes RWplit connections stored in maxscales->conn_rwsplit[0]
*/
void close_rwsplit(int m = 0)
{
mysql_close(conn_rwsplit[m]);
conn_rwsplit[m] = NULL;
}
/**
* @brief CloseReadMaster Closes ReadConn master connections stored in maxscales->conn_master[0]
*/
void close_readconn_master(int m = 0)
{
mysql_close(conn_master[m]);
conn_master[m] = NULL;
}
/**
* @brief CloseReadSlave Closes ReadConn slave connections stored in maxscales->conn_slave[0]
*/
void close_readconn_slave(int m = 0)
{
mysql_close(conn_slave[m]);
conn_slave[m] = NULL;
}
/**
* @brief restart_maxscale Issues 'service maxscale restart' command
*/
int restart_maxscale(int m = 0);
int restart(int m = 0)
{
return restart_maxscale(m);
}
/**
* @brief start_maxscale Issues 'service maxscale start' command
*/
int start_maxscale(int m = 0);
int start(int m = 0)
{
return start_maxscale(m);
}
/**
* @brief stop_maxscale Issues 'service maxscale stop' command
*/
int stop_maxscale(int m = 0);
int stop(int m = 0)
{
return stop_maxscale(m);
}
int execute_maxadmin_command(int m, const char * cmd);
int execute_maxadmin_command_print(int m, const char * cmd);
int check_maxadmin_param(int m, const char *command, const char *param, const char *value);
int get_maxadmin_param(int m, const char *command, const char *param, char *result);
/**
* @brief get_maxscale_memsize Gets size of the memory consumed by Maxscale process
* @return memory size in kilobytes
*/
long unsigned get_maxscale_memsize(int m = 0);
/**
* @brief find_master_maxadmin Tries to find node with 'Master' status using Maxadmin connand 'show server'
* @param nodes Mariadb_nodes object
* @return node index if one master found, -1 if no master found or several masters found
*/
int find_master_maxadmin(Mariadb_nodes * nodes, int m = 0);
int find_slave_maxadmin(Mariadb_nodes * nodes, int m = 0);
/**
* @brief Get the set of labels that are assigned to server @c name
*
* @param name The name of the server that must be present in the output `maxadmin list servers`
*
* @param m Number of Maxscale node
*
* @return A set of string labels assigned to this server
*/
StringSet get_server_status(const char* name, int m = 0);
};
#endif // MAXSCALES_H