Merge branch '2.3.8' into 2.3
This commit is contained in:
commit
b98ff222f0
@ -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)
|
||||
|
49
Documentation/Release-Notes/MaxScale-2.3.8-Release-Notes.md
Normal file
49
Documentation/Release-Notes/MaxScale-2.3.8-Release-Notes.md
Normal 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).
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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, ".");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user