Merge branch '2.3' into develop
This commit is contained in:
commit
667a9f1c6f
@ -77,6 +77,7 @@ For more details, please refer to:
|
||||
the master. There is also limited capability for rejoining nodes.
|
||||
|
||||
For more details, please refer to:
|
||||
* [MariaDB MaxScale 2.2.20 Release Notes](Release-Notes/MaxScale-2.2.20-Release-Notes.md)
|
||||
* [MariaDB MaxScale 2.2.19 Release Notes](Release-Notes/MaxScale-2.2.19-Release-Notes.md)
|
||||
* [MariaDB MaxScale 2.2.18 Release Notes](Release-Notes/MaxScale-2.2.18-Release-Notes.md)
|
||||
* [MariaDB MaxScale 2.2.17 Release Notes](Release-Notes/MaxScale-2.2.17-Release-Notes.md)
|
||||
|
40
Documentation/Release-Notes/MaxScale-2.2.20-Release-Notes.md
Normal file
40
Documentation/Release-Notes/MaxScale-2.2.20-Release-Notes.md
Normal file
@ -0,0 +1,40 @@
|
||||
# MariaDB MaxScale 2.2.20 Release Notes -- 2019-03-15
|
||||
|
||||
Release 2.2.20 is a GA release.
|
||||
|
||||
This document describes the changes in release 2.2.20, 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-2375](https://jira.mariadb.org/browse/MXS-2375) maxctrl stop maxscale is confusing
|
||||
* [MXS-2368](https://jira.mariadb.org/browse/MXS-2368) maxctrl requires password on command line and cannot change user password
|
||||
* [MXS-2335](https://jira.mariadb.org/browse/MXS-2335) lower_case_table_names doesn't work
|
||||
* [MXS-2322](https://jira.mariadb.org/browse/MXS-2322) Null characters in passwords break maxctrl
|
||||
* [MXS-2311](https://jira.mariadb.org/browse/MXS-2311) connection_keepalive and error : (4852) Unexpected internal state: received response 0x00 from server
|
||||
* [MXS-2296](https://jira.mariadb.org/browse/MXS-2296) maxscale-system-test does not generate core dumps
|
||||
* [MXS-2268](https://jira.mariadb.org/browse/MXS-2268) readwritesplitter is not routing queries properly in Maxscale 2.3.2
|
||||
* [MXS-2206](https://jira.mariadb.org/browse/MXS-2206) Cmake version check fails with version = 3.10.2
|
||||
|
||||
## 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).
|
@ -5,7 +5,7 @@
|
||||
|
||||
set(MAXSCALE_VERSION_MAJOR "2" CACHE STRING "Major version")
|
||||
set(MAXSCALE_VERSION_MINOR "2" CACHE STRING "Minor version")
|
||||
set(MAXSCALE_VERSION_PATCH "20" CACHE STRING "Patch version")
|
||||
set(MAXSCALE_VERSION_PATCH "21" CACHE STRING "Patch version")
|
||||
|
||||
# This should only be incremented if a package is rebuilt
|
||||
set(MAXSCALE_BUILD_NUMBER 1 CACHE STRING "Release number")
|
||||
|
@ -33,10 +33,10 @@ exports.builder = function(yargs) {
|
||||
return doRequest(host, 'monitors/' + argv.name + '/start', null, {method: 'PUT'})
|
||||
})
|
||||
})
|
||||
.command('maxscale', 'Start MaxScale by starting all services', function(yargs) {
|
||||
.command(['services', 'maxscale'], 'Start all services', function(yargs) {
|
||||
return yargs.epilog('This command will execute the `start service` command for ' +
|
||||
'all services in MaxScale.')
|
||||
.usage('Usage: start maxscale')
|
||||
.usage('Usage: start [services|maxscale]')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return doRequest(host, 'services/', function(res) {
|
||||
|
@ -37,10 +37,10 @@ exports.builder = function(yargs) {
|
||||
return doRequest(host, 'monitors/' + argv.name + '/stop', null, {method: 'PUT'})
|
||||
})
|
||||
})
|
||||
.command('maxscale', 'Stop MaxScale by stopping all services', function(yargs) {
|
||||
.command(['services', 'maxscale'], 'Stop all services', function(yargs) {
|
||||
return yargs.epilog('This command will execute the `stop service` command for ' +
|
||||
'all services in MaxScale.')
|
||||
.usage('Usage: stop maxscale')
|
||||
.usage('Usage: stop [services|maxscale]')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return doRequest(host, 'services/', function(res) {
|
||||
|
@ -248,3 +248,16 @@ On behalf of the entire MaxScale team,
|
||||
|
||||
YOUR NAME HERE
|
||||
```
|
||||
|
||||
## 10. Update the version number for the next release
|
||||
|
||||
Increment the `MAXSCALE_VERSION_PATCH` value in the `VERSIONxx.cmake` file
|
||||
in the source root where `xx` is the major and minor release number. For
|
||||
example, with 2.2 releases, update the `VERSION22.cmake` file.
|
||||
|
||||
If the `MAXSCALE_BUILD_NUMBER` is not 1, set it to 1. This is only
|
||||
incremented if the packages have to be rebuilt after a release has been
|
||||
made.
|
||||
|
||||
Make sure the `VERSION.cmake` points to the latest `VERSIONxx.cmake` file
|
||||
so that updates in older releases won't affect newer releases.
|
||||
|
@ -1,11 +1,16 @@
|
||||
[maxscale]
|
||||
threads=###threads###
|
||||
log_warning=1
|
||||
|
||||
[server1]
|
||||
type=server
|
||||
address=###node_server_IP_1###
|
||||
port=###node_server_port_1###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[MySQL-Monitor]
|
||||
type=monitor
|
||||
module=mysqlmon
|
||||
servers= server1, server2,server3 ,server4
|
||||
servers=server1
|
||||
user=maxskysql
|
||||
password= skysql
|
||||
monitor_interval=1000
|
||||
@ -13,8 +18,8 @@ detect_stale_master=false
|
||||
|
||||
[RW-Split-Router]
|
||||
type=service
|
||||
router= readwritesplit
|
||||
servers=server1, server2, server3,server4
|
||||
router=readwritesplit
|
||||
servers=server1
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
slave_selection_criteria=LEAST_GLOBAL_CONNECTIONS
|
||||
@ -25,7 +30,7 @@ filters=MaxRows
|
||||
type=service
|
||||
router=readconnroute
|
||||
router_options= slave
|
||||
servers=server1,server2,server3,server4
|
||||
servers=server1
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
|
||||
@ -33,7 +38,7 @@ password=skysql
|
||||
type=service
|
||||
router=readconnroute
|
||||
router_options=master
|
||||
servers=server1,server2,server3,server4
|
||||
servers=server1
|
||||
user=maxskysql
|
||||
password=skysql
|
||||
|
||||
@ -42,7 +47,6 @@ type=listener
|
||||
service=RW-Split-Router
|
||||
protocol=MySQLClient
|
||||
port=4006
|
||||
#socket=/tmp/rwsplit.sock
|
||||
|
||||
[Read-Connection-Listener-Slave]
|
||||
type=listener
|
||||
@ -64,7 +68,6 @@ router=cli
|
||||
type=listener
|
||||
service=CLI
|
||||
protocol=maxscaled
|
||||
#address=localhost
|
||||
socket=default
|
||||
|
||||
[MaxRows]
|
||||
@ -73,28 +76,3 @@ module=maxrows
|
||||
max_resultset_rows=20
|
||||
max_resultset_size=900000000
|
||||
debug=3
|
||||
|
||||
[server1]
|
||||
type=server
|
||||
address=###node_server_IP_1###
|
||||
port=###node_server_port_1###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server2]
|
||||
type=server
|
||||
address=###node_server_IP_2###
|
||||
port=###node_server_port_2###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server3]
|
||||
type=server
|
||||
address=###node_server_IP_3###
|
||||
port=###node_server_port_3###
|
||||
protocol=MySQLBackend
|
||||
|
||||
[server4]
|
||||
type=server
|
||||
address=###node_server_IP_4###
|
||||
port=###node_server_port_4###
|
||||
protocol=MySQLBackend
|
||||
|
||||
|
@ -64,7 +64,7 @@ int main(int argc, char** argv)
|
||||
for (int i = 0; rules_failure[i]; i++)
|
||||
{
|
||||
/** Create rule file with syntax error */
|
||||
test.add_result(truncate(temp_rules, 0), "Failed to truncate");
|
||||
int __attribute__((unused)) rc = truncate(temp_rules, 0);
|
||||
create_rule(rules_failure[i], users_ok[0]);
|
||||
char buf[PATH_MAX + 1];
|
||||
copy_rules(&test, (char*)temp_rules, (char*)getcwd(buf, sizeof(buf)));
|
||||
|
@ -1774,14 +1774,7 @@ static int gw_write(DCB* dcb, GWBUF* writeq, bool* stop_writing)
|
||||
if (written < 0)
|
||||
{
|
||||
*stop_writing = true;
|
||||
#if defined (SS_DEBUG)
|
||||
if (saved_errno != EAGAIN
|
||||
&& saved_errno != EWOULDBLOCK)
|
||||
#else
|
||||
if (saved_errno != EAGAIN
|
||||
&& saved_errno != EWOULDBLOCK
|
||||
&& saved_errno != EPIPE)
|
||||
#endif
|
||||
if (saved_errno != EAGAIN && saved_errno != EWOULDBLOCK && saved_errno != EPIPE)
|
||||
{
|
||||
MXS_ERROR("Write to %s %s in state %s failed: %d, %s",
|
||||
dcb->type(),
|
||||
|
@ -221,7 +221,7 @@ PRWBackends::iterator find_best_backend(PRWBackends& backends,
|
||||
bool masters_accepts_reads)
|
||||
{
|
||||
// Group backends by priority. The set of highest priority backends will then compete.
|
||||
int best_priority {INT_MAX}; // low numbers are high priority
|
||||
int best_priority {2}; // low numbers are high priority
|
||||
|
||||
for (auto& psBackend : backends)
|
||||
{
|
||||
@ -251,7 +251,12 @@ PRWBackends::iterator find_best_backend(PRWBackends& backends,
|
||||
}
|
||||
|
||||
auto best = select(priority_map[best_priority]);
|
||||
auto rval = std::find(backends.begin(), backends.end(), *best);
|
||||
auto rval = backends.end();
|
||||
|
||||
if (best != priority_map[best_priority].end())
|
||||
{
|
||||
rval = std::find(backends.begin(), backends.end(), *best);
|
||||
}
|
||||
|
||||
for (auto& a : priority_map)
|
||||
{
|
||||
|
@ -244,14 +244,17 @@ bool RWSplitSession::route_stored_query()
|
||||
GWBUF* temp_storage = m_query_queue;
|
||||
m_query_queue = NULL;
|
||||
|
||||
// The query needs to be explicitly parsed as it was processed multiple times
|
||||
qc_parse(query_queue, QC_COLLECT_ALL);
|
||||
|
||||
// TODO: Move the handling of queued queries to the client protocol
|
||||
// TODO: module where the command tracking is done automatically.
|
||||
uint8_t cmd = mxs_mysql_get_command(query_queue);
|
||||
mysql_protocol_set_current_command(m_client, (mxs_mysql_cmd_t)cmd);
|
||||
|
||||
if (cmd == MXS_COM_QUERY || cmd == MXS_COM_STMT_PREPARE)
|
||||
{
|
||||
// The query needs to be explicitly parsed as it was processed multiple times
|
||||
qc_parse(query_queue, QC_COLLECT_ALL);
|
||||
}
|
||||
|
||||
if (!routeQuery(query_queue))
|
||||
{
|
||||
rval = false;
|
||||
@ -737,15 +740,6 @@ void RWSplitSession::clientReply(GWBUF* writebuf, DCB* backend_dcb)
|
||||
m_can_replay_trx = true;
|
||||
}
|
||||
|
||||
if (m_expected_responses == 0)
|
||||
{
|
||||
/**
|
||||
* Close stale connections to servers in maintenance. Done here to avoid closing the connections
|
||||
* before all responses have been received.
|
||||
*/
|
||||
close_stale_connections();
|
||||
}
|
||||
|
||||
if (backend->in_use() && backend->has_session_commands())
|
||||
{
|
||||
// Backend is still in use and has more session commands to execute
|
||||
@ -772,6 +766,15 @@ void RWSplitSession::clientReply(GWBUF* writebuf, DCB* backend_dcb)
|
||||
/** Write reply to client DCB */
|
||||
MXS_SESSION_ROUTE_REPLY(backend_dcb->session, writebuf);
|
||||
}
|
||||
|
||||
if (m_expected_responses == 0)
|
||||
{
|
||||
/**
|
||||
* Close stale connections to servers in maintenance. Done here to avoid closing the connections
|
||||
* before all responses have been received.
|
||||
*/
|
||||
close_stale_connections();
|
||||
}
|
||||
}
|
||||
|
||||
void check_and_log_backend_state(const RWBackend* backend, DCB* problem_dcb)
|
||||
|
Loading…
x
Reference in New Issue
Block a user