diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md index 0a7557c74..c7cd9113d 100644 --- a/Documentation/Changelog.md +++ b/Documentation/Changelog.md @@ -31,6 +31,7 @@ For more details, please refer to: +* [MariaDB MaxScale 2.3.6 Release Notes](Release-Notes/MaxScale-2.3.6-Release-Notes.md) * [MariaDB MaxScale 2.3.5 Release Notes](Release-Notes/MaxScale-2.3.5-Release-Notes.md) * [MariaDB MaxScale 2.3.4 Release Notes](Release-Notes/MaxScale-2.3.4-Release-Notes.md) * [MariaDB MaxScale 2.3.3 Release Notes](Release-Notes/MaxScale-2.3.3-Release-Notes.md) diff --git a/Documentation/Release-Notes/MaxScale-2.3.6-Release-Notes.md b/Documentation/Release-Notes/MaxScale-2.3.6-Release-Notes.md index 0ac6a919e..c2e248278 100644 --- a/Documentation/Release-Notes/MaxScale-2.3.6-Release-Notes.md +++ b/Documentation/Release-Notes/MaxScale-2.3.6-Release-Notes.md @@ -11,6 +11,7 @@ report on [our Jira](https://jira.mariadb.org/projects/MXS). ## New Features * [MXS-2417](https://jira.mariadb.org/browse/MXS-2417) MaxScale main config should take precedence over runtime config on restart +* [MXS-2344](https://jira.mariadb.org/browse/MXS-2344) Support MASTER_SSL in mariadbmon for encrypting replication traffic ### REST API & MaxCtrl: Hard maintenance mode @@ -24,8 +25,12 @@ the `set` endpoint. ## Bug fixes +* [MXS-2423](https://jira.mariadb.org/browse/MXS-2423) retain_last_statements not in maxctrl show maxscale * [MXS-2419](https://jira.mariadb.org/browse/MXS-2419) Hangs on query during multiple transaction replays * [MXS-2418](https://jira.mariadb.org/browse/MXS-2418) Crash on transaction replay if log_info is on and session starts with no master +* [MXS-2416](https://jira.mariadb.org/browse/MXS-2416) Possible memory leak +* [MXS-2324](https://jira.mariadb.org/browse/MXS-2324) Maxscale disconnect after commit without begin from Icinga2 +* [MXS-2259](https://jira.mariadb.org/browse/MXS-2259) Maxscale consumes large amounts of memory even with buffer limits set. ## Known Issues and Limitations diff --git a/include/maxscale/protocol/rwbackend.hh b/include/maxscale/protocol/rwbackend.hh index a13a3cb03..bbf8f0c2a 100644 --- a/include/maxscale/protocol/rwbackend.hh +++ b/include/maxscale/protocol/rwbackend.hh @@ -156,6 +156,7 @@ private: bool m_local_infile_requested; /**< Whether a LOCAL INFILE was requested */ ResponseStat m_response_stat; uint64_t m_num_coldefs = 0; + bool m_skip_next = false; inline bool is_opening_cursor() const { diff --git a/maxscale-system-test/mxs559_block_master.cpp b/maxscale-system-test/mxs559_block_master.cpp index 9e9d64ebc..919708086 100644 --- a/maxscale-system-test/mxs559_block_master.cpp +++ b/maxscale-system-test/mxs559_block_master.cpp @@ -114,6 +114,7 @@ int main(int argc, char* argv[]) test.try_query(test.maxscales->conn_rwsplit[0], "DROP TABLE IF EXISTS t1"); test.maxscales->close_maxscale_connections(0); + test.maxscales->wait_for_monitor(); test.check_maxscale_alive(0); test.log_excludes(0, "due to authentication failure"); test.log_excludes(0, "due to handshake failure"); diff --git a/maxscale-system-test/non_native_setup.cpp b/maxscale-system-test/non_native_setup.cpp index 8913d151f..a48c2e682 100644 --- a/maxscale-system-test/non_native_setup.cpp +++ b/maxscale-system-test/non_native_setup.cpp @@ -26,10 +26,7 @@ int main(int argc, char* argv[]) std::string(" ") + std::string(argv[1]); - int local_argc = argc - 1; - char** local_argv = &argv[1]; - - TestConnections test(local_argc, local_argv); + TestConnections test(argc, argv); sleep(3); setenv("src_dir", test_dir, 1); diff --git a/server/modules/protocol/MySQL/rwbackend.cc b/server/modules/protocol/MySQL/rwbackend.cc index 66e82cfb2..208192e8c 100644 --- a/server/modules/protocol/MySQL/rwbackend.cc +++ b/server/modules/protocol/MySQL/rwbackend.cc @@ -296,6 +296,17 @@ void RWBackend::process_packets(GWBUF* result) auto end = std::next(it, len); uint8_t cmd = *it; + // Ignore the tail end of a large packet large packet. Only resultsets can generate packets this large + // and we don't care what the contents are and thus it is safe to ignore it. + bool skip_next = m_skip_next; + m_skip_next = len == GW_MYSQL_MAX_PACKET_LEN; + + if (skip_next) + { + it = end; + continue; + } + switch (m_reply_state) { case REPLY_STATE_START: