Commit Graph

4766 Commits

Author SHA1 Message Date
6c32c7421b MXS-1746 Query global gtid_domain_id instead of session-specific value
The monitor queried the session-specific domain id, which does not follow the global
value while the session is alive. This caused the monitor to follow the wrong gtid
domain if the domain was changed after MaxScale was started. This patch modifies the
query to read the global value instead. Even this is not fool-proof, as existing
sessions can issue writes with the old domain, confusing the gtid-parsing.
2018-03-28 12:23:57 +03:00
46ebf19223 Fix luafilter build failure
The pointer passed to was of the wrong type.
2018-03-27 21:49:35 +03:00
0e968c2b28 MXS-1625 All RouteInfo functionality moved to routeinfo.cc
Provides a clearer separation between what deals with query
classification and what deals with query routing.

Functions have only been moved. No other cleanup has been
done.
2018-03-27 16:08:18 +03:00
279fbf0fbe Fix crash in monitor diagnostics
A const_cast was missing, causing an endless loop.
2018-03-27 13:29:20 +03:00
1d5128fc5b MXS-1703 Move do_show_slave_status() to MariaDBServer
Also took into use the QueryResult helper class.
2018-03-27 12:43:36 +03:00
6535448374 Merge branch '2.2' into develop 2018-03-27 10:17:15 +03:00
3d45d452eb MXS-1734 Add possibility to instruct when to dump statements
With the configuration entry

dump_last_statements=[never|on_close|on_error]

you can now specify when and if to dump the last statements
of of a session.
2018-03-27 09:35:35 +03:00
6d599395d4 MXS-1734 Add statement dumping mechanism
With the configuration entry

   retain_last_statements=<unsigned>

or the debug flag '--debug=retain-last-statements=<unsigned>',
MaxScale will store the specified number of last statements
for each session. By calling

    session_dump_statements(session);

MaxScale will dump the last statements as NOTICE messages.
For debugging purposes.
2018-03-27 09:35:35 +03:00
a4a5641f5b MXS-1703 Add convenience function + class for querying and storing results
An object of the class is returned as an auto_ptr to simplify memory management.
2018-03-26 15:43:54 +03:00
3b26db8e01 MXS-1725 Update luafilter to use session_set_response 2018-03-26 12:17:36 +03:00
e631f64458 MXS-1725 Update DbFWFilter to use session_set_response 2018-03-26 12:17:36 +03:00
c08fe079bf MXS-1725 Use session_set_response() in Cache
- session_set_response() made const correct
- set_response() function added to mxs::FilterSession; calls
  session_set_response().
- Cache uses set_response() for delivering the cache result
  to the client.
2018-03-26 12:17:36 +03:00
33457c7334 Merge branch '2.2' into develop 2018-03-26 10:07:17 +03:00
2bdac88b0b MXS-1738 Copy AF_UNIX data from listener to client dcb
We need to copy some data from a AF_UNIX based listener dcb
to the accepted client dcb, to prevent assertion violation in
dcb_get_port(). Further, to be able to log the path in the case
of an authentication error we need to copy that as well.
2018-03-26 10:06:42 +03:00
cf547b9532 Merge branch '2.2' into develop 2018-03-26 10:03:20 +03:00
033ef59c01 MXS-1733 Match empty values
If a table/database rule has been provided then if the resultset
does not contain table/database names, then we consider it a match
(subject to the column obviously).

Otherwise a rule like

        {
            "replace": {
                "table": "info",
                "column": "email"
            },
            "with": {
                "fill": "*"
            }
        }

could be bypassed with a statement like

    SELECT * FROM info UNION SELECT * from info

as the resultset in that case will not indicate that the column emain
is from info, which it will if the statement is

    SELECT * FROM info;
2018-03-26 10:02:57 +03:00
a350de1275 MXS-1703 Move MariaDBServer to its own file
generate_master_gtid_wait_cmd() is now a method of the Gtid-class.
2018-03-23 13:13:01 +02:00
a5012c6a80 Fix signed/unsigned compilation error 2018-03-22 16:49:36 +02:00
e5dddf5f74 MXS-1703 Clean up monitor main loop function
Several blocks have been moved to their own functions to shorten
the main function.
2018-03-22 15:45:25 +02:00
aa035e4623 MXS-1703 Fix compile error on gcc 4.4
The base class pointer cannot be const since assignment operator
is used with the vector class. Seems to not be an issue with newer
compilers.
2018-03-22 14:28:06 +02:00
65033313a7 MXS-1701: Fix build instructions
Corrected the documentation on building from source and fixed a missing
variable check for the luafilter.
2018-03-22 13:29:28 +02:00
98aa9c8d5b MXS-1475 Fix unit-test program 2018-03-21 15:58:12 +02:00
0b5601a6c8 MXS-1703 Rename MySqlServerInfo, prepare to use it as the primary class
Renamed to MariaDBServer. The objects have a pointer to the underlying
MXS_MONITORED_SERVER. The purpose is to have the monitor mainly use
MariaDBServer instead of the current mix of MXS_MONITORED_SERVER* and
MySqlServerInfo and to simplify the mapping between the two. Also,
many methods can be moved to the MariaDBServer class later on.

