Commit Graph

2422 Commits

Author SHA1 Message Date
63141bb191 WIP: Allow the adding of any fds to the poll set
This is just a first step in a trial that will allow the addition
of any file descriptor to the general poll mechanism and hence
allow any i/o to be handled by the worker threads.

There is a structure

  typedef struct mxs_poll_data
  {
      void (*handler)(struct mxs_poll_data *data, int wid, uint32_t events);
      struct
      {
          int id;
      } thread;
  } MXS_POLL_DATA;

that any other structure (e.g. a DCB) encapsulating a file descriptor must
have as its first member (a C++ struct could basically derive from it).

That structure contains two members; 'handler' and 'thread.id'. Handler is a
pointer to a function taking a pointer to a struct mxs_poll_data, a worker thread
if and an epoll event mask as argument.

So, DCB is modified to have MXS_POLL_DATA as its first member and 'handler'
is initialized with a function that *knows* the passed MXS_POLL_DATA can
be downcast to a DCB.

process_pollq no longer exists, but is now called process_pollq_dcb. The
general stuff related to statistics etc. will be moved to poll_waitevents
itself after which the whole function is moved to dcb.c. At that point,
the handler pointer will be set in dcb_alloc().

Effectively poll.[h|c] will provide a generic mechanism for listening on
whatever descriptors and the dcb stuff will be part of dcb.[h|c].
2017-04-20 13:51:16 +03:00
5704ae5ffd Allow paths to be created if they don't exist
A module can now declare a path parameter for a directory that does not
yet exist. If the directory does not exist, MaxScale will create the
directory with the requested permissions.
2017-04-20 13:26:16 +03:00
c3cfc86a7b Merge branch '2.1' into develop 2017-04-19 18:19:13 +03:00
27e97a546d Remove superfluous logging
Just because of a debug build you do not want the transaction
parser to log.
2017-04-19 18:15:56 +03:00
3b4fdbcf32 Fix compilation error 2017-04-18 14:53:12 +03:00
a418387d0a MXS-1218 Poll statistics changed to 64bit to avoid looparound
Statistics calculation, printing and MaxInfo are modified.
n_fds remains 32bit.
2017-04-18 13:14:47 +03:00
a54d6fe816 Add connector plugindir to help output
The output now displays the connector directory.
2017-04-13 17:57:52 +03:00
9e8ddc842c Fix leaks in testconfig 2017-04-06 12:51:09 +03:00
15951423d8 Fix memory errors in test_poll and test_queuemanager
test_poll was calling poll_init() two times since it's already included in
init_test_env().

test_queuemanager was missing a bunch of frees. This doesn't fix it completely,
but removes most of the leaks and valgrind errors.
2017-04-05 17:37:21 +03:00
b1f66d21c8 Fix valgrind-errors in test_filter and test_modutil
Reduces valgrind clutter quite a bit.
2017-04-05 15:04:36 +03:00
ad1c05b015 Merge branch '2.1' into develop 2017-04-05 11:35:13 +03:00
2d987b25b2 Fix test_dcb
Set threadcount to one, don't check validity after freeing.
2017-04-05 10:49:43 +03:00
e0a98f6539 Fix calls of pcre2_substitute
If the output buffer given to pcre2_substitute is too small, an error
value is written to the last parameter (output length). That value
should not be used for calculations. This patch gives a copy as
parameter instead.

Coincidentally, this commit fixes the crashes of query classifier tests.

Also, increase buffer growth rate in utils.c.
2017-04-04 16:19:21 +03:00
dca086571b TestMaxScalePCRE2: Fix memory leaks
Not really leaks, but this reduces needless clutter in the valgrind
output.
2017-04-04 16:18:47 +03:00
8d2d6d8721 Join threads to prevent leaks 2017-04-03 14:20:54 +03:00
a362bd0024 Add parameter backend_connect_attempts to monitor
This number (defaults to 1) sets how many times mon_connect_to_db
will try to connect to a backend before returning an error. Every
connection attempt may take backend_connect_timeout seconds to
complete.

Also refactored code a bit. Renamed mon_connect_to_db to
mon_ping_or_connect_to_db, since it does not connect if the connection
is already alive.
2017-04-03 09:56:22 +03:00
cbc1e864d9 Use RFC 3986 compliant addresses in log messages
When log messages are written with both address and port information, IPv6
addresses can cause confusion if the normal address:port formatting is
used. The RFC 3986 suggests that all IPv6 addresses are expressed as a
bracket enclosed address optionally followed by the port that is separate
from the address by a colon.

