Commit Graph

2422 Commits

Author SHA1 Message Date
d257a8a905 Compile hashtable.c as C++ 2017-03-24 09:21:20 +02:00
90f56e9dde Compile path.c as C++ 2017-03-24 09:21:20 +02:00
77bc2dd7bb Compile externcmd.c as C++ 2017-03-24 09:21:20 +02:00
9a22d1cb92 Compile filter.c as C++
The contents of the existing filter.cc was copied into filter.c that
subsequently was renamed to filter.cc.

The way the session is called as the last filter in the filter chain
is really dubious and ought to be rearranged so that the blind casting
of a session to a filter and back is not needed.
2017-03-24 09:21:20 +02:00
db18e19d3c Compile dcb.c as C++ 2017-03-24 09:21:20 +02:00
71ae3cf524 Compile config_runtime.c as C++ 2017-03-24 09:21:20 +02:00
74085978b4 Compile config.c as C++ 2017-03-24 09:21:20 +02:00
c84c2dcfbd Compile authenticator.c and buffer.c as C++ 2017-03-24 09:21:20 +02:00
462b572600 Compile atomic.c as C++ 2017-03-24 09:21:20 +02:00
acc61ed13d Compile alloc.c as C++ 2017-03-24 09:21:20 +02:00
f82232eac6 Compile adminusers.c as C++ 2017-03-24 09:21:20 +02:00
1a8ff4b813 MXS-1198: Add configurable listener retry interval
The maximum listener retry interval is now configurable.
2017-03-22 15:52:59 +02:00
dd94374057 Make the getCapabitilies entry point optional
The getCapabilities entry point is no longer required as long as all the
relevant capabilities are added to the static module parameters.
2017-03-22 15:47:37 +02:00
7bd05d4581 Merge branch '2.1' into develop 2017-03-22 15:20:21 +02:00
d0a9571da0 Introduce new qc_parse() prototype
It is now possible to specify what information the caller is interested
in. With this the cost for collecting information during the query parsing
that nobody is interested in can be avoided.
2017-03-22 11:09:36 +02:00
3670edbc78 Spinlock cleanup
- Non-GCC intrinsics alternative implementation removed. Let's worry
  about the absence of the intrinsics once/if that becomes relevant.
- Spinlock release now performed using __sync_lock_release, as per
  svoj's advice.
- while-looping on the variable used as lock removed, so it no longer
  need to be volatile.
- Boolean function returns bool.
- Size of profiling counters increased.
- Risk for division-by-zero removed.
- Documentation moved from implementation to header.
2017-03-21 15:19:10 +02:00
4ca3c19ee3 Use [true|false] instead of [TRUE|FALSE] 2017-03-21 15:17:44 +02:00
0b5d164855 MXS-1167: Skip permission checks for internal services
If a server points to a local MaxScale listener, the permission checks for
that server are skipped. This allows permission checks to be used with a
mix of external servers and internal services.
2017-03-20 11:10:55 +02:00
039f6e3487 Take static module capabilities into use
The static module capabilities are now used to query the capabilities of
filters and routers. The new RCAP_TYPE_NOAUTH capability is also taken
into use. These changes removes the need for the `is_internal_service`
function.
2017-03-20 11:10:08 +02:00
558a264e6d Server list handling functions consistency
The functions handling servers lists now act with a bit more
consistency, always returning the array size instead of NULL-
terminating arrays.
2017-03-20 09:44:14 +02:00
1b418b517c Custom parsing for trx state is now the default
The possibility for turning on query_classifier parsing using
an environment variable is retained as a backdoor for sorting
out potential issues.
2017-03-17 12:30:20 +02:00
b52cc4e56b Take modutil_MySQL_bypass_whitespace into use 2017-03-17 11:54:00 +02:00
7469c5be52 Add functionality for bypassing MySQL whitespace/comments
This functionality is needed both in the query classifier, where
it was first created, and in the cache.
2017-03-17 10:27:16 +02:00
67590d59ac Fix connector_plugindir usage with basedir
The connector_plugindir wasn't set correctly when basedir was used.
2017-03-15 17:37:25 +02:00
3129efb3f7 Add new parameter type MXS_MODULE_PARAM_SERVERLIST
This is a list of servers, separated by commas. When queried as a
config setting, returns a null-terminated array of SERVER*:s. The
commit includes a serverlist parsing function, which should probably
be used anywhere a similarly formed string is parsed.
2017-03-15 11:48:46 +02:00
5e39268e37 Remove support for TrxBoundaryMatcher
For the general case, regex matching simply will not do. The
regex becomes so hairy so it turns write-only, i.e. unmaintainable.
Regex matching is also slower than a handwritten custom parser.
2017-03-15 10:39:26 +02:00
1c8205e005 Add missing flag handling 2017-03-15 10:25:02 +02:00
c51cd8858d Minor optimizations to TrxBoundaryParser 2017-03-15 10:20:35 +02:00
96f0321b7e Add program for profiling TrxBoundaryParser 2017-03-15 09:35:15 +02:00
9a33cf4d3e Add smoke-test for qc_get_trx_type_mask_using
Use the query classifier test files and compare that the
result returned by qc_sqlite and the custom parser agree
for every statement.
2017-03-15 09:35:15 +02:00
cab176b149 Fix handling of AUTOCOMMIT=ON 2017-03-15 09:35:15 +02:00
87d84bc81c Ignore implicit commits 2017-03-15 09:35:15 +02:00
c2add97e30 Recognise various autocommit syntaxes
set autocommit=1
set global autocommit=1
set session autocommit=1
set @@global.autocommit=1
set @@session.autocommit=1
2017-03-15 09:35:15 +02:00
470de51e22 Handle whitespace in TrxBoundaryParser
TheBoundaryMatcher is not updated as it is likely it will be removed
altogether. A regex that accepts comments in all relevant places becomes
so hairy it is unmaintainable. It seems that the only working solution
would be to first remove all comments and then perform the regex.
2017-03-15 09:35:15 +02:00
931f765df5 Enhance transaction tracking test 2017-03-15 09:35:15 +02:00
f8a0ca25a4 Regex accept WITH CONSISTENT SNAPSHOT 2017-03-15 09:35:15 +02:00
212be78ece Make first a crude check, then a detailed one
Before checking whether a particular regex matches a statement
we check with one general one whether it at all is possible that
a statement might match.

