Commit Graph

8825 Commits

Author SHA1 Message Date
2c2f86cebb Fix OK packet status extraction in readwritesplit
As the row count and last insert ID are length-encoded integers, they need
to be handled with the correct functions.
2017-10-09 13:38:12 +03:00
13265876a9 Add MaxCtrl test for start/stop maxscale
Added the missing test case for starting and stopping MaxScale.
2017-10-09 13:12:30 +03:00
80892c1657 Update MaxCtrl documentation
Fixed the usage help for each command.
2017-10-09 13:12:30 +03:00
9805df7af0 Update Avro router documentation
Update Avro router documentation
2017-10-09 11:00:02 +02:00
c8b9bf09b8 Fix typo in readwritesplit comments
The comment about the static variable being returned as a reference was
missing the `return` word.
2017-10-08 23:28:01 +03:00
75316712e7 Fix error messages in sync_slaves
Fixed missing newlines in the error output printf calls of
sync_slaves. Changed the order of commands pers_02 executes to a more
correct way.
2017-10-08 23:26:22 +03:00
c5ff130b33 Process backend packets only once
When the router requires statement based output, the gathering of complete
packets can be skipped as the process of splitting the complete packets
into individual packets implies that only complete packets are handled.

Also added a quicker check for stored protocol commands than a call to
protocol_get_srv_command.
2017-10-08 23:15:18 +03:00
d97742bf66 Fix crash in backend command tracking
The backend protocol command tracking didn't check whether the session was
the dummy session. The DCB's session is always set to this value when it
is put into the persistent pool.
2017-10-08 22:06:43 +03:00
2ca050156f Fix backend protocol command tracking
If a query was processed in the client protocol module when a prepared
statement was being executed by the backend module, the current command
would get overwritten. This caused a debug assertion in readwritesplit to
trigger as the result was neither a single packet nor a collected result.

The RCAP_TYPE_STMT_INPUT capability guarantees that a buffer contains a
complete packet. This information can be used to track the currently
executed command based on the buffer contents which allows asynchronicity
betweent the client and backend protocol. In practice this only comes in
play when routers queue queries for later execution.
2017-10-08 08:52:53 +03:00
b8035a6047 Order members to ensure alignment
8 + 4 + 4 ensures 16 with 8 byte alignment, which means that
'data' is certain to be 8 byte aligned. 4 + 8 + 4 might result
in something else in some funky environment.
2017-10-07 10:01:48 +03:00
b80cf36f1f Fix compilation failure in readwritesplit
The debug assertion was missing a parameter.
2017-10-06 16:43:27 +03:00
9d6c2010b3 Check before clearing statements stored in the session
If the session has no stored statements, there's no need to clear them.
2017-10-06 16:00:10 +03:00
b00964dc54 Allocate shared buffer and its data in one chunk
The GWBUF shared buffer and its data is now allocated in one
chunk so that the data directly follows the shared buffer.
That way, creating a GWBUF will involve 2 and not 3 calls to
malloc and freeing one will involve 2 and not 3 calls to free.
2017-10-06 15:29:58 +03:00
225837cf6e Inline get_backend_from_dcb
The function is used very often so inlining it should help.
2017-10-06 15:05:39 +03:00
27aa435080 Add minor performance improvements to readwritesplit
The multi-statement detection did not check for the existence of
semicolons before doing the heavier processing.

Calculcate the packet length only once for the result state management.
2017-10-06 15:05:39 +03:00
e14234cb1e Clean up get_backend_from_dcb
Replace the original version of the function with the reference version
and use it everywhere. Added runtime assertions to check that an invalid
DCB is never processed.
2017-10-06 15:05:39 +03:00
83b26a986f Make mxs_mysql_get_command inline 2017-10-06 13:46:09 +03:00
8f076be142 Bail out earlier when walking parse tree
No point walking the parse tree, if no information will be
collected.
2017-10-06 12:59:31 +03:00
81f9425c9b Use references instead of copies of SRWBackend
As the DCB passed as the clientReply parameter is guaranteed to match one
of the DCBs in the RWBackends. By using a reference, the need to copy a
shared_ptr is removed (along with the atomic operation that it implies)
thus reducing the overhead in the clientReply and the functions it uses.
2017-10-06 11:34:33 +03:00
5f13f1d358 Fix handling of collected results
The result collection did not reset properly when a non-resultset was
returned for a request. As collected result need to be distinguishable
from single packet responses, a new buffer type was added.

The new buffer type is used by readwritesplit which uses result collection
for preparation of prepared statements.

Moved the current command tracking to the RWBackend class as the command
tracked by the protocol is can change before a response to the executed
command is received.

Removed a false debug assertion in the mxs_mysql_extract_ps_response
function that was triggered when a very large prepared statement response
was processed in multiple parts.
2017-10-06 03:11:27 +03:00
f26203cec4 Make each packet contiguous for RCAP_TYPE_STMT_OUTPUT
As each packet is routed separately, they must be made contiguous before
routing them.
2017-10-06 01:11:18 +03:00
8bcd30ea7c Inline backend related functions
Inlined the getter/setter type functions that are often used. Profiling
shows that inlining the RWBackend get/set functions for the reply state
manipulation reduces the relative cost of the function to acceptable
levels. Inlining the Backend state function did not have as large an
effect but it appears contribute a slight performance boost.
2017-10-06 01:11:18 +03:00
9ece996466 Use custom result set detection functions
The functions that the readwritesplit uses can assume that the buffer
contains only one packet in contiguous memory.
2017-10-06 01:11:18 +03:00
e474b78d95 Remove unnecessary result processing in readwritesplit
The result processing code did unnecessary work to confirm that the result
buffers are contiguous. The code also assumed that multiple packets can be
routed at the same time when in fact only one contiguous result packet is
returned at a time.

