Merge branch '2.3.8' into 2.3

This commit is contained in:
Johan Wikman 2019-06-12 11:26:33 +03:00
commit b98ff222f0
7 changed files with 81 additions and 23 deletions

View File

@ -31,6 +31,7 @@
For more details, please refer to:
* [MariaDB MaxScale 2.3.8 Release Notes](Release-Notes/MaxScale-2.3.8-Release-Notes.md)
* [MariaDB MaxScale 2.3.7 Release Notes](Release-Notes/MaxScale-2.3.7-Release-Notes.md)
* [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)

View File

@ -0,0 +1,49 @@
# MariaDB MaxScale 2.3.8 Release Notes
Release 2.3.8 is a GA release.
This document describes the changes in release 2.3.8, when compared to the
previous release in the same series.
For any problems you encounter, please consider submitting a bug
report on [our Jira](https://jira.mariadb.org/projects/MXS).
## Bug fixes
* [MXS-2541](https://jira.mariadb.org/browse/MXS-2541) Crash with transaction_replay=true
* [MXS-2538](https://jira.mariadb.org/browse/MXS-2538) MaxScale sends wrong charset in some cases
* [MXS-2536](https://jira.mariadb.org/browse/MXS-2536) Hang on KILL /*QUERY*/ 1
* [MXS-2525](https://jira.mariadb.org/browse/MXS-2525) before upgrade to 2.3, all works well ,after upgrade maxscale to 2.3.7,some programing drivers can not work well
* [MXS-2520](https://jira.mariadb.org/browse/MXS-2520) Readwritesplit won't connect to master for reads
* [MXS-2511](https://jira.mariadb.org/browse/MXS-2511) Maxscale c-connector version
* [MXS-2507](https://jira.mariadb.org/browse/MXS-2507) Hang on CREATE TABLE tab
* [MXS-2496](https://jira.mariadb.org/browse/MXS-2496) Service user with roles causes false warnings
* [MXS-2494](https://jira.mariadb.org/browse/MXS-2494) MySQLAuth load users query doesn't check mysql.user's plugin column for MariaDB 10.1+
* [MXS-2491](https://jira.mariadb.org/browse/MXS-2491) Destructor dependency between different components of the log
* [MXS-2479](https://jira.mariadb.org/browse/MXS-2479) Don't throw error for PAM_TEXT_INFO in PAM conversation function
* [MXS-2473](https://jira.mariadb.org/browse/MXS-2473) Clarify documentation on regex-related options
* [MXS-2464](https://jira.mariadb.org/browse/MXS-2464) Crash in route_stored_query with ReadWriteSplit
* [MXS-2250](https://jira.mariadb.org/browse/MXS-2250) DESCRIBE on temporary table is routed to slave
* [MXS-2083](https://jira.mariadb.org/browse/MXS-2083) Maxadmin list servers gives a negative for the number of connections
* [MXS-1851](https://jira.mariadb.org/browse/MXS-1851) Using backend protocol as client protocol causes a crash
* [MXS-1700](https://jira.mariadb.org/browse/MXS-1700) Using MariaDBClient for backend protocol module causes a crash
## Known Issues and Limitations
There are some limitations and known issues within this version of MaxScale.
For more information, please refer to the [Limitations](../About/Limitations.md) document.
## Packaging
RPM and Debian packages are provided for supported the Linux distributions.
Packages can be downloaded [here](https://mariadb.com/downloads/mariadb-tx/maxscale).
## Source Code
The source code of MaxScale is tagged at GitHub with a tag, which is identical
with the version of MaxScale. For instance, the tag of version X.Y.Z of MaxScale
is `maxscale-X.Y.Z`. Further, the default branch is always the latest GA version
of MaxScale.
The source code is available [here](https://github.com/mariadb-corporation/MaxScale).

View File

@ -144,7 +144,7 @@ char* maxavro_read_string(MAXAVRO_FILE* file, size_t* size)
if (maxavro_read_integer(file, &len))
{
if (file->buffer_ptr + len < file->buffer_end)
if (file->buffer_ptr + len <= file->buffer_end)
{
key = MXS_MALLOC(len + 1);
if (key)

View File

@ -120,8 +120,7 @@ int check_file(const char* filename)
return rval;
}
static struct option long_options[] =
{
static struct option long_options[] = {
{"verbose", no_argument, 0, 'v'},
{"dump", no_argument, 0, 'd'},
{"from", no_argument, 0, 'f'},
@ -170,10 +169,17 @@ int main(int argc, char** argv)
}
int rval = 0;
char pathbuf[PATH_MAX + 1];
for (int i = optind; i < argc; i++)
{
if (check_file(realpath(argv[i], pathbuf)))
char pathbuf[PATH_MAX + 1];
if (!realpath(argv[i], pathbuf))
{
snprintf(pathbuf, sizeof(pathbuf), "%s", argv[i]);
}
if (check_file(pathbuf))
{
fprintf(stderr, "Failed to process file: %s\n", argv[i]);
rval = 1;

View File

@ -1075,7 +1075,7 @@ add_test_executable(mxs2057_systemd_watchdog.cpp mxs2057_systemd_watchdog mxs205
#add_test_executable_notest(long_test.cpp long_test_big replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY)
# Tries INSERTs with size close to 0x0ffffff * N
add_test_derived(different_size_rwsplit_big different_size_rwsplit replication LABELS readwritesplit UNSTABLE HEAVY REPL_BACKEND BIG_REPL_BACKEND UNSTABLE)
add_test_derived(different_size_rwsplit_big different_size_rwsplit replication LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY )
# Check how Maxscale works in case of one slave failure, only one slave is configured
add_test_derived(slave_failover_big slave_failover replication.one_slave LABELS readwritesplit REPL_BACKEND BIG_REPL_BACKEND UNSTABLE HEAVY)
@ -1106,11 +1106,11 @@ add_test_derived(rwsplit_connect_big rwsplit_connect replication LABELS readwrit
# Regression cases for the bug "Hint filter don't work if listed before regex filter in configuration file"
# (different filter sequence and configuration, but the same test, see .cnf for details)
add_test_derived(bug585_big bug587 bug585 LABELS regexfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE)
add_test_derived(bug587_big bug587 bug587 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE)
add_test_derived(bug587_1_big bug587 bug587_1 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE)
add_test_derived(bug585_big bug587 bug585 LABELS regexfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE HEAVY)
add_test_derived(bug587_big bug587 bug587 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE HEAVY)
add_test_derived(bug587_1_big bug587 bug587_1 LABELS regexfilter hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE HEAVY)
# Regression case for the bug "Routing Hints route to server sometimes doesn't work"
add_test_derived(bug471_big bug471 bug471_big LABELS readwritesplit hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE)
add_test_derived(bug471_big bug471 bug471_big LABELS readwritesplit hintfilter BIG_REPL_BACKEND REPL_BACKEND UNSTABLE HEAVY)
set_tests_properties(different_size_rwsplit_big PROPERTIES TIMEOUT 3600)
set_tests_properties(different_size_rwsplit PROPERTIES TIMEOUT 3600)

View File

@ -70,6 +70,7 @@ int main(int argc, char** argv)
get_output(test);
string gtid_old_master;
test.repl->connect();
if (find_field(test.repl->nodes[master_index], GTID_QUERY, GTID_FIELD, result_tmp) == 0)
{
gtid_old_master = result_tmp;
@ -119,9 +120,10 @@ int main(int argc, char** argv)
test.maxscales->wait_for_monitor();
get_output(test);
char result[100];
test.repl->connect();
if (find_field(conn, sstatus_query.c_str(), "Master_Host", result) == 0)
{
test.expect(strcmp(result, test.repl->IP[0]) == 0,
test.expect(strcmp(result, test.repl->IP[0]) == 0,
"server3 did not rejoin the cluster (%s != %s).", result, test.repl->IP[0]);
}
else

View File

@ -1711,7 +1711,7 @@ public:
const Token* pDatabase = pName2->z ? pName1 : NULL;
char name[pName->n + 1];
strncpy(name, pName->z, pName->n);
memcpy(name, pName->z, pName->n);
name[pName->n] = 0;
QcAliases aliases;
@ -1719,7 +1719,7 @@ public:
if (pDatabase)
{
char database[pDatabase->n + 1];
strncpy(database, pDatabase->z, pDatabase->n);
memcpy(database, pDatabase->z, pDatabase->n);
database[pDatabase->n] = 0;
update_names(database, name, NULL, &aliases);
@ -1983,13 +1983,13 @@ public:
const Token* pDatabase = pName2->z ? pName1 : NULL;
char name[pName->n + 1];
strncpy(name, pName->z, pName->n);
memcpy(name, pName->z, pName->n);
name[pName->n] = 0;
if (pDatabase)
{
char database[pDatabase->n + 1];
strncpy(database, pDatabase->z, pDatabase->n);
memcpy(database, pDatabase->z, pDatabase->n);
database[pDatabase->n] = 0;
update_names(database, name, NULL, NULL);
@ -2186,14 +2186,14 @@ public:
if (pDatabase)
{
strncpy(database, pDatabase->z, pDatabase->n);
memcpy(database, pDatabase->z, pDatabase->n);
database[pDatabase->n] = 0;
zDatabase = database;
}
char table[pTable->n + 1];
strncpy(table, pTable->z, pTable->n);
memcpy(table, pTable->z, pTable->n);
table[pTable->n] = 0;
update_names(zDatabase, table, NULL, NULL);
@ -2294,14 +2294,14 @@ public:
if (pDatabase)
{
strncpy(database, pDatabase->z, pDatabase->n);
memcpy(database, pDatabase->z, pDatabase->n);
database[pDatabase->n] = 0;
zDatabase = database;
}
char table[pName->n + 1];
strncpy(table, pName->z, pName->n);
memcpy(table, pName->z, pName->n);
table[pName->n] = 0;
update_names(zDatabase, table, NULL, NULL);
@ -2424,7 +2424,7 @@ public:
m_type_mask = QUERY_TYPE_WRITE;
char zName[pName->n + 1];
strncpy(zName, pName->z, pName->n);
memcpy(zName, pName->z, pName->n);
zName[pName->n] = 0;
update_names("*any*", zName, NULL, NULL);
@ -3136,7 +3136,7 @@ public:
char database[pDatabase ? pDatabase->n + 1 : 0];
if (pDatabase)
{
strncpy(database, pDatabase->z, pDatabase->n);
memcpy(database, pDatabase->z, pDatabase->n);
database[pDatabase->n] = 0;
zDatabase = database;
}
@ -3146,7 +3146,7 @@ public:
}
char name[pName->n + 1];
strncpy(name, pName->z, pName->n);
memcpy(name, pName->z, pName->n);
name[pName->n] = 0;
update_names(zDatabase, name, NULL, NULL);
@ -3345,7 +3345,7 @@ private:
if (nDatabase)
{
strncpy(fullname, zDatabase, nDatabase);
memcpy(fullname, zDatabase, nDatabase);
fullname[nDatabase] = 0;
strcat(fullname, ".");
}