MXS-1840 Compile all routers as C++

Minimal changes, only what is needed in order to make it compile.
This commit is contained in:
Johan Wikman
2018-05-03 15:53:17 +03:00
parent 10b2b4ac37
commit 1f6cc6db8a
39 changed files with 476 additions and 427 deletions

View File

@ -1,10 +1,10 @@
add_library(binlogrouter SHARED blr.c blr_master.c blr_cache.c blr_slave.c blr_file.c)
add_library(binlogrouter SHARED blr.cc blr_master.cc blr_cache.cc blr_slave.cc blr_file.cc)
set_target_properties(binlogrouter PROPERTIES INSTALL_RPATH ${CMAKE_INSTALL_RPATH}:${MAXSCALE_LIBDIR} VERSION "2.0.0")
set_target_properties(binlogrouter PROPERTIES LINK_FLAGS -Wl,-z,defs)
target_link_libraries(binlogrouter maxscale-common ${PCRE_LINK_FLAGS} uuid)
install_module(binlogrouter core)
add_executable(maxbinlogcheck maxbinlogcheck.c blr_file.c blr_cache.c blr_master.c blr_slave.c blr.c)
add_executable(maxbinlogcheck maxbinlogcheck.cc blr_file.cc blr_cache.cc blr_master.cc blr_slave.cc blr.cc)
target_link_libraries(maxbinlogcheck maxscale-common ${PCRE_LINK_FLAGS} uuid)
install_executable(maxbinlogcheck core)

View File

