Merge branch '2.3' into develop

This commit is contained in:
Markus Mäkelä 2019-03-15 12:31:08 +02:00
commit 667a9f1c6f
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
11 changed files with 94 additions and 61 deletions

View File

@ -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)

View 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).

View File

@ -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")

View File

@ -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) {

View File

@ -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) {

View File

@ -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.

View File

@ -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

View File

@ -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)));

View File

@ -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(),

View File

@ -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)
{

View File

@ -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)