Commit Graph

8017 Commits

Author SHA1 Message Date
0c45eb5d17 Take SessionCommand into use in readwritesplit
Readwritesplit now uses the SessionCommand class as a "master list" of
executed session commands. This allows the session commands to be easily
copied over to slaves that are taken into use after session commands have
already been executed.

Currently, the code doesn't execute the session command history when a
mid-session reconnection occurs. A method to cleanly copy the session
commands needs to be exposed by the Backend class.
2017-06-22 10:40:17 +03:00
b48bb4fc5e Refactor auxiliary routing functions
Refactored some of the functions used to calculate servers. Removed
redundant checks and moved the ack_write() call to the right place.
2017-06-22 10:40:17 +03:00
1f31cfdfd7 Add more session command related functions to Backend
The class now allows simpler construction of session commands by
overloading the add_session_command with a version that accepts a const
reference to a shared pointer. This removes the need to copy the
references to the source buffer by calling gwbuf_clone.

Exposed the first session command as a const reference to allow
interaction with it. Currently, it is planned to be used to get the
session command position of each backend.
2017-06-22 10:40:17 +03:00
15ef274178 Refactor routing code to use the Backend class
The Backend class is now used to handle the interaction with the backend
servers in the code that decides where each query is routed.
2017-06-22 10:40:17 +03:00
ab56cd0074 Use Backend in readwritesplit.cc
Removed old router property code as it is no longer needed when
SessionCommand class used by the Backend class is taken into use.

Removed unnecessary code that is implemented as a part of the Backend
class.

Changed functions to return references to Backends instead of handling raw
DCBs. This introduces a few cases where the code returns a reference when
no reference is actually available. These cases are solved by having an
empty static shared_ptr that is returned in these cases. This is done to
silence any compiler warnings that returning references to local variables
would bring as these should never happen if the code is functioning
properly.
2017-06-22 10:40:16 +03:00
c3c905f745 Add is_active helper to Backend
The Backend now provides a helper function for checking if the SERFER_REF
is still active.

Also renamed the close_type enum values.
2017-06-22 10:40:16 +03:00
5a5effdf7a Take Backend into use in rwsplit_select_backends.cc
This is the first step to taking the Backend class into use. It is now
used in rwsplit_select_backends.cc and readwritesplit.hh. The module is
not yet functional and doesn't even compile.

Added some helper functions to the Backend class to get easier access to
the server referenced by the SERVER_REF and to check the state of the
backend.
2017-06-22 10:40:16 +03:00
05fef4b23e Duplicate connections to the Backend class
Creating duplicate connections using the Backend class allows the
connections and their handling to be tested at the same time that the old
system is in place. This should make it somewhat easier to grasp what
changes and where when the new implementation is taken into use.
2017-06-22 10:40:16 +03:00
1fcb62895e Add fatal failure checking method to Backend
The method allows the caller to check whether the backend has suffered a
fatal failure.
2017-06-22 10:40:16 +03:00
dc8c20bf6a Store session commands also as SessionCommand
The session commands are now duplicated as SessionCommand objects This
allows for an easier migration from the old session command implementation
to the new one.
2017-06-22 10:40:16 +03:00
18993bc8ca Refactor Backend class states
The states are now internal to the Backend class. This simplifies the use
of the class by moving the burder of state tracking to the class
itself.

Refactored the way the schemarouter uses the Backend class.

Also fixed a memory leak in the schemarouter when `ignore_databases_regex`
was used..
2017-06-22 10:40:16 +03:00
bbfd9ce136 Move Backend and SessionCommand classes to the core
Using the same implementation of the Backend and SessionCommand classes in
both schemarouter and readwritesplit will prevent duplication of code.

This commit only splits the generic parts of the class to a Backend class
which the schemarouter then extends. The session commands for both routers
are similar so they require no special handling.
2017-06-22 10:40:16 +03:00
1ffe04571c Integrate the temporary tables into the router session
Removed the temporary table router property and moved the set of tables
into the router session.
2017-06-22 10:40:16 +03:00
dfc1d0a413 Always include debug members in objects
Having the structures be of the same size with and without debug mode is
beneficial when debugging release binaries.
2017-06-22 10:40:16 +03:00
bd7a26d830 Abstract the session default database
The default database can now be manipulated with a set of functions
exposed by the maxscale/protocol/mysql.h header. This removes the need to
handle the structures themselves in the modules and is a step towards
moving the dcb->data contents inside the session.
2017-06-22 10:40:16 +03:00
93660c19ed Reorganize readwritesplit.cc
Reorganized the main source file of readwritesplit. The internal functions
are first followed by the API entry points. The actual module definition
is the last declared object in the file.
2017-06-22 10:40:16 +03:00
cb7f257ea0 Refactor rewadwritesplit temporary table handling
The temporary table detection and handling now uses C++ containers to
store the set of temporary tables. The detection also uses the new query
classifier field info API to detect which tables and databases are
targeted.
2017-06-22 10:40:16 +03:00
4c1dc9e624 Clean up readwritesplit.hh
Cleaned up the readwritesplit main header. The structs were named to their
typedef names so that no code changes are required. The structs should be
renamed if/when they are converted to proper C++ classes.
2017-06-22 10:40:15 +03:00
f5a0526f2c Use new instead of malloc
Using new instead of malloc is required for proper initialization of C++
classes.
2017-06-22 10:40:15 +03:00
c77dcea807 Compile readwritesplit as C++
Compiling readwritesplit as C++ allows the use of C++ containers.
2017-06-22 10:40:15 +03:00
77f44ba92b Add missing match/exclude functionality to tee
The tee filter was missing the match/exclude functionality that was in the
previous implementation. The filter was upgraded to use PCRE2 regular
expressions instead of POSIX regular expressions.

