Added function poll.c:poll_add_epollin_event_to_dcb which adds given event and related GWBUF to given DCB. The DCB is then added to event queue list so that its even becomes executed as soon as any of the threads start to process events next time.
The problem solved is case where COM_CHANGE_USER failed due to authentication failure. An error should be sent to the client but it was sent once per failed backend authentication instead of just once.
Thread which failed in authentication bypassed router and thus replies weren't filtered out. Solution adds an event and a GWBUF including error message to DCB and the DCB is then added to event queue. Thus the error message appeares like it was an incoming event and becomes processed properly.
An addition was made to mysql_backend.c:gw_read_backend_event so that self-generated event can be processed. Even if socket read doesn't manage to read anything, function proceeds if there is enough data in DCB's readqueue.
Fix ti bug #602, http://bugs.mariadb.com/show_bug.cgi?id=602
Added function sescmd_response_complete which checks if the read data completes session command response packet(s). Function is called only if there's a sessoin command being executed.
Each monitor loops 10 times/second (sleep 100ms) and perform monitoring checks only when monitor's interval is spent. Monitors notice faster if the shutdown flag is set and thus overall shutdown is faster.
hint.c:added missing header
Changed interval from unsigned long to size_t which is guaranteed to be of same size also in windows (if possible).
dcb.c:dcb_process_zombies:added new parameter which tells what DCB the thread will use after calling dcb_process_zombies. Thus, processing that DCB is skipped.
readwritesplit.c:routeQuery:removed double free call for query buffer.
Added a lot of logging to error, trace and message logs which should help the user to handle errors which can't be automatically resolved, like attempt to use nonexisting database.
This implementation doesn't guarantee execution order between session commands and queries
if other backend server lags behind in session command execution.
In poll.c : moved processing of EPOLLERR and EPOLLHUP after processing of EPOLLIN and EPOLLOUT.
This ensures that COM_QUIT messages are read and routed forward before signals arrive (from local client/backend).
Added new argument '-s' which takes additional argument composed of list of logfile identifiers. Logfiles listed with '-s' will be written on main memory instead of disk. In practice, the log file in question will be written in /dev/shm but corresponding symlink is added to log directory. In the case of name conflicts with log files and links, a differentiating sequence number is included in hte name of the file. This, however, is done only when existing file is not writable or is of different type (symlink <> file).
Added new logfile LOGFILE_DEBUG whose contents will be largerly what was included up to date in trace log.
Disabled feature which spreads writes to log files to others because of bug (#338) in the way block buffers are managed.
Changed log manager parameters to match with the current implementation. List of arguments:
"-h - help\n"
"-a <debug prefix> ............(\"skygw_debug\")\n"
"-b <debug suffix> ............(\".log\")\n"
"-c <trace prefix> ............(\"skygw_trace\")\n"
"-d <trace suffix> ............(\".log\")\n"
"-e <message prefix> ............(\"skygw_msg\")\n"
"-f <message suffix> ............(\".log\")\n"
"-g <error prefix> ............(\"skygw_err\")\n"
"-i <error suffix> ............(\".log\")\n"
"-j <log path> ............(\"/tmp\")\n"
"-s <shmem log file ids> ........(no default)\n";
dcb.c
dcb_add_to_zombieslist, add dcb to the front of zombies list instead of inserting to the end of it.
gateway.c
Renamed shutdown_gateway to shutdown_server (Bug #131)
Call skygw_logmanager_init so that trace and debug logs are written to shared memory.
poll.c
dcb.h
Removed some dead code and references to unneeded mutexes.
debugcmd.c
Added enable/disable log command for debug log.
skygw_utils.cc
skygw_file_init now takes optional symlink name as a second argument. Symlink is created to point to the file being created.