Skip to content

Commit 9848bac

Browse files
committed
metadata pagination: last page wasn't always handled
Seem like there was a bug in metadata pagination that it was breaking on the notice no next page while no yeilding the parsed rows of that last page in most cases since the defaut of rows per page is 1000 that was enough, but in the case there were more keyspaces then that limit, some of the keyspaces were missed and it was failing the SCT test. Fix: #174
1 parent bf7ad4f commit 9848bac

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

cassandra/metadata.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1982,6 +1982,8 @@ def get_next_pages():
19821982
elif not next_success:
19831983
raise next_result
19841984
if not next_result.paging_state:
1985+
if next_result.parsed_rows:
1986+
yield next_result.parsed_rows
19851987
break
19861988
yield next_result.parsed_rows
19871989

tests/integration/standard/test_metadata.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,13 +1052,38 @@ class Ext1(Ext0):
10521052

10531053
def test_metadata_pagination(self):
10541054
self.cluster.refresh_schema_metadata()
1055-
for i in range(10):
1055+
for i in range(12):
10561056
self.session.execute("CREATE TABLE %s.%s_%d (a int PRIMARY KEY, b map<text, text>)"
10571057
% (self.keyspace_name, self.function_table_name, i))
10581058

10591059
self.cluster.schema_metadata_page_size = 5
10601060
self.cluster.refresh_schema_metadata()
1061-
self.assertEqual(len(self.cluster.metadata.keyspaces[self.keyspace_name].tables), 10)
1061+
self.assertEqual(len(self.cluster.metadata.keyspaces[self.keyspace_name].tables), 12)
1062+
1063+
def test_metadata_pagination_keyspaces(self):
1064+
"""
1065+
test for covering
1066+
https://github.com/scylladb/python-driver/issues/174
1067+
"""
1068+
1069+
self.cluster.refresh_schema_metadata()
1070+
keyspaces = [f"keyspace{idx}" for idx in range(15)]
1071+
1072+
for ks in keyspaces:
1073+
self.session.execute(
1074+
f"CREATE KEYSPACE IF NOT EXISTS {ks} WITH REPLICATION = {{ 'class' : 'SimpleStrategy', 'replication_factor' : 3 }}"
1075+
)
1076+
1077+
self.cluster.schema_metadata_page_size = 2000
1078+
self.cluster.refresh_schema_metadata()
1079+
before_ks_num = len(self.cluster.metadata.keyspaces)
1080+
1081+
self.cluster.schema_metadata_page_size = 10
1082+
self.cluster.refresh_schema_metadata()
1083+
1084+
after_ks_num = len(self.cluster.metadata.keyspaces)
1085+
1086+
self.assertEqual(before_ks_num, after_ks_num)
10621087

10631088

10641089
class TestCodeCoverage(unittest.TestCase):

0 commit comments

Comments
 (0)