In practice, the "all interfaces" address and port number 3306 can be
written in IPv4 numbers-and-dots notation as 0.0.0.0:3306 and in IPv6
notation as [::]:3306. Using the latter format in log messages keeps the
output consistent with all types of addresses.

The details of the standard can be found at the following addresses:

     https://www.ietf.org/rfc/rfc3986.txt

     https://www.rfc-editor.org/std/std66.txt
2017-03-31 14:12:58 +03:00
5c1c89c835 Remove unused buffer types
A part of the buffer types weren't used or provided no real functionality.
2017-03-31 14:12:02 +03:00
8a86efc30e Fix gwbuf_clone
With this change, the test_clone() test in testbuffer.c no longer
causes a leak according to valgrind.
2017-03-30 22:16:51 +03:00
8284716e6a Add test for gwbuf_clone to testbuffer.c
- Under valgrind, this test reveals the leak of gebuf_clone.
2017-03-30 22:14:58 +03:00
29fa4a6088 Fix testbuffer.c
Free memory allocated by tests, so that it is meaningful to run under
valgrind in order to check for GWBUF leaks.
2017-03-30 22:02:34 +03:00
b4c119915b Fix gwbuf_rtrim
- If everything in the first buffer of a buffer chain is consumed,
  then the whole chain and not just the first buffer was freed.

NOTE: gwbuf_rtrim needs to be fixed so that it removes data from the
      tail of a chain and *not* from the end of the first buffer in
      a chain. That cannot ever be what is wanted.
2017-03-30 21:49:57 +03:00
a1d1413b24 Add atomic_add for 64-bit integers.
Now only GCC intrinsics are used.
2017-03-30 12:36:23 +03:00
b458b63756 Use IPv6 for created listeners
When listeners are created, use the default values of [::]:3306.
2017-03-29 17:14:39 +03:00
1901a3bc0a Bind to IPv6 addresses by default
The `::` address covers both IPv4 and IPv6 addresses allowing both IP
versions to be used by default.
2017-03-28 21:25:30 +03:00
58c1c1a3ca Remove BLOCKING_POLL
The code was not correct anymore and correcting it does not seem
worthwhile.
2017-03-27 11:12:37 +03:00
8e24f847e6 Fix compile errors in Centos 6
Fix compile errors in Centos 6
2017-03-27 09:49:21 +02:00
710012ac5d MXS-827: Add connection keepalive
The readwritesplit now sends COM_PING queries to backend servers that have
been idle for too long. The option is configured with the
`connection_keepalive` parameter.
2017-03-26 13:57:25 +03:00
e3bae59e1a Fix C++ issues in debug mode 2017-03-24 12:54:52 +02:00
3755a5a7b0 Compile modulecmd.c as C++ 2017-03-24 11:19:01 +02:00
1e3e09f81c Compile mysql_binlog and mysql_utils as C++ 2017-03-24 11:14:07 +02:00
8d7653bdff Compile listener and ssl as C++ 2017-03-24 11:11:15 +02:00
b04e8b93c9 Compile statistics, thread, users and util as C++ 2017-03-24 11:05:55 +02:00
b5c44be4c8 Add missing MXS_[BEGIN|END]_DECLS 2017-03-24 10:59:05 +02:00
65e36a81bf Compile spinlock.c as C++ 2017-03-24 10:58:19 +02:00
bb1b7f9755 Compile server, service and session as C++ 2017-03-24 10:52:09 +02:00
ec39b54dea Compile secrets.c as C++ 2017-03-24 09:51:56 +02:00
a068c53286 Compile resultset.c as C++ 2017-03-24 09:45:42 +02:00
503c760848 Compile random_jkiss.c as C++ 2017-03-24 09:42:38 +02:00
a9c2580da4 Compile poll.c as C++ 2017-03-24 09:35:11 +02:00
d19ae82a63 Fix rebase 2017-03-24 09:29:53 +02:00
83fd79e280 Compile queuemanager.c as C++ 2017-03-24 09:21:20 +02:00
6acd58e86c Compile monitor.c as C++ 2017-03-24 09:21:20 +02:00
640f0d5139 Compile modutil.c as C++ 2017-03-24 09:21:20 +02:00
44fe995574 Compile mlist.c as C++ 2017-03-24 09:21:20 +02:00
419c55e5be Compile misc.c as C++ 2017-03-24 09:21:20 +02:00
604526667c Compile maxscale_pcre2.c as C++ 2017-03-24 09:21:20 +02:00
96df523ce4 Compile load_utils.c as C++ 2017-03-24 09:21:20 +02:00
a095c80d24 Compile housekeeper.c as C++ 2017-03-24 09:21:20 +02:00
ebf22eee8f Compile hint.c as C++ 2017-03-24 09:21:20 +02:00