Skip to content

Commit f295e6e

Browse files
committed
PYTHON-1020: skip virtual tables if not present
1 parent c75fd19 commit f295e6e

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Bug Fixes
55
---------
66
* Improve and fix socket error-catching code in nonblocking-socket reactors (PYTHON-1024)
77
* Non-ASCII characters in schema break CQL string generation (PYTHON-1008)
8+
* Fix OSS driver's virtual table support against DSE 6.0.X and future server releases (PYTHON-1020)
89

910
Other
1011
-----

cassandra/metadata.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2531,12 +2531,27 @@ def _query_all(self):
25312531
self.indexes_result = self._handle_results(indexes_success, indexes_result)
25322532
self.views_result = self._handle_results(views_success, views_result)
25332533
# V4-only results
2534-
self.virtual_keyspaces_result = self._handle_results(virtual_ks_success,
2535-
virtual_ks_result)
2536-
self.virtual_tables_result = self._handle_results(virtual_table_success,
2537-
virtual_table_result)
2538-
self.virtual_columns_result = self._handle_results(virtual_column_success,
2539-
virtual_column_result)
2534+
# These tables don't exist in some DSE versions reporting 4.X so we can
2535+
# ignore them if we got an error
2536+
if isinstance(virtual_ks_result, InvalidRequest):
2537+
self.virtual_keyspaces_result = []
2538+
else:
2539+
self.virtual_keyspaces_result = self._handle_results(
2540+
virtual_ks_success, virtual_ks_result
2541+
)
2542+
if isinstance(virtual_table_result, InvalidRequest):
2543+
self.virtual_tables_result = []
2544+
else:
2545+
self.virtual_tables_result = self._handle_results(
2546+
virtual_table_success, virtual_table_result
2547+
)
2548+
if isinstance(virtual_column_result, InvalidRequest):
2549+
self.virtual_columns_result = []
2550+
else:
2551+
self.virtual_columns_result = self._handle_results(
2552+
virtual_column_success, virtual_column_result
2553+
)
2554+
25402555
self._aggregate_results()
25412556

25422557
def _aggregate_results(self):
@@ -2722,9 +2737,7 @@ def export_as_string(self):
27222737

27232738
def get_schema_parser(connection, server_version, timeout):
27242739
server_major_version = int(server_version.split('.')[0])
2725-
# check for DSE version
2726-
has_build_version = len(server_version.split('.')) > 3
2727-
if server_major_version >= 4 and not has_build_version:
2740+
if server_major_version >= 4:
27282741
return SchemaParserV4(connection, timeout)
27292742
if server_major_version >= 3:
27302743
return SchemaParserV3(connection, timeout)

tests/integration/standard/test_dse.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ def test_dse_5x(self):
4242
def test_dse_60(self):
4343
self._test_basic(Version('6.0.2'))
4444

45+
def test_dse_67(self):
46+
self._test_basic(Version('6.7.0'))
47+
4548
def _test_basic(self, dse_version):
4649
"""
4750
Test basic connection and usage

0 commit comments

Comments
 (0)