By assuming that the buffers are contiguous and contain only one packet,
most of the copying and buffer manipulation can be avoided.
2017-10-06 01:11:18 +03:00
6ba20795b4 Fix GCC7 warnings in cache filter
The thread count did not have enough space for a INT_MAX.
2017-10-06 01:11:00 +03:00
75d298693c Fix GCC7 warnings in binlogrouter
GCC7 reported possible destination buffer overflow in binlogrouter.
2017-10-06 01:11:00 +03:00
c6ed779dcf Fix buffer overflow in test program 2017-10-05 15:15:55 +03:00
8964581f03 Update bug-list of MaxScale 2.2.0 release notes 2017-10-05 14:46:20 +03:00
eca25b06ab Update Change Log for 2.2 2017-10-05 14:45:18 +03:00
3dad78e33a Fix issue processing script
The script now properly processes repeating commas inside double quotes.
2017-10-05 14:11:36 +03:00
6dd9b4f235 Add note about MaxCtrl to release notes
Added a note about MaxCtrl in the release notes.
2017-10-05 13:51:14 +03:00
bbd5fe8288 Fix GTID setup in tests
The GTID setup in tests executed code that was not supposed to be executed
when GTID is in use.
2017-10-05 11:09:09 +03:00
d391db6c2a Fix sync_slaves
The function did not check whether the file name was valid.
2017-10-05 08:23:01 +03:00
8159798d85 Clean up setup_binlog_gtid
Removed redundant operations and cleaned up unused code.
2017-10-05 08:14:39 +03:00
0cb72937cd Disable multi-MaxScale initialization by default
Only tests that require multiple MaxScale instances should enable the
multi-MaxScale mode.
2017-10-05 08:09:58 +03:00
a4271cb94e Order member variable initialization in TestConnections
The variables are now initialized in order and always in the constructor.
2017-10-05 08:06:10 +03:00
a3ba81ddbe Add example to REST API module command documentation
Added an example that demonstrates how to call a module command with
parameters via the REST API.
2017-10-04 14:30:31 +03:00
da2201d16c Use absolute paths in kerberos_setup
The files were located in the vagrant user's home directory but superuser
access is needed to copy them into /etc.
2017-10-04 12:16:01 +03:00
503e768d80 Add methods for changing the active MaxScale instance
The new function allows two MaxScale instances to be controlled via the
same TestConnections object. This will allow testing of Maxscale clusters.
2017-10-04 10:57:12 +03:00
9f74878794 Run smoke tests by default
The tests are now run as the shorter version by default.
2017-10-04 10:34:06 +03:00
7dfa1577fc Use new MaxScale object names in mxs1457_ignore_deleted
The names of the monitors and services in tests that use MaxScale 2.2 need
to use the hyphen-transformed versions of the object names.
2017-10-04 09:02:40 +03:00
9f66278ac2 Fix typo in IP testing database
The test had a typo in the SQL that created the database so the later
queries that referred to it always failed.
2017-10-03 22:32:56 +03:00
54a7051a3f Fix tests broken by the merge
The merge caused compilation failures in two of the files.
2017-10-03 15:14:06 +03:00
4ee5c991c2 MXS-1452: Extend kill parsing test
The test now correctly checks for usernames and integer overflow.
2017-10-03 14:47:16 +03:00
96d160f897 MXS-1452: Add support for KILL USER <name>
Added support for killing queries by username. This will kill all
connections from that particular user on all servers.
2017-10-03 14:47:16 +03:00
4150dee952 Extend KILL parsing test
Added test cases for `KILL [ HARD | SOFT ] [CONNECTION | QUERY ]`.
2017-10-03 14:47:16 +03:00
49b179bf69 Add HARD/SOFT to executed KILL commands
The HARD and SOFT keywords are parsed and added to the executed KILL
commands.
2017-10-03 14:47:16 +03:00
4dd6842447 Send KILL commands to backends
KILL commands are now sent to the backends in an asynchronous manner. As
the LocalClient class is used to connect to the servers, this will cause
an extra connection to be created on top of the original connections
created by the session.

If the user does not have the permissions to execute the KILL, the error
message is currently lost. This could be solved by adding a "result
handler" into the LocalClient class which is called with the result.
2017-10-03 14:47:16 +03:00
a7e610a70a Extract shared session information in LocalClient constructor
When the LocalClient is constructed, it is possible to extract all the
needed information at that time. The only obstacle is the fact that the
LocalClient is constructed at the same time the session is. Since the
client DCB is created before the session, it is safe to extract the shared
data directly from it.
2017-10-03 14:47:16 +03:00
cd83aa40db Stop monitors first when shutting down
As monitors aren't synchronized with the worker threads, they need to be
shut down first.
2017-10-03 14:47:16 +03:00