Skip to content
This repository was archived by the owner on Apr 27, 2021. It is now read-only.

Commit f2df340

Browse files
authored
Merge pull request apache#596 from datastax/583
PYTHON-583: Add API to get the host metadata associated with the control connection node
2 parents d51f71c + d6b7ddf commit f2df340

3 files changed

Lines changed: 27 additions & 2 deletions

File tree

cassandra/cluster.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1552,6 +1552,14 @@ def _target_type_from_refresh_args(keyspace, table, usertype, function, aggregat
15521552
return SchemaTargetType.KEYSPACE
15531553
return None
15541554

1555+
def get_control_connection_host(self):
1556+
"""
1557+
Returns the control connection host metadata.
1558+
"""
1559+
connection = self.control_connection._connection
1560+
host = connection.host if connection else None
1561+
return self.metadata.get_host(host) if host else None
1562+
15551563
def refresh_schema_metadata(self, max_schema_agreement_wait=None):
15561564
"""
15571565
Synchronously refresh all schema metadata.
@@ -3185,7 +3193,7 @@ def _on_timeout(self):
31853193
if self.is_schema_agreed:
31863194
errors = {self._current_host.address: "Client request timeout. See Session.execute[_async](timeout)"}
31873195
else:
3188-
connection = getattr(self.session.cluster.control_connection, '_connection')
3196+
connection = self.session.cluster.control_connection._connection
31893197
host = connection.host if connection else 'unknown'
31903198
errors = {host: "Request timed out while waiting for schema agreement. See Session.execute[_async](timeout) and Cluster.max_schema_agreement_wait."}
31913199

docs/api/cassandra/cluster.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292

9393
.. automethod:: set_max_connections_per_host
9494

95+
.. automethod:: get_control_connection_host
96+
9597
.. automethod:: refresh_schema_metadata
9698

9799
.. automethod:: refresh_keyspace_metadata

tests/integration/standard/test_control_connection.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ def setUp(self):
3939
"Native protocol 3,0+ is required for UDTs using %r"
4040
% (PROTOCOL_VERSION,))
4141
self.cluster = Cluster(protocol_version=PROTOCOL_VERSION)
42-
self.session = self.cluster.connect()
4342

4443
def tearDown(self):
4544
try:
@@ -65,6 +64,7 @@ def test_drop_keyspace(self):
6564
@test_category connection
6665
"""
6766

67+
self.session = self.cluster.connect()
6868
self.session.execute("""
6969
CREATE KEYSPACE keyspacetodrop
7070
WITH replication = { 'class' : 'SimpleStrategy', 'replication_factor': '1' }
@@ -76,3 +76,18 @@ def test_drop_keyspace(self):
7676
self.session.execute("DROP KEYSPACE keyspacetodrop")
7777
cc_id_post_drop = id(self.cluster.control_connection._connection)
7878
self.assertEqual(cc_id_post_drop, cc_id_pre_drop)
79+
80+
def test_get_control_connection_host(self):
81+
"""
82+
Test to validate Cluster.get_control_connection_host() metadata
83+
"""
84+
85+
host = self.cluster.get_control_connection_host()
86+
self.assertEqual(host, None)
87+
88+
self.session = self.cluster.connect()
89+
cc_host = self.cluster.control_connection._connection.host
90+
91+
host = self.cluster.get_control_connection_host()
92+
self.assertEqual(host.address, cc_host)
93+
self.assertEqual(host.is_up, True)

0 commit comments

Comments
 (0)