Commit Graph

3243 Commits

Author SHA1 Message Date
7776d55963 tpmfilter now prints which server the query has been executed on. 2016-12-20 13:04:01 +02:00
cb243f47a0 Remove usage of LUA_OK
LUA_OK is not defined in Lua 5.1.
2016-12-20 12:40:26 +02:00
036a6de0f1 Cache: Add more storage tests
- Check LRU behaviour
- Limit both by count and size
2016-12-20 10:06:54 +02:00
ec12786f49 Cache: Do not update head when accessing tail
Accessing the tail is only for debugging purposes, so it should not
cause the head item to change.
2016-12-20 10:01:29 +02:00
aae84144ea Add show version command to maxadmin
After upgrades, it is usually useful to see which version of MaxScale is
running. By adding a command, we can see the actual version of the running
daemon process instead of the version of the current binary.
2016-12-19 18:40:14 +02:00
28f828b8a7 Fix luafilter build failure
Lua 5.1 doesn't return the type of the global variable so it has to be
ignored.
2016-12-19 18:40:14 +02:00
31b9018650 MXS-838 Stop readconnroute from routing to servers in maintenance
The routeQuery() in readconnroute now checks for maintenance mode. If
the server is in maintenance, the session is closed, since this router
has no backend swapping capability.
2016-12-19 15:30:15 +02:00
3a3632e75e Cache: Test LRU size limit 2016-12-19 11:46:56 +02:00
83c19c0b1a Cache: Factor out commonality of test[raw|lru]storage.cc 2016-12-19 11:46:56 +02:00
9998f60493 Cache: Specify item count explcitly in tests 2016-12-19 11:46:56 +02:00
43c694020c Cache: Use Tester facilities in testkeygeneration 2016-12-19 11:46:56 +02:00
23556cdfa2 Cache: Allow number of items + sizes to be specified in tests 2016-12-19 11:46:56 +02:00
6e6a3e4626 Replace gwbuf_clone_all with gwbuf_clone
gwbuf_clone cloned only the first buffer of a chain of buffers,
which never can be the desired outcome, while gwbuf_clone_all
cloned all buffers.

Now, gwbuf_clone behaves the way gwbuf_clone_all used to behave
and gwbuf_clone_all has been removed.
2016-12-19 11:00:47 +02:00
875766cf62 Make modutil_create_query parameters const
The parameters to modutil_create_query are not modified so they can be
declared const.
2016-12-19 10:33:55 +02:00
cfaf03de3c Avoid calling nil Lua functions
If a global Lua variable is not a function, it should not be called.

Also cleaned up parts of the code and fixed a minor error reporting bug.
2016-12-19 10:33:55 +02:00
be1b868938 Expose the query classifier through the luafilter
The luafilter exposes two of the main functions provided by the query
classifier API; the type and operation classification.

The functions can be used by the Lua script with minimal overhead as the
current query being executed is stored only as a pointer. The functions
should only be called inside the `routeQuery` entry point of a Lua script.
2016-12-19 10:33:55 +02:00
3509aa144c Fix disable_master_role_setting in galeramon
The functionality to disable setting of master and slave status values to
Galera nodes was broken by the change to the monitoring algorithm.

The disable_master_role_setting option removed the master node which would
trigger the clearing of the replication status values from the node. A
more direct, and arguably better, way is to check that this option is
disabled before processing the status values for the nodes.
2016-12-19 10:33:55 +02:00
269a97b2de Fix DECIMAL handling in Avrorouter
The DECIMAL value type is now properly handled in Avrorouter. It is
processed into an Avro double value when before it was ignored and
replaced with a zero integer.
2016-12-19 10:33:55 +02:00
488a9d24e3 Stop the Avrorouter when MaxScale is shutting down
This allows for a faster controlled shutdown when binary log files are
being indexed.
2016-12-19 10:33:55 +02:00
7e9db7ed0c Have server status updates applied during monitor loop
Previously, server status changes from MaxAdmin would be set immediately
as long as the server lock could be acquired. This meant that it might take
several seconds until the next monitor pass is executed. Usually, this was
fine but in some situations we would want the monitor to run immediately
after the change (MXS-740 and Galera). This patch changes the logic of
setting and clearing status bits to a delayed mode: changes are first applied
to a "status_pending"-variable, and only once the monitor runs will the
setting be applied. To reduce the delay, the monitor now has a flag
which is checked during sleep (between short 0.1s naps). If set, the
sleep is cut short.

