Commit Graph

624 Commits

Author SHA1 Message Date
dd372cda17 Use module parameters in maxrows
The maxrows filter now uses module parameters.
2017-01-09 14:17:33 +02:00
11ab4575c3 Use module parameters in ccrfilter and luafilter
The ccrfilter and luafilter now use the module parameters.
2017-01-09 14:17:33 +02:00
9ba06f7c07 Fix merge issues 2017-01-09 09:37:11 +02:00
e7981c9d67 Masking: Handle NULL values properly 2017-01-09 09:26:43 +02:00
8127454f24 Masking: Add possibility to reload rules 2017-01-09 09:26:43 +02:00
ad4cc7bbac Masking: Add matching and rewriting functionality
This change now ties the pieces together and implements tha
functionality required of the masking filter. Note thought that
this is still work in progress and changes will follow.
2017-01-09 09:25:26 +02:00
224d0bcb35 Masking: Add proper rule matching and data rewriting 2017-01-09 09:25:26 +02:00
f74d267766 Add helper classes for MySQL protocol handling
- LEncInt     : Class for dealing with length encoded integers
- LEncString  : Class for dealing with length encoded strings
- ComPacket   : Base-class for all packet classes.
- ComRequest  : Base-class for all requests.
- ComResponse : Base-class for all responses.
- ComQueryResponse
- ComQueryResponse::ColumnDef
- ComQueryResponse::Row

Common to these all is that they are very thin, and basically only
make it easier to what anyway needs to be done, if the equivalent
is used by directly accessing the packet buffer.

Now these are private for the masking filter, but may be moved under
masxcale/include if/when the general usefulness has been established.
2017-01-09 09:25:26 +02:00
c25c0d688b Masking: Add startup handling to masking filter
- Process parameters
- Create config
- Load rules
2017-01-09 09:25:26 +02:00
dc87663c95 Masking: Add MaskingRules
MXS-910: Initial implementation of rule handling, now only the
parsing of JSON file and the building of corresponding objects.
Rudimentary testing.
2017-01-09 09:19:59 +02:00
8fc5bdc2f1 Perform query classifier initialization implicitly
The setting up and the initialization of the query classifier has
now been separated. The gateway explicitly sets up the query
classifier (i.e. chooses which one to use and what arguments to
provide), but the actual initialization is performed as part of
the general module initialization.
2017-01-09 09:16:35 +02:00
915eeabe25 Use module parameters for cache filter
The cache filter now uses the module parameters. Due to the relative path
support for the `rules` parameter, it is still manually parsed.

The `storage_options` list is also manually parsed. The core could
possible parse simple comma separated lists and return them as a string
array. This should be done in a later commit.
2017-01-05 19:51:22 +02:00
2611f9a701 Give parameters as CONFIG_PARAMETER for FILTER::createInstance
The filters should use the same configuration parameters as other modules
use. This allows them to use the common configuration management functions
to get values from it.
2017-01-05 19:51:22 +02:00
a2a38f952a Add [process|thread] [init|finish] functions to modules
The MXS_MODULDE object now contains optinal pointers for functions
to be called att process and thread startup and shutdown. Since the
functions were added to the end, strictly speaking, all structures
would not have needed to have been modified, but better to be
explicit. In a subsequent change, these will be called.

C++ does not support flexible arrays, so for the time being C++
modules are restricted to 10 parameters. Better approach is to
factor out the parameters to a separate array and then just store
a pointer to that array in MXS_MODULE.
2017-01-05 14:44:02 +02:00
8d219bf8f5 Fix CentOS5 issues 2017-01-04 11:27:57 +02:00
c96bd64aa8 Rename MODULE_INFO to MXS_MODULE
The MODULE_INFO is now the main object which is used by modules to convey
information to the MaxScale core. The MXS_MODULE name is more apt as it
now contains the actual module definition.

The old MODULES structure was moved into load_utils.c as an internal
implementation and was renamed so that it is not confused with the new
MODULE structure.
2017-01-03 18:01:14 +02:00
b00e0328d5 Create a macro for module declarations
The modules are now declared with a common macro. This allows future
additions to the module loading process while also making the loaded
symbol name a constant.
2017-01-03 18:01:13 +02:00
ae0577c695 Move module object inside MODULE_INFO
This allows modules to only expose one entry point with a consistent
signature. In the future, this could be used to implement declarations of
module parameters.
2017-01-03 18:01:13 +02:00
6c53999c97 Combine ModuleInit and GetModuleObject
The two functions can be combined into one as both are called only
once. This removes the need for the explicit ModuleInit function.
2017-01-03 18:01:13 +02:00
7df29aa1ec Move version entry point into MODULE_INFO
The MODULE_INFO can easily hold the version information of the
module. This removes the need for a explicit version entry point.
2017-01-03 18:01:13 +02:00
bbee47ee13 Fix release build breakage 2017-01-03 14:48:11 +02:00
78928dc575 Make session_[getUser|get_remote] const correct
- Rename session_getUser to session_get_user
- Change session_get_user and session_get_remote to take a const
  SESSION* as argument and to return a const char*.
