Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
3.0.4
-
None
-
None
-
Ubuntu artful, ppc64le, p9
Description
Version from mariadb-server-10.3 branch built last week
dpkg -l | grep mariadb-dev
|
ii libmariadb-dev 10.3.6+maria~artful ppc64el MariaDB database development files
|
Stracing sysbench liked against libmariadb-dev:
$ egrep -v '(send|recv)' sysbench-oltp_read_only-64-mysqld-n8-1_split12.strace | grep -C 10 -i failed
|
56416 fcntl(11, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
|
56416 connect(11, {sa_family=AF_UNIX, sun_path="//var/run/mysqld//mysqld-n8-1.sock"}, 110) = -1 EAGAIN (Resource temporarily unavailable)
|
56416 poll([{fd=11, events=POLLOUT}], 1, -1) = 1 ([{fd=11, revents=POLLOUT|POLLHUP}])
|
56416 getsockopt(11, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
|
56416 fcntl(11, F_SETFL, O_RDONLY) = 0
|
56416 setsockopt(11, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported)
|
56416 setsockopt(11, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
|
56416 close(11) = 0
|
56416 write(1, "FATAL: unable to connect to MySQL server on socket '//var/run/mysqld//mysqld-n8-1.sock', aborting...\n", 101) = 101
|
56416 write(1, "FATAL: error 2013: Lost connection to MySQL server at 'handshake: reading inital communication packet', system error: 22\n", 121) = 121
|
56416 write(1, "FATAL: `thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:352: connection creation failed\n", 112) = 112
|
The EAGAIN was returned by the connect syscall.
In https://github.com/MariaDB/mariadb-connector-c/blob/master/plugins/pvio/pvio_socket.c#L614 its handled like EINPROGRESS where eventually via poll (pvio_socket_wait_io_or_timeout) a file the connection will be ready.
Looking at linux source (net/unix/af_unix.c) this happens when the recv queue is full. When this state the socket isn't in a connected state and polling it won't make it connect.
So options are:
- connect code should EAGAIN be handled like EINTR and another attempt is made and the server clears its backlog
- attempt again while within timeout period
- an immediate error return