From fc6dd0a0a904d7b8ec23e23c1b9337efbbf13f26 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 17 Mar 2015 12:04:11 +0200 Subject: [PATCH 1/2] Added support for MariaDB 10.0 --- server/modules/routing/binlog/blr_slave.c | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c index 38b1e0846..881a9cdbd 100644 --- a/server/modules/routing/binlog/blr_slave.c +++ b/server/modules/routing/binlog/blr_slave.c @@ -80,6 +80,7 @@ static int blr_slave_send_eof(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int static int blr_slave_send_disconnected_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int server_id, int found); static int blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave); static int blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int server_id); +static int blr_slave_send_ok(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave); extern int lm_enabled_logfiles_bitmask; extern size_t log_ses_count[]; @@ -363,6 +364,11 @@ int query_len; free(query_text); return blr_slave_replay(router, slave, router->saved_master.heartbeat); } + else if (strcasecmp(word, "@mariadb_slave_capability") == 0) + { + free(query_text); + return blr_slave_send_ok(router, slave); + } else if (strcasecmp(word, "@master_binlog_checksum") == 0) { word = strtok_r(NULL, sep, &brkb); @@ -2057,3 +2063,31 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave) return 1; } + /** + * Send a MySQL OK packet to the DCB + * + * @param dcb The DCB to send the OK packet to + * @return result of a write call, non-zero if write was successful + */ +static int +blr_slave_send_ok(ROUTER_INSTANCE* router, ROUTER_SLAVE* slave) +{ +GWBUF *pkt; +uint8_t *ptr; + + if ((pkt = gwbuf_alloc(11)) == NULL) + return 0; + ptr = GWBUF_DATA(pkt); + *ptr++ = 7; // Payload length + *ptr++ = 0; + *ptr++ = 0; + *ptr++ = 1; // Seqno + *ptr++ = 0; // ok + *ptr++ = 0; + *ptr++ = 0; + *ptr++ = 2; + *ptr++ = 0; + *ptr++ = 0; + *ptr++ = 0; + return slave->dcb->func.write(slave->dcb, pkt); +} \ No newline at end of file From 646952290ea9452c377f2fa6fb549245f863ebfc Mon Sep 17 00:00:00 2001 From: MassimilianoPinto Date: Wed, 18 Mar 2015 17:43:48 +0100 Subject: [PATCH 2/2] Fix added for binlog_checksum=NONE Fix added for binlog_checksum=NONE --- server/modules/routing/binlog/blr_slave.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c index 54386ffd5..56c5996cd 100644 --- a/server/modules/routing/binlog/blr_slave.c +++ b/server/modules/routing/binlog/blr_slave.c @@ -372,10 +372,9 @@ int query_len; else if (strcasecmp(word, "@master_binlog_checksum") == 0) { word = strtok_r(NULL, sep, &brkb); - if (word && (strcasecmp(word, "'none'") == 0)) - slave->nocrc = 1; - else - slave->nocrc = 0; + if (word && (strcasecmp(word, "@@global.biglog_checksum'") == 0)) + slave->nocrc = !router->master_chksum; + free(query_text); return blr_slave_replay(router, slave, router->saved_master.chksum1); }