Commit Graph

555 Commits

Author SHA1 Message Date
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
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
8bf1e50479 Cache: Provide access to raw storage
In order to be able to test the underlying storage separately
direct access to it must be provided (without intermediate LRU
storage).
2016-12-13 12:37:28 +02:00
423b54ef82 Cache: 0 is now default of integer parameters
0 is now the default of all cache configuration parameters and in
all cases the meaning is the same; that is, no limit. Internally
all limits but ttl are now for the sake of consistency 64-bit.
2016-12-13 12:37:28 +02:00
e1a1c8b1cd Cache: Add key generation test
Smoke test for detecting errors in key generation. The input file
is a number of .test-files from the server combined into a single
one. We simply check that a unique key is generated for each
statement.
2016-12-13 12:37:28 +02:00
4239182aa0 Fix diagnostics on filter template
Diagnostics can be required on both instance and session level,
so both cases need to be handled explicitly.

In addition, some reinterpret_casts were changed into static_casts.
Reinterpret_cast needs to be used with the instance, which is a
void** but static_cast is sufficient for the session, which is void*.
2016-12-13 12:28:31 +02:00
ff4d56813e MaxRows filter can handle 16MBytes packets
16 MBytes and larger packet are handled.
Note: a 16MBytes packet is seen as a row by the filter.
2016-12-12 22:00:11 +01:00
9519be5e60 Cache: Use auto_ptr in storage_inmemory 2016-12-09 13:08:10 +02:00
16fad9c2cd Cache: Make storage_rocksdb exception safe
Now RocksDBStorage is exception safe in its own right, so exception
guards are only needed at the C/C++ boundary.
2016-12-09 13:08:10 +02:00
bf35577941 Cache: Take MXS_EXCEPTION_GUARD into use 2016-12-09 13:08:10 +02:00
ce94170eae Rename maxscale/cpp.hh to maxscale/cppdefs.hh
Just like every c-header must include maxscale/cdefs.h as the first
file, every C++-header must include maxscale/cppdefs.hh as its first
header.
2016-12-09 13:08:10 +02:00
f871664796 Cache: Rename all C++ headers from *.h to *.hh
Also remove some superfluous files and old include guards.
2016-12-09 13:08:10 +02:00
3877d7bc5e Cache: Derive CacheFilter class from maxscale::CacheFilter
Now everything needed for cleanly transfer the control between the
C filter API of MaxScale and a C++ filter implementation is handled
automatically. Nothing of the earlier boiler-plate code is needed.
2016-12-09 13:08:10 +02:00
c421026ce9 Cache: Minor cleanup 2016-12-09 13:08:10 +02:00
e574af7e6e Cache: Derived CacheFilterSession from maxscale::FilterSession 2016-12-09 13:08:10 +02:00
8bbe80df99 Cache: Use MXS_EXCEPTION_GUARD and maxscale::SpinLockGuard 2016-12-09 13:08:10 +02:00
c9bc7a6e76 Cache: Separate C and C++ functionality
cache_storage_api.h contains pure C declarations, while
cache_storage_api.hh contains C++ declarations. Functions dealing
with CACHE_KEY moved to these headers.
2016-12-09 13:08:10 +02:00
528531f3b5 Cache: SessionCache renamed to CacheFilterSession 2016-12-09 13:08:10 +02:00
fcd737a0c9 Cache: It is a hit, also when a stale item is returned
Also add asserts for impossible cases.
2016-12-09 13:08:10 +02:00
fab7accef3 Cache: Collect RocksDB statistics 2016-12-08 14:58:59 +02:00
90e16d79c5 Cache: Collect storage_inmemory statistics 2016-12-08 14:58:59 +02:00
941f0f9001 Cache: Collect LRU statistics 2016-12-08 11:26:46 +02:00
e0bedad46e Cache: Add information facilities
Various components of the cache can now provide information in
the form of a JSON object that then can be further processed.
2016-12-08 11:26:46 +02:00
8f2170c455 Add show command to cache filter
Initial POC implementation that is capable of outputting the
rules of the cache.

In order to do that conveniently, the json object is retained for
the lifetime of the CACHE_RULES object.
2016-12-08 11:26:46 +02:00
a64825c866 Additions to QLA filter.
MXS-848 (partially). The QLA-filter now has additional options
to control the printing.
1. "append"
This toggles append-mode, where the filter opens the log files in
update mode (if file already existed) and only adds text to the end.
2. "print_service"
This toggles writing the service name onto each row. Mostly useful
with the unified_file-setting.
3. "print_session"
This toggles writing the session number onto each row. Mostly useful
with the unified_file-setting.

Also, the filter now writes a header to the beginning of the file
when creating it.

The printing has been separated to its own helper-function, in case
more accurate control will be added in the future.
2016-12-05 12:46:54 +02:00
a4bc575353 Remove direct freeing of sessions
Sessions are now always freed by releasing the last reference to it.
2016-12-02 15:19:44 +02:00
3ed4ef40ba Do not use PRIu[32|64] macros in C++ code 2016-12-02 10:04:57 +02:00
582948e690 Add UINT[32|64]_MAX defines 2016-12-02 09:32:14 +02:00
a6df875495 Make filter const correct and use snake case
CamelCase is still in use with the printing functions.
2016-12-01 15:20:34 +02:00
24af4b3225 Clean up hintfilter
The hintfilter no longer needs to process the queries into one buffer as
the client protocol will handle that.
2016-11-30 12:37:36 +02:00
7ac31b2674 Cache: Now implements destroyInstance 2016-11-30 10:47:24 +02:00
2efa862944 Remove listmanager code
The code prevented scaling by imposing global spinlocks for the DCBs and
SESSIONs. Removing this list means that a thread-local list must be taken
into use to replace it.
2016-11-30 10:28:23 +02:00
9175295542 Cache: Now also CacheRules is shared
Unnecessary methods were also removed from CachePT and CacheMT
as it does not make sense to create more than one single instance
of those per filter instance. Consequently there is no need for
them to be able to use an existing StorageFactory (and CacheRules).
2016-11-30 10:22:53 +02:00
93103fd64a Cache: shared_ptr used with CacheRules and StorageFactory
shared_ptr is now used for managing the lifetime of CacheRules
and StorageFactory instances.
2016-11-30 10:22:53 +02:00
d52145054f Cache: Now use CacheRules instead of CACHE_RULES 2016-11-30 10:22:53 +02:00
2e4ac55aa4 cache: Add CacheRules class
Easier to use in a C++ context than the C API
2016-11-30 10:22:53 +02:00
2a2c530857 Cache: Trivial cleanup of inmemory storage 2016-11-30 10:22:53 +02:00
2423031df8 Cache: Use lock guard for locking spinlocks
Now the locks will always be release, also in the presence of an
unantecipated exception.
2016-11-30 10:22:53 +02:00