Commit Graph

3243 Commits

Author SHA1 Message Date
5085b41d20 Reset persistent MySQL connections
When a persistent connection is taken from the pool, the state is reset
with a COM_CHANGE_USER on the next write. This allows reuse of persistent
connections without having to worry about the state of the MySQL session.
2016-11-01 10:50:07 +02:00
37a2c8cecf Use new function name in blr_slave
The blr_file_use_binlog function no longer exists and blr_file_append
should be used instead.
2016-11-01 10:28:15 +02:00
a9f7e4ac6f Merge branch 'develop' into binlog_server_mariadb_master_encryption 2016-10-31 15:49:48 +01:00
7dd498f0b9 MXS-958: a new binlog file is created after CHANGE MASTER if there is… … no pending transaction
Binlog server is already configured: if there is no pending transaction
a new binlog file is created after CHANGE MASTER.

If as START SLAVE is issued replication starts as usuale.

If maxscale is restarted the replication starts using the new created
file.
2016-10-31 15:20:51 +01:00
69b8cef95c MXS-958: the specified binlog file is created in $binlogdir while configuring binlog server for the first time
While configuring binlog server for the first time, master.ini not
existent, the specified MASTER_LOG_FILE is created in the $binlogdir.

If START SLAVE command is not issued the replication can start after
restarting maxscale as the binlog file exists.
2016-10-31 15:14:23 +01:00
7b4561e3f4 Fix COM_CHANGE_USER handling in MySQLBackend
When a COM_CHANGE_USER statement was executed, the new user credentials
were copied after the authentication message was sent. This caused the
COM_CHANGE_USER to always succeed the first time as it used the current
credentials. The user credentials would always lag behind by one.
2016-10-31 14:56:20 +02:00
6835fe4db9 Use pre-2.1 freeing functions
The binlogrouter code used the new MXS_FREE macro from the 2.1 version.
2016-10-31 14:56:20 +02:00
5ca0c730a1 MXS-960: In BRL, accept passwords with "," in them.
strtok_r replaced with a function that ignores delims that appear
within any of the MySQL quotes.
2016-10-31 11:54:15 +02:00
01f3b35fad MXS-961: error in replication stream and checksum calculation
When checksum is in use and there is an error in replication stream
master connection the blr_terminate_master_replication has no effect.

MXS-961: The checksum detection calls
blr_master_delayed_connect(router); and connection is scheduled again.

The fix will break the main loop as soon as the error indicator byte is
seen and no other computation will be done (such as checksum)
2016-10-31 10:18:22 +02:00
5a1af968d2 Take contiguous input capability into use in filters
The filters which require contiguous input now return the
RCAP_TYPE_CONTIGUOUS_INPUT capability flag.
2016-10-31 08:38:05 +02:00
0f68fa6028 Removing error messages while executing RESET SLAVE
Removing error messages while executing RESET SLAVE
2016-10-28 18:40:18 +03:00
3c26ea16e2 Add and use FindSQLite.cmake
Added a find_package module for SQLite development libraries.
2016-10-28 12:49:18 +03:00
bbade8b736 PCRE2_CODE_UNIT_WIDTH must not be defined. 2016-10-27 15:26:41 +03:00
6cc7a26582 Cache: Add forgotten change 2016-10-27 13:54:22 +03:00
dcfd5b7601 maxrows now handles SHOW statements and SELECT in prepared statements
maxrows now handles SHOW statements and SELECT in prepared statements
2016-10-27 11:34:01 +02:00
0cfb82f146 The MAXROWS_DISCARDING_RESPONSE is handled differently
The MAXROWS_DISCARDING_RESPONSE is handled differently: the OK packet
is sent only after an EOF is seen in a reply even with multiple packet
transmission from the backend
2016-10-27 10:53:07 +02:00
199dd51312 Cache: C_DEBUG removed and debug option extended
The development time C_DEBUG is now removed, and replaced with
a debug option that allows top-level decisions to be logged.
2016-10-27 11:10:36 +03:00
c73c3b390a Addition of MAXROWS_DISCARDING_RESPONSE
Addition of MAXROWS_DISCARDING_RESPONSE

