589 Commits

Author SHA1 Message Date
Massimiliano Pinto
c55ca0aaee Backed dcb close if now forced after routing COM_QUERY and close client dcb, in mysql_client.c gw_read_client_event
/** close backends connection */
router->closeSession(router_instance, rsession);

Tested only with readconroute router module
2013-10-02 09:27:10 +02:00
vraatikka
440a4c7278 Missing argument in log command caused maxscale to fail. 2013-09-30 12:36:08 +03:00
vraatikka
f74e7b6f79 Cannot compile. 2013-09-30 11:19:03 +03:00
vraatikka
701830f0ab Logging related (mostly) sanity checks and fixes.
- Checked argument types and counts
- Removed trailing line feeds
- Removed thread ids from error logs (they are used in trace / debug log
- Added some state information to dcbs
- Added prefix 'Error' or 'Fatal' to error logs.
- Switches all error logs to use flushing log write.
2013-09-30 11:14:36 +03:00
Massimiliano Pinto
c48dd6028f Modified dcb_read return: n = 0 means 0 bytes read without errors
if (rc < 0) is now used testing dcb_read() return, instead of if (rc <= 0)
2013-09-27 19:24:23 +02:00
vraatikka
e03d2b3ffe In gw_read_client_event, if ioctl returns non-zero and 'b' (number of readable bytes) is zero, that indicates that socket is closed. Thus, read is now skipped and dcb closed if it is in DSC_STATE_POLLING state. 2013-09-27 14:57:53 +03:00
vraatikka
1120ae9b2c Zombie processing had an risk of getting into an infinite loop. 2013-09-27 11:20:28 +03:00
Massimiliano Pinto
46c5564313 Removed states MYSQL_WAITING_RESULT and MYSQL_ROUTING 2013-09-26 18:01:48 +02:00
Mark Riddoch
ee7b799bf1 Bug 160 - fixed memory leaks with telnetd and debug CLI 2013-09-26 17:38:35 +02:00
Mark Riddoch
1e83308cd1 Bug 133 - cleanup data<pid> directory on SIGINT 2013-09-26 16:33:16 +02:00
Mark Riddoch
ab731274fd Bug 218 - add error message if MAXSCALE_HOME does not exist 2013-09-26 13:46:04 +02:00
Mark Riddoch
c26bd04ea7 Addition of messages to standard error if MaxScale refuses to start for some reason 2013-09-26 12:21:45 +02:00
Mark Riddoch
c1c7a3fb02 Additional check for service starts 2013-09-26 10:38:31 +02:00
Mark Riddoch
fe7d0477ba Improved configuration object checking 2013-09-26 10:37:55 +02:00
Mark Riddoch
947fc3509b Make configuration file reading more robust 2013-09-25 17:50:12 +02:00
Mark Riddoch
5d22884a9b Fixed NULL pointer issue 2013-09-25 16:36:54 +01:00
Mark Riddoch
ed7c32fb88 Bug 124 - config file validation 2013-09-25 16:25:12 +01:00
Massimiliano Pinto
44d424adb4 setipaddress uses getaddrinfo
for listening socket different flags are used, detection is based on 0.0.0.0

This will change when supporting multiple binding addresses.
2013-09-25 11:08:39 +02:00
vraatikka
3b647e47ab When there is no load but there are zombies to be cleaned up, it used to take at least nthreads*timeout time to get socket closed. Now in this case, once the timeout exceeds for the first time, all threads are allowed to call dcb_process_zombies without having to wait the timeout period until there are no zombies anymore. 2013-09-25 09:12:18 +03:00
vraatikka
20c4a60f01 Maxscale doesn't assert if tested with different errors in gw_MySQLAccept. 2013-09-24 16:09:11 +03:00
vraatikka
09cc20b7be Improved behavior of debug cli API command 'fail accept'. It takes now _two_ arguments, Syntax:
fail accept <errno> <repeat count>

Changed fail_next_accept from boolean to decreasing counter.
2013-09-24 15:48:59 +03:00
vraatikka
e637ea3844 Merge 2013-09-24 15:16:14 +03:00
vraatikka
3e1322034d Added logging and som checks. 2013-09-24 15:13:25 +03:00
vraatikka
a7c3cd5f30 Related to bug #217, added command 'fail accept <errno>' to debug client's commands.
Reproduce #217 by connecting with telnet to debug client interface and execute command:

fail accept 23

and try to execute read query, for example, with

mysql -h 127.0.0.1 -P 4008 -u maxuser -pmaxpwd -e 'select current_user(), @@server_id'
2013-09-24 15:04:12 +03:00
Massimiliano Pinto
d248ecb180 Added missing parameter in log write, poll_remove_dcb 2013-09-20 18:36:31 +02:00
Massimiliano Pinto
eec0b74191 dcb_printf(pdcb, "\tQueued write data: %d\n", gwbuf_length(dcb->writeq)); is now protected by if (dcb->writeq)
No more segfaults in dprintAllDCBs
2013-09-20 17:53:15 +02:00
vraatikka
3b3d3dbfe0 Merge 2013-09-20 15:05:19 +03:00
vraatikka
302090a168 Removed unused local variable. 2013-09-20 15:03:20 +03:00
vraatikka
74aa3638f9 dcb.c
dcb_final_free: Router session is not closed anymore when dcb is closed. Router session is shared among all dcbs and is closed and freed with session.
	dcb_connect: dcb's state must be switched fro DCB_STATE_ALLOC to DCB_STATE_DISCONNECTED before dcb_final_free can be called for it.
	dcb_close: poll_remove_dcb encapsulates dcb's state transition in the same way as poll_add_dcb. Removed state modification from dcb_close. Read return value of poll_remove_dcb and log accordingly.
	dcb_set state: remove dassert if dcb_set_state_nomutex returned false. False can be returned indicating that intented change didn't occur but the end state, for example, may be acceptable. Failures in state transitions are asserted in dcb_Set_state_nomutex.

poll.c
	poll_add_dcb: dcb state is now set here to either DCB_STATE_LISTENING or to DCB_STATE_POLLING according to dcb's role. Failures in state setting and in epoll_ctl are detected, logged and handled.
	poll_remove_dcb: Failures in state setting and epoll_ctl are detected, logged, and handled.

mysql_client_server_protocol.h 
	Removed macros MYSQL_FAILED_AUTHENTICATION & MYSQL_SUCCESFUL_AUTHENTICATION as they were not necessary and used with constant values 0 and 1 depending on the case.
	Renamed variable 'conn' to 'protocol' in cases where it meant protocol.

mysql_backend.c
	gw_read_backend_event: In case when there was nothing to read or read failed, backend dcb is closed because situation is assumed to be such that backend server closed its side of the socket. Removed macros MYSQL_FAILED/SUCCESFUL_AUTHENTICATION
	gw_create_backend_connection: Assigned protocol with fd which is connected to backend.
	backend_write_delayqueue: In case where dcb_write fails to write anything, close backend dcb to avoid it getting hanging.

mysql_client.c
	gw_read_client_event: Read return value of routeQuery and if it isn't == 1, call mysql_send_custom_error with client dcb and set client's protocol state to MYSQL_IDLE instead of MYSQL_ROUTING.
	gw_MySQLAccept: Static reply counter was erroneously used as a criteria for jumping to return point where return value was constantly 'success' (=0). Replaced static reply counter with private. Fixed return value in different cases.

mysql_common.c
	gw_receive_backend_auth: Changed to return boolean values indicating of success or failue. Used integers which were assigned to macroed values on the caller side. Added length check before accessing buffer. 

readconnroute.c
	Cut too long lines and removed statements with side effects.

skygw_debug.h
	Added macro STRPROTOCOLSTATE(s) to produce string representation of a given protocol state.
2013-09-20 14:32:28 +03:00
Massimiliano Pinto
85ac4d78dd HTTPD is now working:
changed dcb role to DCB_ROLE_REQUEST_HANDLER

removed session_alloc and put client->session = NULL instead
2013-09-19 12:23:17 +02:00
Mark Riddoch
c7b052aab3 Addition of CheckSessions debug entry point 2013-09-18 19:06:32 +02:00
Massimiliano Pinto
ace4252832 Added closeSession to gw_error_backend_event: the backend failure is handled without faults
Modified gw_send_change_user_to_backend ret code
2013-09-18 11:50:19 +02:00
vraatikka
4321861ed8 dcb_read : removed redundant or dead code.
dcb_write: if fail backendfd | clientfd is used, now listener operations don't cause failure.
2013-09-17 21:54:38 +03:00
vraatikka
4cf5b3293f Added check routine for gw_buffer. Only effective in debug build. 2013-09-17 15:10:16 +03:00
vraatikka
5fba84a4ee poll.c : forgot from previous commit
debugcmd.c : cannot compile.
2013-09-17 00:16:06 +03:00
vraatikka
8bf73ea154 Replaced write system function with wrapper gw_write. It allows for generating failures by using telnet commands, fail backendfd, fail clientfd, which are available in debug build only. 2013-09-17 00:07:56 +03:00
vraatikka
db7004e6ae dcb's fd wasn't stored to client's protocol structure. Changed mysql_protocol_init to take fd as the Second argument. 2013-09-14 23:01:26 +03:00
vraatikka
4815856017 session.c : session_alloc
If backend connection can't be created, backend_dcb is not create, router client session is not created and what already is created in session_alloc, is freed.
mysql_client.c : gw_read_client_event
If session creation failed, then - instead of sending ok to client, "failed to create new session" is sent and client dcb is closed.
 : gw_MySQLAccept
removed loop where accept was called again and again. With single thread looping forever is not possible because there's no one to free previously allocated resources.
If accept fails ten times in a row, then return without new client dcb.
2013-09-13 23:55:26 +03:00
vraatikka
710fc5cfa6 dcb.c
: dcb_alloc switched malloc to calloc, dcb->fd is initialized to -1. 
: dcb_process_zombies return value of close(fd) is checked. Closed fds are stored to conn_open array. 
: dcb_connect assigns new fd only if backend connection succeeds. Dcb is added to poll set in the same way, only if connect succeed.
gateway.c : conn_open array is initialized in main. For each created socket, a true is set to corresponding slot. Max. number of slots is 1024.
mysql_client_server_protocol.h : gw_do_connect_to declaration 
mysql_backend.c : gw_create_backend_connection returns rv >= 0 and a protocol which is assigned to backend_dcb. In error, -1 is returned and fd is not set.
mysql_client.c : conn_open array is kept up-to-date and protocol pointer is assigned also to dcb outside mysql_protocol_init.
mysql_common.c : gw_do_connect_to_backend 3rd argument is pointer to fd, not protocol. dcb is added to poll set later in dcb_connect.
skygw_debug.h : define conn_open[1024] array where open connections can be marked in debug build.
2013-09-13 22:10:40 +03:00
Massimiliano Pinto
c3fba63b45 Added break in routeQuery switch, avoiding the execution of default.
This was noticed during PHP tests with mysql_change_user


This bug is related to recent code modification in readconnroute.c, revno > 362

Now fixed
2013-09-13 19:17:20 +02:00
Massimiliano Pinto
b2b715fcae Fixed failed handshake handling, taking care of dcb->delayq before sending reply one time and not twice. 2013-09-13 18:22:24 +02:00
vraatikka
88174865a0 If accept fails due too many open fails, now ENFILE (system level file limit exceeded) and EMFILE (process limit) are separated and logged diffenretly. 2013-09-13 10:10:02 +03:00
vraatikka
ae12ef8f34 Added call to close(fp_tmp) 2013-09-12 23:13:22 +03:00
vraatikka
d7e793a411 poll.c:Returned checks for zombie
mysql_backend.c:don't write to session->client if session->client is NULL
mysql_common.c:assert if called with dcb==NULL
2013-09-12 22:34:49 +03:00
vraatikka
bbc9dcc9a3 poll.c: added maxscale thread id to log
session.c: Replaced free(session->router_sesision) with call to freeSession callback
users.c: Removed reference to uninitialized variable.
router.h: Added freeSession callback to function block.
mysql_backend.c: try to ensure that client dcb is still listening in epoll_wait when writing reply to it.
mysql_common.c: assert debug build is mysql_protocol_init is called with dcb == NULL
readconnroute.c, readwritesplit.c, debugcli.c and testroute.c : Added freeSession to function block and an inmplementation of it.
2013-09-12 22:17:11 +03:00
vraatikka
c4d01cdaed Backend sets session's client pointer to NULL before session_free is called for session. 2013-09-12 22:10:43 +03:00
vraatikka
15adf134c4 Defined LOGFILE_DEBUG for future use. If there will be separate logfile for debug output then macro will be removed. Currently equals with LOGFILE_TRACE. 2013-09-12 22:01:05 +03:00
vraatikka
3841f95531 In error cases, called close(fp). 2013-09-12 22:00:08 +03:00
Massimiliano Pinto
775b318889 Added constants to gw_decode_mysql_server_handshake
Check status of gw_read_backend_handshake and gw_send_authentication_to_backend in gw_read_backend_event
2013-09-12 16:08:31 +02:00
vraatikka
33fc1737d5 One uninitialized read in dcb_set_state_nomutex. One read of freed memory in dcb_process_zombies.
The former may have affected on the program behavior.
The latter left in many cases fds open and dcbs not freed for real.
2013-09-12 10:00:55 +03:00