8730 Commits

Author SHA1 Message Date
Markus Mäkelä
e56cf41160
MXS-2809: Update links in example config 2019-12-18 09:58:23 +02:00
Markus Mäkelä
f39ed6803e
Merge branch '2.3' into 2.4 2019-12-17 14:04:47 +02:00
Markus Mäkelä
be088c54b4
Add LOAD DATA INFILE support
The events are similar to normal query events except that they have an
extra 13 bytes of static data. This data is of no relevance to Maxscale
and thus can be ignored. This also allows the reuse of the same query
event code for execute load query events.
2019-12-17 13:54:08 +02:00
Markus Mäkelä
a1009824a6
RCAP_TYPE_STMT_OUTPUT needs complete packets
It was possible that a null buffer was passed to clientReply if the
RCAP_TYPE_STMT_OUTPUT capability was needed and a partial packet was read.
2019-12-17 13:53:06 +02:00
Markus Mäkelä
78cc8f17b3
Replace debug assertion with warning
It appears that rollback errors are possible outside of
transactions. Since this was not something we expected to see, logging it
as an error allows us to see why this happens in production deployments.
2019-12-17 13:53:06 +02:00
Markus Mäkelä
b0a1eddb6c
Store ignored error information
The errors that are ignored by readwritesplit are now stored as the
current close reason in the Backend. This allows the information about the
error to be retained and it can be used later in the error handler to
display the true reason why the connection was closed.
2019-12-17 13:48:51 +02:00
Markus Mäkelä
ad323bb837
Merge branch '2.3' into 2.4 2019-12-13 11:24:42 +02:00
Markus Mäkelä
e057c751cd
Improve handleError error messages
The hangup and error handlers now have unique messages. Although the
behavior in the handlers is practically the same in both cases, the cause
of the error is not the same.

If a socket error is present, it is added to the error message. If an
error is present, it should clearly show the reason why the TCP socket was
closed.

The is_fake_event boolean helps distinguish fake events from real
ones. This makes figuring out the real source of hangup events easier.
2019-12-13 10:50:04 +02:00
Markus Mäkelä
c1b5d70eea
MXS-2803: Write all buffered data
Since the queued queries will never be inspected after the COM_CHANGE_USER
completes, they should all be written instead of only the first packet.
2019-12-13 10:49:36 +02:00
Markus Mäkelä
e909632e9e
MXS-2802: Route COM_RESET_CONNECTION to all servers
The purpose of a COM_RESET_CONNECTION is to reset the connection
states. This means it should be routed to all servers, the same as all
session state modifying commands.
2019-12-13 10:49:36 +02:00
Markus Mäkelä
934b865b25
Add missing commands to STRPACKETTYPE
The MariaDB specific commands were missing.
2019-12-13 10:49:36 +02:00
Markus Mäkelä
2b56737868
Fix debug assertion
The GWBUF_IS_CONTIGUOUS macro changed in 2.4 and it no longer allows null
arguments.
2019-12-13 10:49:36 +02:00
Markus Mäkelä
90f7c69f9d
Fix database renaming with no default database
If no default database was given, it was possible that the code would end
up in an endless loop.
2019-12-13 10:49:35 +02:00
Markus Mäkelä
d44aff6c3d
Merge branch '2.3' into 2.4 2019-12-10 11:12:41 +02:00
Markus Mäkelä
7be6ee1616
MXS-2789: Make stale journal messages notifications
These events are of no actual consequence and can be safely ignored. It is
simply informational.
2019-12-10 11:11:05 +02:00
Markus Mäkelä
cb4e43b05a
MXS-2794: Log changes in loaded users
By checking whether the users have changed whenever they are reloaded, we
improve the visibility of the user reloading process. Using a checksum
allows us to easily compress the information with acceptable loss of
accuracy. Using a CAS loop prevents duplicate messages without losing any
updates even if multiple user reloads result in different outcomes.
2019-12-10 09:41:42 +02:00
Markus Mäkelä
e36c7efa25
MXS-2785: Report PCRE2 errors
The substitution string could cause errors.
2019-12-09 17:53:59 +02:00
Markus Mäkelä
689a284892
MXS-2785: Make rewrite_src a regular expression
The use of a regular expression allows multiple rewrite rules to be
combined into one. This allows more versatile conversions but, given the
simple nature of regular expressions, also makes accidental changes more
likely.