@ -43,7 +43,7 @@
*/
int blr_file_get_next_binlogname(const char *binlog_name)
{
char *sptr;
const char *sptr;
int filenum;
if ((sptr = strrchr(binlog_name, '.')) == NULL)
@ -72,7 +72,7 @@ bool binlog_next_file_exists(const char* binlogdir, const char* binlog)
if (filenum)
{
char *sptr = strrchr(binlog, '.');
const char *sptr = strrchr(binlog, '.');
if (sptr)
{

View File

@ -135,7 +135,7 @@ static const MXS_ENUM_VALUE binlog_storage_values[] =
*
* @return The module object
*/
MXS_MODULE* MXS_CREATE_MODULE()
extern "C" MXS_MODULE* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise binlog router module.");
spinlock_init(&instlock);
@ -810,7 +810,8 @@ createInstance(SERVICE *service, char **options)
}
/* Allocate SSL struct for backend connection */
if ((ssl_cfg = MXS_CALLOC(1, sizeof(SSL_LISTENER))) == NULL)
if ((ssl_cfg =
static_cast<SSL_LISTENER*>(MXS_CALLOC(1, sizeof(SSL_LISTENER)))) == NULL)
{
MXS_ERROR("%s: Error allocating memory for SSL struct in createInstance",
inst->service->name);
@ -1236,7 +1237,7 @@ newSession(MXS_ROUTER *instance, MXS_SESSION *session)
CHK_CLIENT_RSES(slave);
return (void *)slave;
return reinterpret_cast<MXS_ROUTER_SESSION*>(slave);
}
/**
@ -1417,7 +1418,7 @@ routeQuery(MXS_ROUTER *instance, MXS_ROUTER_SESSION *router_session, GWBUF *queu
return blr_slave_request(router, slave, queue);
}
static char *event_names[] =
static const char *event_names[] =
{
"Invalid", "Start Event V3", "Query Event", "Stop Event", "Rotate Event",
"Integer Session Variable", "Load Event", "Slave Event", "Create File Event",
@ -1433,7 +1434,7 @@ static char *event_names[] =
};
/* New MariaDB event numbers starts from 0xa0 */
static char *event_names_mariadb10[] =
static const char *event_names_mariadb10[] =
{
"Annotate Rows Event",
/* New MariaDB 10.x event numbers */
@ -1641,7 +1642,7 @@ diagnostics(MXS_ROUTER *router, DCB *dcb)
}
else
{
char *ptr = NULL;
const char *ptr = NULL;
if (router_inst->lastEventReceived <= MAX_EVENT_TYPE)
{
ptr = event_names[router_inst->lastEventReceived];
@ -2061,7 +2062,7 @@ static json_t* diagnostics_json(const MXS_ROUTER *router)
}
else
{
char *ptr = NULL;
const char *ptr = NULL;
if (router_inst->lastEventReceived <= MAX_EVENT_TYPE)
{
ptr = event_names[router_inst->lastEventReceived];
@ -2623,7 +2624,7 @@ blr_send_custom_error(DCB *dcb,
int packet_number,
int affected_rows,
const char *msg,
char *statemsg,
const char *statemsg,
unsigned int errcode)
{
uint8_t *outbuf = NULL;
@ -2967,10 +2968,10 @@ static int blr_check_binlog(ROUTER_INSTANCE *router)
* @param router The router instance
* @return The event description or NULL
*/
char *
const char *
blr_last_event_description(ROUTER_INSTANCE *router)
{
char *event_desc = NULL;
const char *event_desc = NULL;
if (!router->mariadb10_compat)
{
@ -3006,10 +3007,10 @@ blr_last_event_description(ROUTER_INSTANCE *router)
* @param event The current event
* @return The event description or NULL
*/
char *
const char *
blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event)
{
char *event_desc = NULL;
const char *event_desc = NULL;
if (!router->mariadb10_compat)
{

View File

@ -473,6 +473,23 @@ typedef enum blr_thread_role
r == BLR_THREAD_ROLE_MASTER_NOTRX ? "master (no trx)" : \
r == BLR_THREAD_ROLE_MASTER_TRX ? "master (trx)" : "slave"
/**
* Binlog encryption context of slave binlog file
*/
typedef struct slave_encryption_ctx
{
uint8_t binlog_crypto_scheme; /**< Encryption scheme */
uint32_t binlog_key_version; /**< Encryption key version */
uint8_t nonce[AES_BLOCK_SIZE]; /**< nonce (random bytes) of current binlog.
* These bytes + the binlog event current pos
* form the encrryption IV for the event */
char *log_file; /**< The log file the client has requested */
uint32_t first_enc_event_pos; /**< The position of first encrypted event
* It's the first event afte Start_encryption_event
* which is after FDE */
} SLAVE_ENCRYPTION_CTX;
/**
* The client session structure used within this router. This represents
* the slaves that are replicating binlogs from MaxScale.
@ -525,7 +542,7 @@ typedef struct router_slave
/*< Which binlog file */
uint32_t lsi_binlog_pos;
/*< What position */
void *encryption_ctx;
SLAVE_ENCRYPTION_CTX *encryption_ctx;
/*< Encryption context */
bool gtid_strict_mode;
/*< MariaDB 10 Slave sets gtid_strict_mode */
@ -631,6 +648,20 @@ typedef struct pending_transaction
*/
} PENDING_TRANSACTION;
/**
* Binlog encryption context of binlog file
*/
typedef struct binlog_encryption_ctx
{
uint8_t binlog_crypto_scheme; /**< Encryption scheme */
uint32_t binlog_key_version; /**< Encryption key version */
uint8_t nonce[AES_BLOCK_SIZE]; /**< nonce (random bytes) of current binlog.
* These bytes + the binlog event current pos
* form the encrryption IV for the event */
char *binlog_file; /**< Current binlog file being encrypted */
} BINLOG_ENCRYPTION_CTX;
/**
* The per instance data for the router.
*/
@ -718,7 +749,7 @@ typedef struct router_instance
bool request_semi_sync; /*< Request Semi-Sync replication to master */
int master_semi_sync; /*< Semi-Sync replication status of master server */
BINLOG_ENCRYPTION_SETUP encryption; /*< Binlog encryption setup */
void *encryption_ctx; /*< Encryption context */
BINLOG_ENCRYPTION_CTX *encryption_ctx; /*< Encryption context */
char last_mariadb_gtid[GTID_MAX_LEN + 1];
/*< Last seen MariaDB 10 GTID */
bool mariadb10_gtid; /*< Save received MariaDB GTIDs into repo.
@ -735,37 +766,6 @@ typedef struct router_instance
struct router_instance *next;
} ROUTER_INSTANCE;
/**
* Binlog encryption context of slave binlog file
*/
typedef struct slave_encryption_ctx
{
uint8_t binlog_crypto_scheme; /**< Encryption scheme */
uint32_t binlog_key_version; /**< Encryption key version */
uint8_t nonce[AES_BLOCK_SIZE]; /**< nonce (random bytes) of current binlog.
* These bytes + the binlog event current pos
* form the encrryption IV for the event */
char *log_file; /**< The log file the client has requested */
uint32_t first_enc_event_pos; /**< The position of first encrypted event
* It's the first event afte Start_encryption_event
* which is after FDE */
} SLAVE_ENCRYPTION_CTX;
/**
* Binlog encryption context of binlog file
*/
typedef struct binlog_encryption_ctx
{
uint8_t binlog_crypto_scheme; /**< Encryption scheme */
uint32_t binlog_key_version; /**< Encryption key version */
uint8_t nonce[AES_BLOCK_SIZE]; /**< nonce (random bytes) of current binlog.
* These bytes + the binlog event current pos
* form the encrryption IV for the event */
char *binlog_file; /**< Current binlog file being encrypted */
} BINLOG_ENCRYPTION_CTX;
/**
* Holds information about:
* truncating a corrupted file
@ -848,7 +848,7 @@ typedef struct binlog_pos_fix
#define BLRM_MAXSTATE 0x0023
static char *blrm_states[] =
static const char *blrm_states[] =
{
"Unconfigured",
"Unconnected",
@ -896,7 +896,7 @@ static char *blrm_states[] =
#define BLRS_MAXSTATE 0x0004
static char *blrs_states[] =
static const char *blrs_states[] =
{
"Created",
"Unregistered",
@ -987,7 +987,7 @@ extern int blr_send_custom_error(DCB *,
int,
int,
const char *,
char *,
const char *,
unsigned int);
extern int blr_file_next_exists(ROUTER_INSTANCE *,
ROUTER_SLAVE *,
@ -996,10 +996,10 @@ uint32_t extract_field(uint8_t *src, int bits);
void blr_cache_read_master_data(ROUTER_INSTANCE *router);
int blr_read_events_all_events(ROUTER_INSTANCE *, BINLOG_FILE_FIX *, int);
int blr_save_dbusers(const ROUTER_INSTANCE *router);
char *blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event);
const char *blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event);
void blr_file_append(ROUTER_INSTANCE *router, char *file);
void blr_cache_response(ROUTER_INSTANCE *router, char *response, GWBUF *buf);
char * blr_last_event_description(ROUTER_INSTANCE *router);
const char *blr_last_event_description(ROUTER_INSTANCE *router);
void blr_free_ssl_data(ROUTER_INSTANCE *inst);
extern bool blr_send_event(blr_thread_role_t role,

View File

@ -130,7 +130,7 @@ static const char blr_encryption_algorithm_list_names[] = "aes_cbc";
#endif
static int blr_file_create(ROUTER_INSTANCE *router, char *file);
static void blr_log_header(int priority, char *msg, uint8_t *ptr);
static void blr_log_header(int priority, const char *msg, uint8_t *ptr);
void blr_cache_read_master_data(ROUTER_INSTANCE *router);
int blr_file_get_next_binlogname(ROUTER_INSTANCE *router);
int blr_file_new_binlog(ROUTER_INSTANCE *router, char *file);
@ -737,7 +737,7 @@ blr_write_binlog_record(ROUTER_INSTANCE *router,
}
/* Check write operation result*/
if (n != size)
if (n != static_cast<int>(size))
{
MXS_ERROR("%s: Failed to write binlog record at %lu of %s, %s. "
"Truncating to previous record.",
@ -1275,7 +1275,7 @@ blr_read_binlog(ROUTER_INSTANCE *router,
&data[BINLOG_EVENT_HDR_LEN],
hdr->event_size - BINLOG_EVENT_HDR_LEN,
pos + BINLOG_EVENT_HDR_LEN))
!= hdr->event_size - BINLOG_EVENT_HDR_LEN) // Read the balance
!= static_cast<ssize_t>(hdr->event_size - BINLOG_EVENT_HDR_LEN)) // Read the balance
{
if (n == 0)
{
@ -1447,7 +1447,7 @@ blr_close_binlog(ROUTER_INSTANCE *router, BLFILE *file)
* @param ptr The event header raw data
*/
static void
blr_log_header(int priority, char *msg, uint8_t *ptr)
blr_log_header(int priority, const char *msg, uint8_t *ptr)
{
char buf[400], *bufp;
int i;
@ -1551,7 +1551,7 @@ blr_cache_response(ROUTER_INSTANCE *router, char *response, GWBUF *buf)
* @return A pointer to a GWBUF structure
*/
GWBUF *
blr_cache_read_response(ROUTER_INSTANCE *router, char *response)
blr_cache_read_response(ROUTER_INSTANCE *router, const char *response)
{
static const char CACHE[] = "/cache";
size_t len = strlen(router->binlogdir) +
@ -2127,10 +2127,11 @@ blr_read_events_all_events(ROUTER_INSTANCE *router,
memcpy(data, hdbuf, BINLOG_EVENT_HDR_LEN);// Copy the header in
/* Read event data */
if ((n = pread(router->binlog_fd,
&data[BINLOG_EVENT_HDR_LEN],
hdr.event_size - BINLOG_EVENT_HDR_LEN,
pos + BINLOG_EVENT_HDR_LEN)) != hdr.event_size - BINLOG_EVENT_HDR_LEN)
n = pread(router->binlog_fd,
&data[BINLOG_EVENT_HDR_LEN],
hdr.event_size - BINLOG_EVENT_HDR_LEN,
pos + BINLOG_EVENT_HDR_LEN);
if (n != static_cast<ssize_t>(hdr.event_size - BINLOG_EVENT_HDR_LEN))
{
if (n == -1)
{
@ -2359,7 +2360,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router,
if ((debug & BLR_REPORT_REP_HEADER))
{
char *event_desc = blr_get_event_description(router, hdr.event_type);
const char *event_desc = blr_get_event_description(router, hdr.event_type);
MXS_DEBUG("%8s==== Event Header ====\n%39sEvent Pos %lu\n%39sEvent time %lu\n%39s"
"Event size %lu\n%39sEvent Type %u (%s)\n%39s"
"Server Id %lu\n%39sNextPos %lu\n%39sFlags %u",
@ -2392,7 +2393,9 @@ blr_read_events_all_events(ROUTER_INSTANCE *router,
{
char nonce_hex[AES_BLOCK_SIZE * 2 + 1] = "";
START_ENCRYPTION_EVENT ste_event = {};
BINLOG_ENCRYPTION_CTX *new_encryption_ctx = MXS_CALLOC(1, sizeof(BINLOG_ENCRYPTION_CTX));
void *mem = MXS_CALLOC(1, sizeof(BINLOG_ENCRYPTION_CTX));
BINLOG_ENCRYPTION_CTX *new_encryption_ctx =
static_cast<BINLOG_ENCRYPTION_CTX*>(mem);
if (new_encryption_ctx == NULL)
{
@ -2516,7 +2519,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router,
action->pos > 4 &&
(pos == action->pos || replace_trx_events))
{
char *event_desc = blr_get_event_description(router, hdr.event_type);
const char *event_desc = blr_get_event_description(router, hdr.event_type);
if (action->replace_trx && !replace_trx_events)
{
@ -2742,7 +2745,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router,
BINLOG_EVENT_HDR_LEN -
(4 + 4 + 1 + 2 + 2 + var_block_len + 1 + db_name_len);
statement_sql = MXS_CALLOC(1, statement_len + 1);
statement_sql = static_cast<char*>(MXS_CALLOC(1, statement_len + 1));
if (statement_sql)
{
memcpy(statement_sql,
@ -3114,7 +3117,7 @@ blr_file_new_binlog(ROUTER_INSTANCE *router, char *file)
int
blr_file_write_master_config(ROUTER_INSTANCE *router, char *error)
{
char *section = "binlog_configuration";
const char *section = "binlog_configuration";
FILE *config_file;
int rc;
static const char MASTER_INI[] = "master.ini";
@ -3233,7 +3236,7 @@ blr_print_binlog_details(ROUTER_INSTANCE *router,
{
char buf_t[40];
struct tm tm_t;
char *event_desc;
const char *event_desc;
/* First Event */
localtime_r(&first_event.event_time, &tm_t);
@ -3291,7 +3294,7 @@ blr_create_ignorable_event(uint32_t event_size,
}
// Allocate space for event: size might contain the 4 crc32
new_event = MXS_CALLOC(1, event_size);
new_event = static_cast<uint8_t*>(MXS_CALLOC(1, event_size));
if (new_event == NULL)
{
return NULL;
@ -3343,7 +3346,7 @@ blr_write_special_event(ROUTER_INSTANCE *router,
{
int n;
uint8_t *new_event;
char *new_event_desc;
const char *new_event_desc;
switch (type)
{
@ -3417,7 +3420,7 @@ blr_write_special_event(ROUTER_INSTANCE *router,
if ((n = pwrite(router->binlog_fd,
new_event,
event_size,
router->last_written)) != event_size)
router->last_written)) != static_cast<ssize_t>(event_size))
{
MXS_ERROR("%s: Failed to write %s special binlog record at %lu of %s, %s. "
"Truncating to previous record.",
@ -3476,7 +3479,8 @@ blr_create_start_encryption_event(ROUTER_INSTANCE *router,
{
uint8_t *new_event;
uint8_t event_size = sizeof(START_ENCRYPTION_EVENT);
BINLOG_ENCRYPTION_CTX *new_encryption_ctx = MXS_CALLOC(1, sizeof(BINLOG_ENCRYPTION_CTX));
BINLOG_ENCRYPTION_CTX *new_encryption_ctx =
static_cast<BINLOG_ENCRYPTION_CTX*>(MXS_CALLOC(1, sizeof(BINLOG_ENCRYPTION_CTX)));
if (new_encryption_ctx == NULL)
{
@ -3489,7 +3493,7 @@ blr_create_start_encryption_event(ROUTER_INSTANCE *router,
event_size += BINLOG_EVENT_CRC_SIZE;
}
new_event = MXS_CALLOC(1, event_size);
new_event = static_cast<uint8_t*>(MXS_CALLOC(1, event_size));
if (new_event == NULL)
{
return NULL;
@ -3891,7 +3895,7 @@ static int blr_aes_create_tail_for_cbc(uint8_t *output,
*
* Note: this also works for decryption
*/
for (int i = 0; i < in_size; i++)
for (uint32_t i = 0; i < in_size; i++)
{
output[i] = input[i] ^ mask[i];
}
@ -4253,7 +4257,7 @@ bool blr_fetch_mariadb_gtid(ROUTER_SLAVE *slave,
unsigned int
blr_file_get_next_seqno(const char *filename)
{
char *sptr;
const char *sptr;
int filenum;
if ((sptr = strrchr(filename, '.')) == NULL)
@ -4486,7 +4490,7 @@ bool blr_compare_binlogs(const ROUTER_INSTANCE *router,
{
// domain_id, server_id and strcmp()
return ((router->mariadb10_gtid_domain == info->domain_id) &&
(router->orig_masterid == info->server_id) &&
(router->orig_masterid == static_cast<int>(info->server_id)) &&
strcmp(r_file, s_file) == 0);
}
}

View File

@ -58,12 +58,13 @@ static GWBUF *blr_make_binlog_dump(ROUTER_INSTANCE *router);
void encode_value(unsigned char *data, unsigned int value, int len);
void blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt);
static int blr_rotate_event(ROUTER_INSTANCE *router, uint8_t *pkt, REP_HEADER *hdr);
static void *CreateMySQLAuthData(char *username, char *password, char *database);
static void *CreateMySQLAuthData(const char *username,
const char *password,
const char *database);
void blr_extract_header(uint8_t *pkt, REP_HEADER *hdr);
static void blr_log_packet(int priority, char *msg, uint8_t *ptr, int len);
static void blr_log_packet(int priority, const char *msg, uint8_t *ptr, int len);
void blr_master_close(ROUTER_INSTANCE *);
char *blr_extract_column(GWBUF *buf, int col);
void poll_fake_write_event(DCB *dcb);
static bool blr_check_last_master_event(void *inst);
extern int blr_check_heartbeat(ROUTER_INSTANCE *router);
static void blr_log_identity(ROUTER_INSTANCE *router);
@ -354,7 +355,7 @@ static void worker_cb_close_master(int worker_id, void* data)
// This is itended to be called only in the main worker.
ss_dassert(worker_id == 0);
blr_master_close(data);
blr_master_close(static_cast<ROUTER_INSTANCE*>(data));
}
/**
@ -629,7 +630,7 @@ blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf)
{
MXS_FREE(router->m_errmsg);
}
router->m_errmsg = msg_err ? msg_err : "(memory failure)";
router->m_errmsg = msg_err ? msg_err : MXS_STRDUP("(memory failure)");
router->active_logs = 0;
if (router->reconnect_pending)
@ -927,7 +928,7 @@ blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt)
if (len < BINLOG_EVENT_HDR_LEN && router->master_event_state != BLR_EVENT_ONGOING)
{
char *event_msg = "unknown";
const char *event_msg = "unknown";
/* Packet is too small to be a binlog event */
if (ptr[4] == 0xfe) /* EOF Packet */
@ -1242,7 +1243,8 @@ blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt)
statement_len = len - (MYSQL_HEADER_LEN + 1 + BINLOG_EVENT_HDR_LEN + 4 + 4 + 1 + 2 + 2 \
+ var_block_len + 1 + db_name_len);
statement_sql = MXS_CALLOC(1, statement_len + 1);
statement_sql =
static_cast<char*>(MXS_CALLOC(1, statement_len + 1));
MXS_ABORT_IF_NULL(statement_sql);
memcpy(statement_sql,
(char *)ptr + MYSQL_HEADER_LEN + 1 + BINLOG_EVENT_HDR_LEN + 4 + 4 + 1 + 2 + 2 \
@ -1694,7 +1696,7 @@ blr_rotate_event(ROUTER_INSTANCE *router, uint8_t *ptr, REP_HEADER *hdr)
* This doesn't really belong here and should be moved at some stage.
*/
static void *
CreateMySQLAuthData(char *username, char *password, char *database)
CreateMySQLAuthData(const char *username, const char *password, const char *database)
{
MYSQL_session *auth_info;
@ -1718,7 +1720,8 @@ CreateMySQLAuthData(char *username, char *password, char *database)
return NULL;
}
if ((auth_info = MXS_CALLOC(1, sizeof(MYSQL_session))) == NULL)
if ((auth_info =
static_cast<MYSQL_session*>(MXS_CALLOC(1, sizeof(MYSQL_session)))) == NULL)
{
return NULL;
}
@ -1747,7 +1750,7 @@ typedef enum
* @param len Length of message packet
*/
static void
blr_log_packet(int priority, char *msg, uint8_t *ptr, int len)
blr_log_packet(int priority, const char *msg, uint8_t *ptr, int len)
{
char buf[400] = "";
char *bufp;
@ -1851,7 +1854,7 @@ blr_extract_column(GWBUF *buf, int col)
ptr += collen;
}
collen = *ptr++;
if ((rval = MXS_MALLOC(collen + 1)) == NULL)
if ((rval = static_cast<char*>(MXS_MALLOC(collen + 1))) == NULL)
{
return NULL;
}
@ -1976,7 +1979,7 @@ int
blr_check_heartbeat(ROUTER_INSTANCE *router)
{
time_t t_now = time(0);
char *event_desc = NULL;
const char *event_desc = NULL;
if (router->master_state != BLRM_BINLOGDUMP)
{
@ -1988,7 +1991,8 @@ blr_check_heartbeat(ROUTER_INSTANCE *router)
if (router->master_state == BLRM_BINLOGDUMP &&
router->lastEventReceived > 0)
{
if ((t_now - router->stats.lastReply) > (router->heartbeat + BLR_NET_LATENCY_WAIT_TIME))
if (static_cast<unsigned long>(t_now - router->stats.lastReply) >
(router->heartbeat + BLR_NET_LATENCY_WAIT_TIME))
{
MXS_ERROR("No event received from master [%s]:%d in heartbeat period (%lu seconds), "
"last event (%s %d) received %lu seconds ago. Assuming connection is dead "
@ -2097,7 +2101,7 @@ blr_write_data_into_binlog(ROUTER_INSTANCE *router, uint32_t data_len, uint8_t *
int n;
if ((n = pwrite(router->binlog_fd, buf, data_len,
router->last_written)) != data_len)
router->last_written)) != static_cast<int64_t>(data_len))
{
MXS_ERROR("%s: Failed to write binlog record at %lu of %s, %s. "
"Truncating to previous record.",

View File

@ -69,27 +69,27 @@
#include "blr.h"
#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <maxscale/maxscale.h>
#include <maxscale/service.h>
#include <maxscale/server.h>
#include <maxscale/router.h>
#include <maxscale/atomic.h>
#include <maxscale/spinlock.h>
#include <maxscale/dcb.h>
#include <maxscale/spinlock.h>
#include <maxscale/housekeeper.h>
#include <sys/stat.h>
#include <maxscale/log_manager.h>
#include <maxscale/version.h>
#include <zlib.h>
#include <maxscale/alloc.h>
#include <inttypes.h>
#include <maxscale/utils.h>
#include <maxscale/atomic.h>
#include <maxscale/clock.h>
#include <maxscale/dcb.h>
#include <maxscale/housekeeper.h>
#include <maxscale/log_manager.h>
#include <maxscale/maxscale.h>
#include <maxscale/poll.h>
#include <maxscale/router.h>
#include <maxscale/server.h>
#include <maxscale/service.h>
#include <maxscale/spinlock.h>
#include <maxscale/utils.h>
#include <maxscale/version.h>
/**
* This struct is used by sqlite3_exec callback routine
@ -118,7 +118,6 @@ typedef enum
SLAVE_EOF_ERROR
} slave_eof_action_t;
extern void poll_fake_write_event(DCB *dcb);
static char* get_next_token(char *str, const char* delim, char **saveptr);
extern int load_mysql_users(SERV_LISTENER *listener);
extern void blr_master_close(ROUTER_INSTANCE* router);
@ -137,7 +136,7 @@ static int blr_slave_replay(ROUTER_INSTANCE *router,
GWBUF *master);
static void blr_slave_send_error(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *msg);
const char *msg);
static int blr_slave_send_timestamp(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave);
static int blr_slave_register(ROUTER_INSTANCE *router,
@ -199,9 +198,9 @@ static int blr_stop_slave(ROUTER_INSTANCE* router,
static int blr_start_slave(ROUTER_INSTANCE* router,
ROUTER_SLAVE* slave);
static void blr_slave_send_error_packet(ROUTER_SLAVE *slave,
char *msg,
const char *msg,
unsigned int err_num,
char *status);
const char *status);
static int blr_handle_change_master(ROUTER_INSTANCE* router,
char *command,
char *error);
@ -237,17 +236,17 @@ static int blr_handle_change_master_token(char *input,
static void blr_master_free_parsed_options(CHANGE_MASTER_OPTIONS *options);
static int blr_slave_send_var_value(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type);
static int blr_slave_send_variable(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type);
static int blr_slave_send_columndef_with_info_schema(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *name,
const char *name,
int type,
int len,
uint8_t seqno);
@ -262,20 +261,20 @@ static int blr_slave_handle_variables(ROUTER_INSTANCE *router,
char *stmt);
static int blr_slave_send_warning_message(ROUTER_INSTANCE* router,
ROUTER_SLAVE* slave,
char *message);
const char *message);
static int blr_slave_show_warnings(ROUTER_INSTANCE* router,
ROUTER_SLAVE* slave);
static int blr_slave_send_status_variable(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type);
static int blr_slave_handle_status_variables(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *stmt);
static int blr_slave_send_columndef_with_status_schema(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *name,
const char *name,
int type,
int len,
uint8_t seqno);
@ -610,11 +609,10 @@ static int
blr_slave_query(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue)
{
char *qtext, *query_text;
char *sep = " ,=";
const char *sep = " ,=";
char *word, *brkb;
int query_len;
char *ptr;
extern char *strcasestr();
bool unexpected = true;
qtext = (char*)GWBUF_DATA(queue);
@ -816,7 +814,7 @@ blr_slave_replay(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *master)
* @param msg The error message to send
*/
static void
blr_slave_send_error(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *msg)
blr_slave_send_error(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, const char *msg)
{
GWBUF *pkt;
unsigned char *data;
@ -2480,8 +2478,9 @@ blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, bool large)
{
/* read it, set slave & file context */
uint8_t *record_ptr = GWBUF_DATA(record);
void *mem = MXS_CALLOC(1, sizeof(SLAVE_ENCRYPTION_CTX));
SLAVE_ENCRYPTION_CTX *encryption_ctx;
encryption_ctx = MXS_CALLOC(1, sizeof(SLAVE_ENCRYPTION_CTX));
encryption_ctx = static_cast<SLAVE_ENCRYPTION_CTX*>(mem);
MXS_ABORT_IF_NULL(encryption_ctx);
record_ptr += BINLOG_EVENT_HDR_LEN;
@ -3209,7 +3208,7 @@ blr_slave_fake_rotate(ROUTER_INSTANCE *router,
BLFILE** filep,
const char *new_file)
{
char *sptr;
const char *sptr;
int filenum;
GWBUF *r_event;
MARIADB_GTID_INFO *f_tree = router->storage_type == BLR_BINLOG_STORAGE_TREE ?
@ -4139,15 +4138,15 @@ blr_start_slave(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave)
*/
static void
blr_slave_send_error_packet(ROUTER_SLAVE *slave,
char *msg,
const char *msg,
unsigned int err_num,
char *status)
const char *status)
{
GWBUF *pkt;
unsigned char *data;
int len;
unsigned int mysql_errno = 0;
char *mysql_state;
const char *mysql_state;
if ((pkt = gwbuf_alloc(strlen(msg) + 13)) == NULL)
{
@ -5060,7 +5059,7 @@ blr_parse_change_master_command(char *input,
char *error_string,
CHANGE_MASTER_OPTIONS *config)
{
char *sep = ",";
const char *sep = ",";
char *word, *brkb;
if ((word = get_next_token(input, sep, &brkb)) == NULL)
@ -5111,7 +5110,7 @@ blr_handle_change_master_token(char *input,
CHANGE_MASTER_OPTIONS *config)
{
/* space+TAB+= */
char *sep = " \t=";
const char *sep = " \t=";
char *word, *brkb;
char *value = NULL;
char **option_field = NULL;
@ -5172,7 +5171,7 @@ blr_get_parsed_command_value(char *input)
strcpy(value, input);
/* space+TAB+= */
char *sep = " \t=";
const char *sep = " \t=";
char *word;
if ((word = get_next_token(NULL, sep, &input)) != NULL)
@ -5330,8 +5329,8 @@ blr_master_free_parsed_options(CHANGE_MASTER_OPTIONS *options)
static int
blr_slave_send_var_value(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type)
{
GWBUF *pkt;
@ -5384,8 +5383,8 @@ blr_slave_send_var_value(ROUTER_INSTANCE *router,
static int
blr_slave_send_variable(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type)
{
GWBUF *pkt;
@ -5475,7 +5474,7 @@ blr_slave_send_variable(ROUTER_INSTANCE *router,
static int
blr_slave_send_columndef_with_info_schema(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *name,
const char *name,
int type,
int len,
uint8_t seqno)
@ -5616,7 +5615,7 @@ blr_slave_handle_variables(ROUTER_INSTANCE *router,
char *brkb;
char *word;
/* SPACE,TAB,= */
char *sep = " ,=";
const char *sep = " ,=";
if ((word = strtok_r(stmt, sep, &brkb)) == NULL)
{
@ -5696,7 +5695,7 @@ blr_slave_handle_variables(ROUTER_INSTANCE *router,
static int
blr_slave_send_warning_message(ROUTER_INSTANCE* router,
ROUTER_SLAVE* slave,
char *message)
const char *message)
{
GWBUF *pkt;
uint8_t *ptr;
@ -5764,7 +5763,7 @@ blr_slave_show_warnings(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave)
/* check whether a warning message is available */
if (slave->warning_msg)
{
char *level = "Warning";
const char *level = "Warning";
char *msg_ptr;
char err_code[16 + 1] = "";
msg_ptr = strchr(slave->warning_msg, ':');
@ -5855,7 +5854,7 @@ blr_slave_handle_status_variables(ROUTER_INSTANCE *router,
char *brkb = NULL;
char *word = NULL;
/* SPACE,TAB,= */
char *sep = " ,=";
const char *sep = " ,=";
if ((word = strtok_r(stmt, sep, &brkb)) == NULL)
{
@ -5913,8 +5912,8 @@ blr_slave_handle_status_variables(ROUTER_INSTANCE *router,
static int
blr_slave_send_status_variable(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *variable,
char *value,
const char *variable,
const char *value,
int column_type)
{
GWBUF *pkt;
@ -6009,7 +6008,7 @@ blr_slave_send_status_variable(ROUTER_INSTANCE *router,
static int
blr_slave_send_columndef_with_status_schema(ROUTER_INSTANCE *router,
ROUTER_SLAVE *slave,
char *name,
const char *name,
int type,
int len,
uint8_t seqno)
@ -6022,7 +6021,7 @@ blr_slave_send_columndef_with_status_schema(ROUTER_INSTANCE *router,
int column_name_len = strlen(name);
int orig_column_name_len = strlen("VARIABLE_NAME");
int packet_data_len = 0;
char *ptr_name_start = name;
const char *ptr_name_start = name;
if (strcasecmp(ptr_name_start, "value") == 0)
{
@ -6308,7 +6307,8 @@ blr_set_master_ssl(ROUTER_INSTANCE *router,
else
{
/* Allocate SSL struct for backend connection */
if ((server_ssl = MXS_CALLOC(1, sizeof(SSL_LISTENER))) == NULL)
server_ssl = static_cast<SSL_LISTENER*>(MXS_CALLOC(1, sizeof(SSL_LISTENER)));
if (server_ssl == NULL)
{
router->ssl_enabled = false;
@ -6481,8 +6481,9 @@ blr_slave_read_ste(ROUTER_INSTANCE *router,
if (hdr.event_type == MARIADB10_START_ENCRYPTION_EVENT)
{
uint8_t *record_ptr = GWBUF_DATA(record);
SLAVE_ENCRYPTION_CTX *new_encryption_ctx;
new_encryption_ctx = MXS_CALLOC(1, sizeof(SLAVE_ENCRYPTION_CTX));
void *mem = MXS_CALLOC(1, sizeof(SLAVE_ENCRYPTION_CTX));
SLAVE_ENCRYPTION_CTX *new_encryption_ctx =
static_cast<SLAVE_ENCRYPTION_CTX*>(mem);
if (!new_encryption_ctx)
{
@ -6545,7 +6546,7 @@ static bool blr_handle_simple_select_stmt(ROUTER_INSTANCE *router,
{
char *word;
char *brkb;
char *sep = " \t,=";
const char *sep = " \t,=";
if ((word = strtok_r(select_stmt, sep, &brkb)) == NULL)
{
@ -7456,7 +7457,7 @@ static bool blr_handle_show_stmt(ROUTER_INSTANCE *router,
{
char *word;
char *brkb;
char *sep = " \t,=";
const char *sep = " \t,=";
if ((word = strtok_r(show_stmt, sep, &brkb)) == NULL)
{
MXS_ERROR("%s: Incomplete show query.", router->service->name);
@ -7475,8 +7476,9 @@ static bool blr_handle_show_stmt(ROUTER_INSTANCE *router,
}
else
{
char *errmsg = "SHOW [FULL] BINARY LOGS needs the"
" 'mariadb10_slave_gtid' option to be set.";
const char *errmsg =
"SHOW [FULL] BINARY LOGS needs the"
" 'mariadb10_slave_gtid' option to be set.";
MXS_ERROR("%s: %s",
errmsg,
router->service->name);
@ -7678,7 +7680,7 @@ static bool blr_handle_set_stmt(ROUTER_INSTANCE *router,
{
char *word;
char *brkb;
char *sep = " \t,=";
const char *sep = " \t,=";
if ((word = strtok_r(set_stmt, sep, &brkb)) == NULL)
{
@ -7976,7 +7978,7 @@ static bool blr_handle_admin_stmt(ROUTER_INSTANCE *router,
{
char *word;
char *brkb;
char *sep = " \t,=";
const char *sep = " \t,=";
if (admin_opts == NULL || !admin_opts[0])
{
@ -8004,8 +8006,9 @@ static bool blr_handle_admin_stmt(ROUTER_INSTANCE *router,
}
else
{
char *errmsg = "PURGE BINARY LOGS needs the "
"'mariadb10_slave_gtid' option to be set.";
const char *errmsg =
"PURGE BINARY LOGS needs the "
"'mariadb10_slave_gtid' option to be set.";
MXS_ERROR("%s: %s",
errmsg,
router->service->name);
@ -9194,9 +9197,10 @@ static void blr_log_config_changes(ROUTER_INSTANCE *router,
}
/* Prepare GTID msg */
char *gtid_msg = change_master->use_mariadb10_gtid ?
", MASTER_USE_GTID=Slave_pos" :
"";
const char *gtid_msg =
change_master->use_mariadb10_gtid ?
", MASTER_USE_GTID=Slave_pos" :
"";
/* Log previous state and new changes */
MXS_NOTICE("%s: 'CHANGE MASTER TO executed'. Previous state "
@ -9244,10 +9248,10 @@ static bool blr_check_connecting_slave(const ROUTER_INSTANCE *router,
enum blr_slave_check check)
{
int rv = true;
char *err_msg = NULL;
char *err_status = "HY000";
const char *err_msg = NULL;
const char *err_status = "HY000";
int err_code = BINLOG_FATAL_ERROR_READING;
char *msg_detail = "";
const char *msg_detail = "";
switch (check)
{
@ -9657,7 +9661,8 @@ static bool blr_apply_changes(ROUTER_INSTANCE *router,
}
else
{
if (master_log_pos != NULL && pos != router->current_pos)
if (master_log_pos != NULL &&
pos != static_cast<long long>(router->current_pos))
{
snprintf(error,
BINLOG_ERROR_MSG_LEN, "Can not set MASTER_LOG_POS to %s: "

View File

@ -72,7 +72,7 @@ static struct option long_options[] =
{0, 0, 0, 0}
};
#endif
char *binlog_check_version = "2.2.1";
const char *binlog_check_version = "2.2.1";
int
maxscale_uptime()

View File

@ -1,5 +1,5 @@
if(BUILD_TESTS)
add_executable(testbinlogrouter testbinlog.c ../blr.c ../blr_slave.c ../blr_master.c ../blr_file.c ../blr_cache.c)
add_executable(testbinlogrouter testbinlog.cc ../blr.cc ../blr_slave.cc ../blr_master.cc ../blr_file.cc ../blr_cache.cc)
target_link_libraries(testbinlogrouter maxscale-common ${PCRE_LINK_FLAGS} uuid)
add_test(NAME TestBinlogRouter COMMAND ./testbinlogrouter WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()

View File

@ -132,7 +132,8 @@ int main(int argc, char **argv)
serviceAddBackend(service, server);
}
if ((inst = MXS_CALLOC(1, sizeof(ROUTER_INSTANCE))) == NULL)
inst = static_cast<ROUTER_INSTANCE*>(MXS_CALLOC(1, sizeof(ROUTER_INSTANCE)));
if (inst == NULL)
{
mxs_log_flush_sync();
mxs_log_finish();