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:
@@ -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:
|
||||
|
||||
@@ -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,),
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user