Packets received after sent OK are consumed and not sent
2016-10-27 09:25:08 +02:00
59b3a1fe36 Handle max_resultset_size in maxrows
Handle max_resultset_size in maxrows
2016-10-26 19:20:25 +02:00
7419ddceca Code review update
Code review update
2016-10-26 19:12:56 +02:00
5aa0c32e8f Minor changes
Minor changes
2016-10-26 18:58:07 +02:00
1388686fb7 MXS-957: Fix temporary table detection
Temporary tables which were created from joins with other temporary tables
weren't properly detected as CREATE TEMPORARY TABLE statements.
2016-10-26 17:36:48 +03:00
48af3d21b6 max rows filter first implementation
max rows filter first implementation

Resultsets with more than max_resultset_rows

will be skipped and empty result set is returned to client.
Not yet tested with multi_statements
[MaxRows]
type=filter
module=maxrows
max_resultset_rows=10
debug=15
2016-10-26 15:58:06 +02:00
dc97de57c2 qc: Some minor cleanup
- qc_types_to_string renamed to qc_typemask_to_string
- qc_get_qtype_str removed, duplicate of qc_typemask_to_string
2016-10-26 10:21:11 +03:00
46c2b6e76a Only parse COM_QUERY packets 2016-10-25 20:28:50 +03:00
8391579206 Update cache with new capabilities
Now that a filter can express that the transaction state is tracked,
the cache implementation can be simplified. We do not need to cater
for the case that a "too short" or "too long" a packet would be
delivered.

Further, since the autocommit mode and transaction state of the session
are tracked, the filter can cache data when it is safe to do so. In
practice that means when either AUTOCOMMIT is ON and no explicit
transaction is active or when a READ ONLY transaction is active,
irrespective of the autocommit state.

In principle it would be possible to tentatively cache data during
a transaction, and if the transaction is committed successfully
flush the tentatively cached data to the actual cache, but that will
be for another day.
2016-10-25 16:21:31 +03:00
f961f87e5e Update autocommit mode and transaction state
The transaction state only reflects explicitly started transactions.
Thus, by looking at the autocommit mode and the transaction state a
component can figure out whether the current statement will be committed
or not.
2016-10-25 16:21:31 +03:00
041df39819 Move transaction state management to the right place
The transaction state must be updated after a buffer has been split
into buffer containing individual packets.

NOTE: The actual updating of the transaction state and the autocommit
      mode is currently wrong, but will be updated in a subsequent change.
2016-10-25 16:21:31 +03:00
7e822aed4d MXS-862: Add SQLite based authentication checks
The authentication checks make sure that a user has all the required
grants to access the database. This prevents the creation of unnecessary
backend connections reducing the overall load on the database.

Doing preliminary authentication in MaxScale enables the creation of more
informative error messages.
2016-10-25 13:44:47 +03:00
28ecba4022 Use service capabilities
Now the capabilities of routers and filters alike will be honoured.
2016-10-24 15:19:37 +03:00
3915b4e7c7 Exclude MXS_DEBUG in release builds
Now, MXS_DEBUG turns into a nop in release builds.
2016-10-24 14:00:51 +03:00
d961864635 Fix tests and limit internal test set size
Some of the tests depended on a working installation where modules are all
located at the default paths. These tests now explicitly set the module
directory which fixes the immediate problem.

Disabled the starting of services in the service test as this will fail
with real modules. The dummy internal modules aren't build and should be
removed in a later commit. In general, it might be better to do service
level testing outside the internal test suite.
2016-10-24 13:16:59 +03:00
cff90ffee8 Fix HTTPD protocol authentication
The HTTPD protocol mistakenly assumed that the `authenticator` parameter
of a listener would be NULL if the default authenticator is used.

Recent changes modified it so that the value is never NULL and
`NullAuthDeny` would be used for protocols which did not implement the
auth_default entry point.
2016-10-24 13:16:59 +03:00
367d4407db Fix build failures when using C++11
Some parts of the code weren't C++11 compatible and the build would fail
with newer compilers.
2016-10-24 12:47:05 +03:00
db2cccbd8f Replace getCapabilities() with getCapabilities(void)
The latter means no args, the former means any args.
2016-10-24 11:19:43 +03:00
59a4152d8a Add getCapabilities to filters
Common capabilities are now defined in routing.h. The common
capabilities can be defined using bits 0 - 15.

Router capabilities are defined using bits 16-31 and filter
capabilities (should there ever be such) using bits 32-47.

So, to find out the capabilities of a service you only need to
OR the capabilities of the router and all filters together.