Addd mxs::pcre2_substitute that is a more C++-friendly version of
mxs_pcre2_substitute to make. This makes string replacement a lot easier
to do when the source and destination are not C strings.
2019-12-09 17:53:59 +02:00
Markus Mäkelä
d23f0366a8
MXS-2785: Prevent broken replication setups
When rewrite_src and rewrite_dest have different lengths, the slave must
use GTID based replication. This removes the need for one-to-one matching
between the slave's relay log and the master's binlog which gets broken
when event lengths are modified due to event rewriting.
2019-12-09 17:53:59 +02:00
Markus Mäkelä
3de5e4edcd
MXS-2785: Allow event size changes due to rewrites
The replication events use a redundant format that has both the length of
the event and the position of the next event. The length can be modified
so that the next event position of the previous event and the length of
the curren event can be different. This includes overlap of the events
where the next event position of an event is "inside" the current event.

The next event position must retain its original value as that allows
replication slaves to reconnect with the correct position when file and
position based replication is used. For GTID replication, the slave asks
for the coordinates from the master and uses those.

When a slave receives a heartbeat event from a master, it checks that the
binlog name matches and that the next event position in the event is not
behind the slave's relay log position. These events must be modified to
contain a fake next event position that will never be reached by the
slave. This makes sure that the simple sanity checks never fail even if
we've caused the slave's relay log to be ahead of the master's binlog.
2019-12-09 17:53:59 +02:00
Markus Mäkelä
babce13ec6
Add GWBUF pretty-printing
The gwbuf_hexdump_pretty displays the hex contents of the buffer alongside
the human-readable version of it. The text version helps identify parts of
the buffer that contain text which makes protocol data decoding easier.
2019-12-09 17:53:58 +02:00
Markus Mäkelä
e829cae8b1
MXS-2785: Add rewrite_src and rewrite_dest parameters
The parameters allow rudimentary database rewriting in the replication
stream. This is still very limited as the replacement must have the same
length as the original. In theory it could be shorter without causing
problems but making it longer is not easy.
2019-12-09 17:53:58 +02:00
Johan Wikman
c480a44852 Merge branch '2.3' into 2.4 2019-12-05 16:54:44 +02:00
Johan Wikman
e673c3eab0 MXS-2788 Use case-insensitive string comparisons
When names are matched in rules and in resultsets, case insensitive
matching must be used.
2019-12-05 13:44:18 +02:00
Markus Mäkelä
52eafb7926
Fix binlogfilter capabilities
The binlogfilter needs to read results one packet at a time but it needs
resultsets to be collected into a single buffer. This behavior is
guaranteed implicitly when the binlogrouter is used but is not present
when it is used without it. To support the use of the binlogfilter with
readconnroute, the filter must properly declare the capabilities.
2019-12-03 11:06:52 +02:00
Markus Mäkelä
5351d43065
Merge branch '2.3' into 2.4 2019-12-03 10:40:57 +02:00
Markus Mäkelä
9e9abbe8be
MXS-2786: Require certificates when verifying peers
When peer verification is enabled, clients must present a certificate.
2019-12-03 10:34:00 +02:00
Markus Mäkelä
b1961042a7
MXS-2776: Fix unwanted regex checks on COMMIT
The default database check would be done even on transaction management
commands which would cause them to always be skipped when a match was
defined.
2019-12-02 09:08:00 +02:00
Markus Mäkelä
7a5e50f980
Merge branch '2.3' into 2.4 2019-11-29 16:41:07 +02:00
Markus Mäkelä
521c75505b
Properly detect SSL initialization failures
The return value was not checked in the function that created it.
2019-11-29 16:31:07 +02:00
Markus Mäkelä
ab8393939b
MXS-2773: Make host blocking an optional feature
In cases where servers are known to be down on startup, this feature does
more harm than good. Disabling it in these cases would be preferable but
due to how the parameter is used, it is not possible.
2019-11-29 16:31:07 +02:00
Markus Mäkelä
cd9b82ba09
Print OpenSSL errors on CA cert errors
This helps figure out why the certificate is not OK.
2019-11-29 16:16:35 +02:00
Markus Mäkelä
fb23f3eb3e
OpenSSL 1.1 supports TLSv1.1 and TLSv1.2
TLSv1.0 is the only version that newer OpenSSL versions do not support.
2019-11-29 16:16:35 +02:00
Markus Mäkelä
374d5b28d1
MXS-2759: Optimize user loading query
The SQL for the second recursive CTE table can be optimized by adding a
where condition on the recursive part that rules out users that are not
roles. The functionality remains the same as only roles can be granted to
users.
2019-11-29 16:16:34 +02:00
Johan Wikman
d45ea8d489 Merge branch '2.3' into 2.4 2019-11-29 13:59:16 +02:00
Johan Wikman
d41975dde8 MXS-2782 Return nullptr if non-existing worker is asked for
Earlier assert in debug mode and garbage in release mode.
2019-11-28 14:33:00 +02:00
Markus Mäkelä
c5ce940b12
Merge branch '2.3' into 2.4 2019-11-28 08:05:44 +02:00
Markus Mäkelä
774e9bc3f0
MXS-2762: Add ssl_version=TLSv13
Added new ssl_version value for TLSv1.3. This allows the list of accepted
protocol versions to be limited to all supported protocols. Previously
TLSv1.3 was only available with ssl_version=MAX.