If a server is not monitored, the status bits are set directly.

There is a small possibility of a race condition: If a monitor is stopped or
destroyed before the pending change is applied, the change is forgotten.
2016-12-19 10:19:23 +02:00
2b5ec8f162 Pick node with index of 0 as the Galera master
When a Galera cluster loses a member, it will recalculate the
wsrep_local_index values. As the index is zero-based, we can be certain
that in a valid cluster there will always be a node with an index of 0.

If the galeramon can't find a node with an index of 0, it means that
either the cluster hasn't stabilized and there's a pending recalculation
of the index or that there's no connectivity between MaxScale and the node
with the index value 0.

With this change and default settings, active-active MaxScale setups with
Galera clusters should always choose the same node as the master.
2016-12-16 20:04:15 +02:00
d457f9cd03 Cache: Add LRU storage test
Just initial tests; to be expanded.
2016-12-16 12:50:30 +02:00
7a7cfbab36 Cache: Refactor Tester hierarchy
Now that the cache key can be generated using the StorageFactory
there is no need for calling back into the derived class from Tester
to get hold of one. Instead the preparatory work is performed by
the abstract base classes, then the control is moved back to the
derived concrete class that decides what to actually do.
2016-12-16 12:42:45 +02:00
883b82a26a Cache: Use StorageFactory for creating the cache key
Now the preparatory work is done using the storage factory and the
storage instance is created only when the actual testing is performed.
2016-12-16 12:42:45 +02:00
9e89fe9246 Cache: Move key generation to module level
The key generation is dependent upon the storage implemenation,
but not on a particular storage instance.
2016-12-16 12:42:45 +02:00
297b8e1a44 Cache: Implement testrawstorage using TesterRawStorage 2016-12-16 12:42:45 +02:00
80ac69d667 Cache: Add TesterRawStorage class
A class dedicated for performing tests for raw storages.
2016-12-16 12:42:45 +02:00
eda84a1f96 Cache: Add TesterStorage class
A class dedicated for performing basic testing of Storages.
2016-12-16 12:42:45 +02:00
179762ff0a Cache: Add Tester class
A Tester class that simplifies the creation of various cache tests.
It provides the basic mechanisms for reading statements from MySQL/
MariaDB test files, for converting statements into equivalent
cache items (key + statement) and for running various tasks in
separate threads for a specific amount of time.
2016-12-16 12:42:45 +02:00
2751640a02 Adjust for RocksDB behaviour
RocksDB returns success when deleting a non-existing key. To deal
with that the book-keeping of LRUStorage is used and the real
underlying storage is used only if LRUStorage thinks a particular
key exists.
2016-12-16 12:42:45 +02:00
11d1875399 Handle batched reads from cloned sessions
Readwritesplit should route all queries from cloned sessions to the
master. This allows batch statements to be safely routed.

