Handle setting same keyspace twice

Before this fix, the second "USE system" query would hang until an
OperationTimedOut exception was raised.

Fixes PYTHON-38
This commit is contained in:
Tyler Hobbs
2013-12-13 16:49:18 -06:00
parent 619767cf06
commit caeab27405
4 changed files with 15 additions and 0 deletions

View File

@@ -1177,6 +1177,10 @@ class Session(object):
remaining_callbacks = set(self._pools.values())
errors = {}
if not remaining_callbacks:
callback(errors)
return
def pool_finished_setting_keyspace(pool, host_errors):
remaining_callbacks.remove(pool)
if host_errors:

View File

@@ -322,6 +322,7 @@ class Connection(object):
occurred, otherwise :const:`None`.
"""
if not keyspace or keyspace == self.keyspace:
callback(self, None)
return
query = QueryMessage(query='USE "%s"' % (keyspace,),

View File

@@ -532,6 +532,10 @@ class HostConnectionPool(object):
remaining_callbacks = set(self._connections)
errors = []
if not remaining_callbacks:
callback(self, errors)
return
def connection_finished_setting_keyspace(conn, error):
remaining_callbacks.remove(conn)
if error:

View File

@@ -69,6 +69,12 @@ class ClusterTests(unittest.TestCase):
result2 = session2.execute("SELECT * FROM test")
self.assertEquals(result, result2)
def test_set_keyspace_twice(self):
cluster = Cluster()
session = cluster.connect()
session.execute("USE system")
session.execute("USE system")
def test_default_connections(self):
"""
Ensure errors are not thrown when using non-default policies