- Change server_get_persistent, so that user is passed as const.
- Update all users of these functions as appropriate.
2017-01-02 16:16:37 +02:00
58dea62e24 Remove Gatekeeper 2017-01-02 10:00:40 +02:00
18008dec6d Rename mxs_mysql_account_to_pcre
The function is not capable of doing the right thing for an entire
account string, but only separately for user and host names, so the
function name should reflect that.
2016-12-29 11:47:08 +02:00
997bec868f Move transforming function to common place
Move function for converting a MySQL account string to an
equivalent PCRE one, from Cache's rules.cc to mysql_utils.
2016-12-29 11:09:06 +02:00
c6e155cf2b Move quote triming function to common place
Function for removing MySQL quote characters surrounding a
string moved from Cache's rules.cc to common place and renamed.

The function was now moved to mysql_utils.[h|c], which is in
maxscale-common, and not to the perhaps more appropriate place
protocol/mysql.h, as the latter would have implied that MySQLCommon
would have to be linked to, which actually might be the right thing
to do. However, that has to wait until protocol/mysql.h gets an
overhaul.
2016-12-29 11:09:06 +02:00
b40872e600 Prefix le[int|str]-functions with "mxs_" 2016-12-29 10:10:11 +02:00
c186956e0e Add skeleton masking filter 2016-12-23 09:05:08 +02:00
65ca6a4be8 MaxRows: 0x0 detection in handle_rows() removed
The 0x0 detection handle_rows was added for MULTI result detection, now
moved in handle_expecting_response.

Additionally 0x0 conflicts with empty string data.

CLIENT_DEPRECATE_EOF is not supported right now
2016-12-22 17:03:57 +01:00
5664321df0 Add username and network address to newSession
The luafilter now provides the username and the network address of the
client for the newSession entry point.
2016-12-22 17:55:05 +02:00
91dd2d9fb8 Cache: Plug a leak
In case the stale item must be refreshed, the stale value must be
freed as it will not be sent to the client.
2016-12-22 17:27:32 +02:00
bc496e94bb Cache: Remove break when converting switch to if 2016-12-22 17:27:32 +02:00
cb73263b93 MaxRows: EOF/OK is not checked while receiving a large packet
EOF / OK packet is not being checked while receiving a large packet.
If so no extra data inspection will be done.
2016-12-22 12:28:23 +01:00
c7dfd1b0bd Cache: Introduce soft and hard TTL
- Hard TTL; the maximum time a value will be used from the cache.
- Soft TLL; the time after which the cache value should be updated
  from the server.

So as not to unnecessarily fetch the same value multiple times, when
the soft TTL has been reached, the value will be updated for the first
client, while all other clients will use the stale value until it has
become updated.

With different soft and hard TTLs there is a definite upper bound for
how old a value can be used.
2016-12-22 12:09:46 +02:00
97fcb94daa Cache: Always return staleness
In order for the LRU storage to correctly track the state in the
real storage, we always need to know stale-state of a returned
(or not returned) value.

The return type is now not an a pure enumeration, but a 16-bit
enumeration plus a 16-bit bitmask that can be used for conveying
more information.
2016-12-22 12:09:46 +02:00
2ea436a5c7 Cache: Test TTL behaviour 2016-12-22 12:09:46 +02:00
69acb8b9aa Cache: Fix review issues 2016-12-22 12:09:46 +02:00
e90f0d31a6 Cache: Pass argument as reference when it must be non-NULL 2016-12-22 12:09:46 +02:00
3f2c6d844b Cache: Use consistent naming in storage imlementations
- CamelCase for all C++ class and template names
- snake_case for all variables, including member variables and
  member functions
  - Static member functions start with a capital letter
- Member variables prefixed with m_
- Static member variables prefixed with s_
- Null terminated character string variables prefixed with z
- Pointers prefixed with p
- Smart-pointers prefixed with s
- Where a z, p, or s prefix is present, the following letter is
  capitalized, i.e., pEntry and not pentry.
2016-12-22 12:09:46 +02:00
3967a0b8c2 Cache: Provide Storage boiler-plate using template
All storage modules must implement the same interface and use the
same exception guards. Consequently that is conveniently provided
using a template.
2016-12-22 12:09:46 +02:00
ee422fd3ec Cache: Provide storage config as an object
Now all storage configuration values are provided in a single object.
That way it'll be easier to provide more if necessary and also makes
it straightforward to fetch the configuration, which makes it possible,
for instance, to adapt tests according to the way the storage has been
configured.
2016-12-22 12:09:46 +02:00
34b3f5c06e Cache: Invert test for capabilities 2016-12-22 12:09:46 +02:00
6da835ee44 MXS-1068: Maxrows filter doesn't count properly the result rows with size greater than16MBytes
16MBytes packets are now handled in MULTI result sets as well.
MAXROWS_DISCARDING_RESPONSE state has been removed.
Two new flags control large packets and result discarding
2016-12-21 10:06:59 +01:00
65b6ba6b1e added a comment explaining log format. 2016-12-20 13:04:01 +02:00
3e6cbeff19 1. Applied changes suggested from Markus.
2. tpmfilter now prints username of the client instead of the hostname
of the target server.
2016-12-20 13:04:01 +02:00
2866ef8dae added default values for options. 2016-12-20 13:04:01 +02:00
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