Since most statements will not be transaction related it makes
sense to first check whether it at all is possible that the
statement might be transaction related.
2017-03-15 09:35:15 +02:00
d5fc54a9de Handle WITH CONSISTENT SNAPSHOT as well
TrsBoundaryParser now capable of parsing WITH CONSISTENT
SNAPSHOT transaction statements as well.
2017-03-15 09:35:15 +02:00
35132f3afe Take TrxBoundaryMatcher into use
The code that used to be in query_classifier.cc is now in
trxboundarymatcher.cc.
2017-03-15 09:35:15 +02:00
faa0dea2ce Add TrxBoundaryMatcher
A class capble of detecting statements that change the transaction
state and autocommit mode. The detection is done using regexes.

There is still some expanding and optimization to be done.
2017-03-15 09:35:15 +02:00
a85ce2e915 Take TrxBoundaryParser into use 2017-03-15 09:35:15 +02:00
74fe9fb911 Add class TrxBoundaryParser
A class capble of detecting statements that change the transaction
state and autocommit mode.

There are still some expansion and optimization to be done.
2017-03-15 09:35:15 +02:00
ddca19767c Compile query_classifier.c as C++
In preparation for some modifications that are easier done using
C++.
2017-03-15 09:35:15 +02:00
8e81941058 Enable trx boundary detection using regexes
Transaction boundaries can now be detected using regexes.
All else being equal, it gives a 10% performance improvement
compared to qc-based detection.

In a subsequent change, mysql_client.c will be modified to use
qc_get_trx_type_mask() instead of qc_get_type_mask().

Currently the use of regex matching is turned on using an
environment variable. That will change.
2017-03-15 09:35:15 +02:00
0985a18a7e Perform internal qc initialization 2017-03-15 09:35:15 +02:00
a58f944f23 Allow query classifier to initialize itself
The process and thread initialization/finalization of the query
classifier plugins is handled using the process and thread
initialization/finalization functions in the module object.

However, the top-level query classifier will also need to perform
process and thread initialization when transaction boundaries are
detected using regular expressions.
2017-03-15 09:35:15 +02:00
669d6e95f4 Change 'localhost_from_socket' to 'localhost'
With the former you cannot log in over domain sockets.
2017-03-15 09:34:12 +02:00
d19e5b376d MXS-1032: Add configurable connector plugin directory
The connector plugin directory can now be controlled with the
`connector_plugindir` argument and configuration option. This should allow
the connector to use the system plugins if the versions are binary
compatible.

Replaced calls to mysql_options to mysql_optionsv as the former is
deprecated in Connector-C 3.0 and the latter is supported in Connector-C
2.3.
2017-03-15 09:11:18 +02:00
dd82c46596 Remove two checks that always return false
At the point this function is called, the servers and services are
not yet created.
2017-03-14 11:09:54 +02:00
7b3c287ac3 Close sessions in MaxScale core
The core now provides a simple function to close a session. This removes
the need for the modules to directly call the API entry points when the
session should be closed. It is also in line with the style that other
objects, namely the DCBs, use. This makes the new session_close very
similar to dcb_close.
2017-03-14 10:45:10 +02:00