580 Commits

Author SHA1 Message Date
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
Massimiliano Pinto
092795d95b in dcb_final_free the dcb->session NULL check protects the access to dcb->session->router_session and all the code below 2013-09-10 15:50:47 +02:00
Mark Riddoch
22e9fb9a4d Bug 194: Crash starting listener if protocol module load fails 2013-09-09 16:33:04 +02:00
vraatikka
6813f760a5 Fix for bug #205 - http://bugs.skysql.com/show_bug.cgi?id=205 . In gw_read_backend_event, read client_protocol by using dcb->session->client pointer but only after it is sure that there is something to write to client. This doesn't ensure that client pointer in session is valid, but it should be.
Return value of dcb_read is checked and buffer pointer is not used if nothing was read.
2013-09-09 15:00:37 +03:00
vraatikka
83a7479236 Removed free(router_session) from closeSession. Router session is free in session.c:session_free. 2013-09-09 14:51:15 +03:00
vraatikka
46464d7723 Check if router_session pointer has value in session structure before calling free for it. 2013-09-09 14:36:45 +03:00
vraatikka
e1d7a5640d Put structure check fields behind SS_DEBUG macros. Thus, they are only included in debug builds. 2013-09-09 10:05:46 +03:00
vraatikka
27338c2537 Merge 2013-09-09 00:05:28 +03:00
vraatikka
189fdf35b8 Major changes: Removed NULL-pointer assignment after the call of backend_dcb->func.close because backend_dcb->func.close calls gw_client_close which _always_ returns true. Thus, its return value can't be used for deciding whether backend_dcb pointer can be set to NULL. There are typically multiple threads executing backend dcb. Setting NULL here will cause next caller to refer to NULL pointer, which makes maxscale to fail.
Removed freeing router session object because it is not know at this phase whether session is really closed or not. Router session can be freed only when session is.
2013-09-08 23:59:00 +03:00
vraatikka
d2a61c3f82 Added some checks and renamed according to changes made in elsewhere. 2013-09-08 23:38:38 +03:00