For instance, if a single filter needs statement based routing,
then that is what is done.
2016-10-24 11:19:43 +03:00
0a9662c528 Log authentication failures on warning instead of info level
Logging authentication failures on warning level seems more appropriate
and makes them easier to spot.
2016-10-21 18:33:35 +03:00
aa20385347 Log cached credentials path
Logging the path to the cached credentials should help to the user if
stale cache files are used.
2016-10-21 18:33:35 +03:00
a4a7e806d0 Always replace MySQL users in MySQLAuth
Doing the checksum matching after memory is allocated and all the work is
done is not very efficient. A simpler solution is to always replace the
users when we reload them.

Replacing the users every time the service users are reloaded will not
cause a degradation in performance because the previous implementation
already does all the extra work but then just discards it.

A faster solution would be to first query the server and request some sort
of a checksum based on the result set the users query would
create. Currently, this can be done inside a stored procedure but it is
not very convenient for the average user. Another option would be to
generate a long string with GROUP_CONCAT but it is highly likely that some
internal buffer limit is hit before the complete value is calculated.
2016-10-21 18:33:35 +03:00
8f55cfbc16 Fix cache_dir path handling in MySQLAuth
The path that was given as the option for the cache directory wasn't
properly checked for terminating forward slashes. Due to this, the cache
file was created with the wrong name.
2016-10-21 18:33:35 +03:00
4e07c3313c Move dbusers.c out of the core
The dbusers.c was a MySQL protocol specific file which was used directly
by some of the modules.

Added a new return value for the loadusers authenticator entry point which
allows fatal failures to occur when users are loaded. Currently this is
only taken into notice when the service is first started. If a listener
later returns a fatal error, it is only logged but the service stays in
operation.

Moved the MySQLAuth authenticator sources and the tests that relate to
this module into a subdirectory in the authenticator
directory. Eventually, all authenticators could have a subdirectory of
their own.
2016-10-21 18:33:35 +03:00
fe689504b0 Move service user injection into MySQL authenticator
The MySQL authenticator now injects the service user into the list of
allowed users if loading of database users fails. This allows the removal
of common code in the binlogrouter and maxinfo modules.
2016-10-21 18:33:35 +03:00
693d8dcbb4 Track session autocommit state
This tracks only what is explicitly set. That is, if autocommit
has been set true then, even if a transaction is started, autocommit
will not be set false.

That is, a user of the session autocommit and transaction states
need to be aware of their semantics. If a transaction is active,
then the state of autocommit is irrelevant.
2016-10-21 13:58:51 +03:00
3484b34747 Copy client information also for SSL connection
When a MySQL SSL connection is made, the first packet from the client will
contain the SSLRequest packet. This packet is a truncated normal auth
packet and the real auth packet will be sent after SSL has been
established.

The MySQLClient protocol should read the client information for SSL
connections after SSL has been established.
2016-10-21 11:47:27 +03:00
9ef06c7d2f MXS-650: Use correct package number for error messages
When a client without SSL connected to a listener which requires SSL, the
error message always used the package sequence number 3 even if the
response was the second packet.

Also fixed debug assertions which failed when non-SSL connections were
created to SSL listeners.
2016-10-21 11:24:22 +03:00
d397533e7f MXS-983: Update session transaction state
Not final implementation, we may need to track what response
the server returns.
2016-10-20 23:13:55 +03:00
6bcb3ce4dc Change capabilities to uint64_t
- Since the capabilities are a bitmask, it is better if an unsigned
  integral type is used.
- Since the function is part of an ABI, it is better if an explicit
  size is used.
- 64-bits so that there also is room for independent filter
  capabilities.
2016-10-20 20:14:59 +03:00
d938f0e72f Add custom cache directory for MySQLAuth
The MySQLAuth authenticator can now store the cached credentials in a
custom location. This is intended for the binlogrouter, which currently
uses a different location for the user cache.

The MySQL authentication modules now have their own document in the
Authenticators directory. Right now this document only describes the
general details of the MySQL authentication and the new option.
2016-10-20 09:26:54 +03:00
f1acc1f451 Use the backend server charset
The default character set should be copied from the server so that
MaxScale appears to be the same. This fixes problems where utf8mb4
couldn't be taken into use because MaxScale would always send latin1 as
the server charset.
2016-10-19 15:40:50 +03:00
348143eb6c Remove too aggressive assert 2016-10-19 11:00:26 +03:00