From fc6dd0a0a904d7b8ec23e23c1b9337efbbf13f26 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 17 Mar 2015 12:04:11 +0200 Subject: [PATCH 1/5] 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/5] 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); } From 29dcd939790e277d25a2ff3b6f6a8b922511a712 Mon Sep 17 00:00:00 2001 From: MassimilianoPinto Date: Thu, 19 Mar 2015 09:56:00 +0100 Subject: [PATCH 3/5] MariaDB 10 support and checksum fix MariaDB 10 support and checksum fix --- server/modules/routing/binlog/blr_slave.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c index 56c5996cd..f1ad60ba2 100644 --- a/server/modules/routing/binlog/blr_slave.c +++ b/server/modules/routing/binlog/blr_slave.c @@ -34,6 +34,8 @@ * Date Who Description * 14/04/2014 Mark Riddoch Initial implementation * 18/02/2015 Massimiliano Pinto Addition of DISCONNECT ALL and DISCONNECT SERVER server_id + * 18/03/2015 Markus Makela Better detection of CRC32 | NONE checksum + * 19/03/2015 Massimiliano Pinto Addition of basic MariaDB 10 compatibility support * * @endverbatim */ From f383f745cb646f72dcadee199d4b3b8fff4b6a2a Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 19 Mar 2015 11:40:47 +0200 Subject: [PATCH 4/5] Added timeout to Feedback test. --- server/core/test/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/server/core/test/CMakeLists.txt b/server/core/test/CMakeLists.txt index 0cff62772..b42bbbfe7 100644 --- a/server/core/test/CMakeLists.txt +++ b/server/core/test/CMakeLists.txt @@ -58,3 +58,4 @@ set_tests_properties(testMySQLUsers TestAdminUsers TestMemlog TestFeedback PROPERTIES ENVIRONMENT MAXSCALE_HOME=${CMAKE_BINARY_DIR}/) +set_tests_properties(TestFeedback PROPERTIES TIMEOUT 30) From 15262f3fbfffffa2ff97cf3fd2d350597d05a176 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 19 Mar 2015 11:56:40 +0200 Subject: [PATCH 5/5] Added new Make target for testing MaxScale's core parts. This target doesn't need a running MaxScale and only executes core, log_manager and query_classifier unit tests. --- CMakeLists.txt | 9 ++- testall.cmake => cmake/testall.cmake | 0 log_manager/test/CMakeLists.txt | 2 +- query_classifier/test/CMakeLists.txt | 2 +- .../test/canonical_tests/CMakeLists.txt | 2 +- server/core/test/CMakeLists.txt | 56 +++++++++---------- 6 files changed, 39 insertions(+), 32 deletions(-) rename testall.cmake => cmake/testall.cmake (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed14ca23b..be800c5b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,9 +224,16 @@ add_custom_target(testall COMMAND ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR} COMMAND make install COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/server/test/MaxScale_test.cnf ${CMAKE_BINARY_DIR}/etc/MaxScale.cnf - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/testall.cmake + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/testall.cmake COMMENT "Running full test suite..." VERBATIM) +add_custom_target(testcore + COMMAND ${CMAKE_COMMAND} -DDEPS_OK=Y -DBUILD_TESTS=Y -DBUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DINSTALL_SYSTEM_FILES=N ${CMAKE_SOURCE_DIR} + COMMAND make install + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/server/test/MaxScale_test.cnf ${CMAKE_BINARY_DIR}/etc/MaxScale.cnf + COMMAND ctest -R Internal + COMMENT "Running core test suite..." VERBATIM) + # uninstall target # see http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F configure_file( diff --git a/testall.cmake b/cmake/testall.cmake similarity index 100% rename from testall.cmake rename to cmake/testall.cmake diff --git a/log_manager/test/CMakeLists.txt b/log_manager/test/CMakeLists.txt index 253f56f74..bbcfd5791 100644 --- a/log_manager/test/CMakeLists.txt +++ b/log_manager/test/CMakeLists.txt @@ -2,4 +2,4 @@ add_executable(testlog testlog.c) add_executable(testorder testorder.c) target_link_libraries(testlog pthread log_manager utils) target_link_libraries(testorder pthread log_manager utils) -add_test(NAME TestLogOrder COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/logorder.sh 200 0 1000 ${CMAKE_CURRENT_BINARY_DIR}/logorder.log) +add_test(NAME Internal-TestLogOrder COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/logorder.sh 200 0 1000 ${CMAKE_CURRENT_BINARY_DIR}/logorder.log) diff --git a/query_classifier/test/CMakeLists.txt b/query_classifier/test/CMakeLists.txt index ab0154657..44b66e461 100644 --- a/query_classifier/test/CMakeLists.txt +++ b/query_classifier/test/CMakeLists.txt @@ -11,4 +11,4 @@ endif() add_subdirectory(canonical_tests) add_executable(classify classify.c) target_link_libraries(classify query_classifier fullcore) -add_test(TestQueryClassifier classify ${CMAKE_CURRENT_SOURCE_DIR}/input.sql ${CMAKE_CURRENT_SOURCE_DIR}/expected.sql) +add_test(Internal-TestQueryClassifier classify ${CMAKE_CURRENT_SOURCE_DIR}/input.sql ${CMAKE_CURRENT_SOURCE_DIR}/expected.sql) diff --git a/query_classifier/test/canonical_tests/CMakeLists.txt b/query_classifier/test/canonical_tests/CMakeLists.txt index 26bc64602..1dafc428e 100644 --- a/query_classifier/test/canonical_tests/CMakeLists.txt +++ b/query_classifier/test/canonical_tests/CMakeLists.txt @@ -9,7 +9,7 @@ else() endif() add_executable(canonizer canonizer.c) target_link_libraries(canonizer pthread query_classifier z dl ssl aio crypt crypto rt m ${EMBEDDED_LIB} fullcore stdc++) -add_test(NAME TestCanonicalQuery COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/canontest.sh +add_test(NAME Internal-TestCanonicalQuery COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/canontest.sh ${CMAKE_CURRENT_BINARY_DIR}/test.log ${CMAKE_CURRENT_SOURCE_DIR}/input.sql ${CMAKE_CURRENT_BINARY_DIR}/output.sql diff --git a/server/core/test/CMakeLists.txt b/server/core/test/CMakeLists.txt index b42bbbfe7..3665bfdec 100644 --- a/server/core/test/CMakeLists.txt +++ b/server/core/test/CMakeLists.txt @@ -28,34 +28,34 @@ target_link_libraries(test_users fullcore) target_link_libraries(test_adminusers fullcore) target_link_libraries(testmemlog fullcore) target_link_libraries(testfeedback fullcore) -add_test(testMySQLUsers test_mysql_users) -add_test(TestHash test_hash) -add_test(TestHint test_hint) -add_test(TestSpinlock test_spinlock) -add_test(TestFilter test_filter) -add_test(TestBuffer test_buffer) -add_test(TestDCB test_dcb) -add_test(TestModutil test_modutil) -add_test(TestPoll test_poll) -add_test(TestService test_service) -add_test(TestServer test_server) -add_test(TestUsers test_users) -add_test(TestAdminUsers test_adminusers) -add_test(TestMemlog testmemlog) +add_test(Internal-TestMySQLUsers test_mysql_users) +add_test(Internal-TestHash test_hash) +add_test(Internal-TestHint test_hint) +add_test(Internal-TestSpinlock test_spinlock) +add_test(Internal-TestFilter test_filter) +add_test(Internal-TestBuffer test_buffer) +add_test(Internal-TestDCB test_dcb) +add_test(Internal-TestModutil test_modutil) +add_test(Internal-TestPoll test_poll) +add_test(Internal-TestService test_service) +add_test(Internal-TestServer test_server) +add_test(Internal-TestUsers test_users) +add_test(Internal-TestAdminUsers test_adminusers) +add_test(Internal-TestMemlog testmemlog) add_test(TestFeedback testfeedback) -set_tests_properties(testMySQLUsers - TestHash - TestHint - TestSpinlock - TestFilter - TestBuffer - TestDCB - TestModutil - TestPoll - TestService - TestServer - TestUsers - TestAdminUsers - TestMemlog +set_tests_properties(Internal-TestMySQLUsers + Internal-TestHash + Internal-TestHint + Internal-TestSpinlock + Internal-TestFilter + Internal-TestBuffer + Internal-TestDCB + Internal-TestModutil + Internal-TestPoll + Internal-TestService + Internal-TestServer + Internal-TestUsers + Internal-TestAdminUsers + Internal-TestMemlog TestFeedback PROPERTIES ENVIRONMENT MAXSCALE_HOME=${CMAKE_BINARY_DIR}/) set_tests_properties(TestFeedback PROPERTIES TIMEOUT 30)