Native readwritesplit sessions only support batched writes as batched
reads aren't very common. Once readwritesplit supports batched reads, the
special handling for cloned DCBs can be removed.
2016-12-16 10:27:56 +02:00
4d431b787a Remove rwsplit transaction tracking
The transaction tracking is done by the client protocol so readwritesplit
doesn't need to do it.
2016-12-16 10:27:56 +02:00
7454ef1d0b MXS-1064: Encryption options to "show service ..."
The binlog encryption options are reported by “show service
$service_name” of binlog router if the encryption is enabled.
2016-12-16 08:48:36 +01:00
f59c6d67c3 Expand testrawstorage
Now also rudimentary tests the LRU mechanism, which at the same
time makes the name a misnomer. These will be split into separate
programs to allow tests to be run individually.
2016-12-15 10:17:39 +02:00
8019bf71e0 Honour max_size also with existing values
If an exiting value is updated and the new size would cause the
maximum size to be exceeded, we must evict items so that we stay
below the boundary.
2016-12-15 10:17:39 +02:00
8864753edf Rename things to make it clearer 2016-12-15 10:17:39 +02:00
c81394445b Cache: Plug some leaks 2016-12-15 10:17:39 +02:00
a8a5bafdb6 Fix pointer manipulation in LRUStorage
The head and tail pointers were not properly updated in
all circumstances.
2016-12-15 10:17:39 +02:00
9f08e1300f Make Cache/Storage const correct
- From the outside, all actions getting data from the cache/storage
  are const.
- Update documentation.
2016-12-15 10:17:39 +02:00
e5cd9ba47e Refactor testrawstorage slightly
Different storage tests will be added to the same file.
2016-12-15 10:17:39 +02:00
f9a7edc7d2 Fix tee filter
With the addition of filter capabilities, the tee filter should work with
all sorts of routers that require at most the RCAP_TYPE_CONTIGUOUS_INPUT
capability.

Due to a recent discovery of the server's capability to process multiple
requests, the filter can safely send data from one service to another
without waiting for the earlier replies.

This also fixes a minor problem with the cloning of DCBs where the backend
DCBs could end up in the wrong thread's pool.
2016-12-14 23:55:33 +02:00
916320cf67 Clean up maxadmin help output
The detailed output of the new help command was a bit too densely packed
for some commands.

Added missing values for the `alter server` command help output.
2016-12-14 11:23:17 +02:00
7047cdf6c6 MXS-867: Key file Key Management for binlog encryption
Binlog server option ‘encryption_key_file=’ can now use the same key
file the MariaDB 10.1 server might have  in my.cnf:
‘file_key_management_filename=‘

Note: the file content must be in clear, no key encryption.
2016-12-13 15:51:43 +01:00
3872cebd09 MXS-1048: Handle backquoted database names
The schemarouter didn't expect backquoted database names for SHOW TABLE
and USE statements.
2016-12-13 13:51:46 +02:00
5e2cbf3809 Cache: Provide access to head, tail, size, items
In order to be able to test the LRU mechanism properly you need
to be able to access the head and tail from the outside. The same
is regarding the size and items in the cache. In order to be able
to test that the guarantees are upheld, you need to be able to
access those values from the outside.
2016-12-13 12:37:28 +02:00
80c77413ba Cache: Do not use random indexes when testing
It would seem that the likelyhood of different threads accessing
the same items at the same time is greater if each thread continuosly
loops across all items from beginning to finish. That will also ensure
that head and tail surely are accessed. In addition, some function names
have been disambiguated.
2016-12-13 12:37:28 +02:00
75b2895ec2 Cache: If LRUStorage is used, create ST real storage
If the underlying storage does not support max_count and/or max_size
and it accordinly is decorated with LRUStorage, then create the real
storage as single-threaded. Since LRUStorage will do locking it is of
no use to do locking in the real storage as well.
2016-12-13 12:37:28 +02:00
651e1122c2 Fix minor issues in testrawstorage
- Release memory
- Set libdir
- Adjust output
2016-12-13 12:37:28 +02:00
f71be685b6 Cache: Test raw storage
Here we create a number of threads and then randomly start getting
putting and deleting values. The intent is to test that the locking
behaviour of the storage modules is correctly implemented.
2016-12-13 12:37:28 +02:00
3cbfd3f1d0 Cache: Create MT storage if that is asked for 2016-12-13 12:37:28 +02:00