Some functions have been converted from MXS_MONITORED_SERVER* to
MariaDBServer.
2018-03-21 15:35:36 +02:00
d03787b2c9 Merge branch '2.2' into develop 2018-03-21 15:33:15 +02:00
bd8b6dbc6f MXS-1722 Add better error messages to switchover_demote_master()
The error messages should now be a bit more reliable.
2018-03-21 15:04:39 +02:00
9c6e15b426 MXS-1719: Fix hang on multi-statement UPDATE
When a multi-statement query consisting completely of UPDATE statements is
received, the packets can be received in two separate buffers. To cope
with this situation, the state change into REPLY_STATE_RSET_COLDEF must
only be done if the buffer contains more than a single packet.
2018-03-21 14:58:09 +02:00
436c563da7 MXS-1729: Allow global routeQuery to return values
The `lua_pcall` parameters were incorrect, the second number signifies the
number of parameters the function can return.
2018-03-21 14:58:09 +02:00
61b93185c5 Remove useless session spinlock
The session level spinlock was useless given the threading model changes
done for 2.1.
2018-03-21 14:15:13 +02:00
8a397f574f Expose modutil_get_canonical in luafilter
Exposing the canonicalization code in the luafilter allows it to be used
on the Lua side of things. This should enable some pretty cool stuff to be
done with it.
2018-03-21 14:15:13 +02:00
092286297e MXS-1719: Fix hang on multi-statement UPDATE
When a multi-statement query consisting completely of UPDATE statements is
received, the packets can be received in two separate buffers. To cope
with this situation, the state change into REPLY_STATE_RSET_COLDEF must
only be done if the buffer contains more than a single packet.
2018-03-21 14:14:16 +02:00
7359774ae1 MXS-1729: Allow global routeQuery to return values
The `lua_pcall` parameters were incorrect, the second number signifies the
number of parameters the function can return.
2018-03-21 14:14:04 +02:00
5112cb4cfc MXS-1703: Stop monitor before reading class data
In theory, the value of m_master could change between reading it to
local variable and stopping monitor. To be on the safe side, stop the
monitor first.
2018-03-20 15:46:06 +02:00
09a22b26c8 MXS-1703 Fix uninitialized pointer in manual switchover
If the current master was given by user, maxscale would crash.
2018-03-20 14:30:15 +02:00
3e0b3db65e MXS-359: Fix master_failure_mode=fail_instantly
The connection was not closed when master_failure_mode=fail_instantly was
used. This caused rwsplit_readonly to fail.
2018-03-20 13:42:25 +02:00
e45759d35d Skip scanning of OK packets if preparing statement
The OK packet that a COM_STMT_PREPARE returns is not a normal OK packet
and need to be skipped as the packet layout is different.
2018-03-20 13:42:25 +02:00
10a9d70851 Get service capabilities from a better source
The DCB pointer in the MySQLProtocol struct doesn't appear to be updated
in all cases which causes it to be an unreliable source. As the session
itself is always available and it always has the service pointer properly
set, it should be used instead.

Also removed the dead protocol compression code and replaced the
parameters with the service capability bits.
2018-03-20 13:42:25 +02:00
20c5ca1619 Make session state change tracking conditional
By making it conditional, we prevent the problems that arise when the
replication protocol is used in combination with the session state change
tracking. In addition to this, it prevents unnecessary work for routers
and filters that don't need it.
2018-03-20 13:42:24 +02:00
f525822472 Merge branch '2.2' into develop 2018-03-20 13:14:54 +02:00
04ca9658c5 Use correct executable name
The test executable name had a typo in it.
2018-03-20 13:11:52 +02:00
ad05019445 Avoid clashes with TRUE/FALSE
TRUE/FALSE may be visible as defines. Consequently better
not to use them as names.
2018-03-20 13:10:31 +02:00
39dff20a0a Use correct callback function in MySQLAuth
The JSON diagnostics function used the non-JSON version of the callback.
2018-03-20 13:07:27 +02:00
1bef791572 MXS-1703 Miscellaneous cleanup
1. Move some remaining class data private.
2. Linebreak long lines.
3. Move current master autoselection inside class method.
4. Remove single-use constant #defines.
5. Monitor status is only written inside loop.
2018-03-19 16:08:28 +02:00
aa260cf6cf MXS-1716 Reduce the amount of duplicate elements in users db for PAM
The database-level query now only takes rows with either a global
select privileges or non-null database privileges. The table-level
query only accepts non-null databases and no global privileges,
as users with global select are added by the previous section.
2018-03-19 15:09:36 +02:00
04666b4b31 MXS-1716 Add diagnostic functions to PAM Authenticator
The functions print the user information. Normal version just prints
user@host, the json-version prints the whole array.
2018-03-19 11:02:14 +02:00
4a6fc6b1c8 MXS-1703 Rearrange functions and methods
Lots of cleanup, but mostly distributing functions/methods to correct files.
2018-03-16 18:35:17 +02:00
3331eb9eb6 MXS-1475 Fix typos 2018-03-16 14:34:04 +02:00
51251fd9f3 MXS-1475 Introduce @maxscale.cache.[soft_ttl|hard_ttl]
Now it is possible to control the soft and hard ttl of the
cache on a session basis. That is, it is possible to use
different TTLs for different SELECTs.
2018-03-16 14:34:04 +02:00
2c49f90bc4 MXS-1475 Allow caller to specify (soft|hard) TTL
As the TTL is checked at lookup time, it need not be hardwired
when the storage instance is created. With this changed it is
possible to introduce @maxscale.cache.(soft|hard)_ttl user
variables using which a client can control what TTL should be
applied for a particular kind of data, which is requested by
MXS-1475.
2018-03-16 14:34:04 +02:00
0ef902621d MXS-1475 Update cache entry if originally present
In case the entry in the cache can not be used because the hard
TTL has kicked in, we fetch the data and update the cache
irrespected of the value if @maxscale.cache.populate. That way
an entry that once was put in the cache, will remain in the cache
(as long as there is space).
2018-03-16 14:34:04 +02:00
4ce894d24d MXS-1475 Report if hard TTL has hit in
If an entry is not returned because the hard TTL had hit in,
we tell about it so that the caller can act differently in that
case.
2018-03-16 14:34:04 +02:00