Details
- 
    Bug 
- 
    Status: Closed (View Workflow)
- 
    Major 
- 
    Resolution: Fixed
- 
    1.1.0
- 
    None
- 
    CentOS 6
Description
Apparently Oracle Connector/Python (http://dev.mysql.com/downloads/connector/python/) sends an "empty" database name when a user doesn't specify one explicitly. This apparently causes schemarouter to hang.
| #!/usr/bin/env python | 
|  | 
| import mysql.connector | 
|  | 
| dbp = { | 
|         'host':'127.0.0.1', | 
|         'user':'kolbe', | 
|         'password':'kolbe', | 
| #        'database':'shard1', | 
|         'port':'3310' | 
|         } | 
|  | 
| cnx = mysql.connector.connect(**dbp) | 
| cnx.autocommit = True | 
|  | 
| cur = cnx.cursor(prepared=False) | 
|  | 
| stmt = "SELECT DATABASE()" | 
|  | 
| cur.execute(stmt) | 
| for (i) in cur: | 
|   print " database: %s " % i | 
| [skysql@max1 ~]$ python mysqltest.mysql_connector.py | 
| ^CTraceback (most recent call last): | 
|   File "mysqltest.mysql_connector.py", line 13, in <module> | 
|     cnx = mysql.connector.connect(**dbp) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/__init__.py", line 162, in connect | 
|     return MySQLConnection(*args, **kwargs) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 129, in __init__ | 
|     self.connect(**kwargs) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 455, in connect | 
|     self._post_connection() | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 434, in _post_connection | 
|     self.set_charset_collation(self._charset_id) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 1122, in set_charset_collation | 
|     charset_name, collation_name)) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 1499, in _execute_query | 
|     self.cmd_query(query) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 722, in cmd_query | 
|     result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 510, in _send_cmd | 
|     return self._socket.recv() | 
|   File "/usr/lib/python2.6/site-packages/mysql/connector/network.py", line 262, in recv_py26_plain | 
|     chunk = self.sock.recv(4) | 
| KeyboardInterrupt | 
If I connect directly to a backend (changed port number in the Python source), I get this expected behavior:
| [skysql@max1 ~]$ python mysqltest.mysql_connector.py | 
|  database: None | 
Here's the trace log for the hang:
| 2015-03-31 04:58:23   schemarouter: Client logging in directly to a database '', postponing until databases have been mapped. | 
| 2015-03-31 04:58:23   Servers and connection counts: | 
| 2015-03-31 04:58:23   MaxScale connections : 7 (7) in   127.0.0.1:3308 RUNNING (only) | 
| 2015-03-31 04:58:23   MaxScale connections : 7 (7) in   127.0.0.1:3307 RUNNING (only) | 
| 2015-03-31 04:58:23   Connected RUNNING (only) in       127.0.0.1:3308 | 
| 2015-03-31 04:58:23   Connected RUNNING (only) in       127.0.0.1:3307 | 
| 2015-03-31 04:58:23   Started Shard Router client session [84] for 'kolbe' from 127.0.0.1 | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb2, information_schema> | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb2, mysql> | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb2, performance_schema> | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb2, shard2> | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb2, test> | 
| 2015-03-31 04:58:23   [84]  schemarouter: <mariadb1, shard1> | 
| 2015-03-31 04:58:23   [84]  schemarouter: Connecting to a non-existent database '' |