Also fixed the enum value serialization to use a lowercase v. This causes
them to have the same value as the one used in the enum.
2019-11-28 07:48:01 +02:00
Markus Mäkelä
f7f865d4c3
MXS-2763: Log correct error for unsupported TLS versions
Previously when ssl_version was used with a value that is not supported on
the system, an unknown parameter error was returned. This could be
confusing and logging a proper error message should make it clear.
2019-11-28 07:48:01 +02:00
Johan Wikman
231f68b6dc MXS-2727 Load storage from build-time location
Otherwise it might not be found.
2019-11-13 15:10:56 +02:00
Johan Wikman
0ec505b301 MXS-2727 Fix test-program 2019-11-13 13:06:07 +02:00
Johan Wikman
80ce599cf8 Remove cache_stress from the build 2019-11-13 08:37:17 +02:00
Johan Wikman
f6731a898d Update change date 2019-11-13 08:37:17 +02:00
Johan Wikman
1c28eefbd0 MXS-2727 Add fix
If an existing cache-entry should be updated, but the new value
is larger that the maximum size of the cache, then the cache can
not be updated, but the old value must be removed.

Whether or not we succeed in removing the entry, an error result
must be returned. Earlier OK was returned, but no node was
allocated, which then caused a crash.
2019-11-12 15:27:31 +02:00
Johan Wikman
6a319dc655 MXS-2727 Add test that reveals problem 2019-11-12 15:20:32 +02:00
Johan Wikman
521960e6f9 MXS-2727 Add program for causing cache stress 2019-11-12 15:18:36 +02:00
Markus Mäkelä
3f05059afa
Merge branch '2.3' into 2.4 2019-11-11 09:09:10 +02:00
Markus Mäkelä
638d1bf354
MXS-2760: Fix ssl_version conversion
The value is now correctly converted to the enum values.
2019-11-11 09:05:46 +02:00
Johan Wikman
d67442356e Merge branch '2.3' into 2.4 2019-11-08 14:13:06 +02:00
Markus Mäkelä
5c4ac03c07
Log a message in readconnroute's handleError
This way there's trace that something unexpected happened and that the
session closed unexpectedly.
2019-11-08 13:44:21 +02:00