Documented that the match/exclude patterns should use PCRE2 syntax.
2017-06-22 10:39:24 +03:00
50b2316fa7 MXS-1249: Test json recognition
If the version if >= 10.2.3 recognized/builtin Json function should
be typed as QUERY_TYPE_READ while unrecognized ones should be typed
as QUERY_TYPE_READ | QUERY_TYPE_WRITE.
2017-06-21 13:28:59 +03:00
43895b6f28 MXS-1249: Add json functions
The json function are treated as read-only when the server version
is >= 10.2.3.
https://mariadb.com/kb/en/mariadb/json-functions/
2017-06-21 13:28:59 +03:00
4696c7e662 MXS-1249: Set the server version for qc 2017-06-21 13:28:59 +03:00
33fe89772a MXS-1249: Return service version
Since it is now a single value, the service version can be returned
as a return value instead of via an out-argument. More convenient to
use that way.
2017-06-21 13:28:59 +03:00
dcfe118457 MXS-1249: Qc, the server version is passed as a single integer
To be compatible with how the version is managed elsewhere.
2017-06-21 13:28:59 +03:00
997416ab82 MXS-1249: Server version stored as uint64_t value
That allows the version to be updated and read atomically. If
major/minor/patch are stored as separate variables, you can get an
inconsistent set. Now it may be out of date by the time it is used,
but it will never be internally inconsistent.
2017-06-21 13:28:59 +03:00
4e73aecdef MXS-1249: Modifications after rebase on develop 2017-06-21 13:28:59 +03:00
1034cc51be MXS-1249: Qc, allow setting the server version
In the case of qc_sqlite, the server version may affect how statements
are parsed.
2017-06-21 13:28:59 +03:00
3ef142bfe3 MXS-1249: Remove qc_dummy
Not used for anything and takes time and effort to keep up to date
with the query classifier API.
2017-06-21 13:28:59 +03:00
2a848a63c8 MXS-1249: Also use mxs_mysql_set_version in mmon.c 2017-06-21 13:28:59 +03:00
b8702b8d95 MXS-1249: Add function for getting the "version" of a service
The behaviour of the query classifier needs to change depending
on the version of the servers of a service. With this function
"some" version of the service can be obtained.
2017-06-21 13:28:59 +03:00
c94d9c76fb MXS-1249: Take mxs_mysql_set_server_version into use
The function should actually be in include/maxscale/protocol/mysql.h
and the implementation in MySQLCommon, but the monitors do not link
to that yet.

All MySQL related should be moved to MySQLCommon and the core
refactored so that no MySQL knowledge is needed there.
2017-06-21 13:28:59 +03:00
d927f1d3c6 MXS-1249: Add utility function for setting the server version
Add utility function for setting the server version from a
MySQL handle.
2017-06-21 13:28:59 +03:00
0d784da0ee MXS-1249: Prepare for storing version in server structure
The behaviour of the query classifier needs to be different
depending on the actual version of the server. There is already
a human readable string, but for programmatic use it needs to
be in a format that can easily be parsed.
2017-06-21 13:28:59 +03:00
4a298b4024 Return NULL if no regex parameter is defined
If no regex type parameters are defined and a compiled pattern is
requested, the function will return a NULL value. This allows code that
directly calls the config_get_compiled_regex function to work without
doing additional checks for the presence of optional parameters.
2017-06-21 10:13:47 +03:00
e7161d64b7 Update 2.2 version number 2017-06-20 11:11:18 +03:00
46a04773a4 Merge branch '2.1' into develop 2017-06-20 11:01:08 +03:00
d546d77401 Fix debug assert when closing internal DCB
Internal DCBs don't have file descriptors so the debug assertion needs to
be altered.
2017-06-20 10:46:33 +03:00
b29cda10a2 Merge branch '2.0' into 2.1 2017-06-20 10:45:02 +03:00
469ed1de1b MXS-1271: Remove unnecessary encode call
The trailing newline can be removed from the string without encoding it
first.
2017-06-20 10:40:22 +03:00
d68d3072a8 Make atomic_load_-functions const correct 2017-06-19 14:37:20 +03:00
3e39ec906e Change server version from char pointer to char array
With this change, it is no longer possible that the server version
is deallocated at the very moment it is read. There is still a race,
but it's mostly harmless.
2017-06-19 14:05:26 +03:00
32cd28daf2 Rename MAX_SERVER_NAME_LEN to MAX_SERVER_ADDRESS_LEN 2017-06-19 14:05:26 +03:00
b7a6e4b7b0 Fix HintParser line break detection
The HintParser wrongly ignored linebreaks, causing parsing faults
e.g. parsing too far or accepting invalid comments. Now, the parser
detects a line break and terminates comments unless they started with
'/*'. Also, fixed a memory leak when parsing parameter-value-combinations.
2017-06-19 10:49:47 +03:00
2f090a22fe Fix debug assertion on slave recovery
The amount of expected responses wasn't incremented when the session
command history was replayed on the new slave.
2017-06-17 09:38:46 +03:00
9b556ed160 Enable parts of mxs722 for 2.2
A part of the 2.2 test was disabled even though the functionality can be
tested with 2.2.
2017-06-17 09:38:46 +03:00
729d0a51d9 Fix qlafilter module entry linkage
The module declaration needs to have C linkage. Added the missing
cppdefs.hh include as the first header included by the module.
2017-06-17 09:38:46 +03:00
80103c5a40 Fix test configuration object names for 2.2
The 2.2 object names are converted to hyphen separated forms to make them
REST API conforming.
2017-06-17 09:38:46 +03:00
5351c6c4a9 Fix test compile warnings
A const char pointer was passed as a parameter to a function that used
char pointers.
2017-06-17 08:55:09 +03:00