Repository: cassandra-dtest Updated Branches: refs/heads/master bd419a7ae -> e426ce1da
Add test for CASSANDRA-14646: built_views entries are not removed when dropping keyspace Project: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/commit/e426ce1d Tree: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/tree/e426ce1d Diff: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/diff/e426ce1d Branch: refs/heads/master Commit: e426ce1daa1d52983b8823388e568e5097254c0c Parents: bd419a7 Author: Zhao Yang <zhaoyangsingap...@gmail.com> Authored: Tue Aug 14 16:31:12 2018 +0800 Committer: Paulo Motta <pauloricard...@gmail.com> Committed: Thu Aug 16 12:01:10 2018 -0300 ---------------------------------------------------------------------- materialized_views_test.py | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/e426ce1d/materialized_views_test.py ---------------------------------------------------------------------- diff --git a/materialized_views_test.py b/materialized_views_test.py index f843dc8..717d799 100644 --- a/materialized_views_test.py +++ b/materialized_views_test.py @@ -169,6 +169,81 @@ class TestMaterializedViews(Tester): result = list(node_session.execute("SELECT count(*) FROM system.batches;")) assert result[0].count == 0 + def _assert_view_meta(self, session, views, exists=True, nodes=2): + if exists: + assert_one(session, "SELECT COUNT(*) FROM system.built_views", [views]) + if self.cluster.version() >= '3.11': + assert_one(session, "SELECT COUNT(*) FROM system_distributed.view_build_status", [views * nodes]) + else: + assert_none(session, "SELECT * FROM system.built_views") + if self.cluster.version() >= '3.11': + assert_none(session, "SELECT * FROM system_distributed.view_build_status") + assert_none(session, "SELECT * FROM {}".format(self._build_progress_table())) + + def test_view_metadata_cleanup(self): + """ + drop keyspace or view should clear built_views and view_build_status + """ + session = self.prepare(rf=2, nodes=2) + + def populate_data(session, rows): + logger.debug("populate base data") + for v in range(rows): + session.execute("INSERT INTO t(k,c,a,b,e,f) VALUES({v},{v},{v},{v},{v},{v})".format(v=v)) + + def verify_data(session, rows, views): + logger.debug("verify view data") + for v in range(rows): + for view in range(views): + assert_one(session, "SELECT * FROM mv{} WHERE k={v} AND c={v}".format(view, v=v), [v, v, v, v, v, v]) + + def create_keyspace(session, ks="ks1", rf=2): + create_ks(session, ks, rf) + + def create_table(session): + logger.debug("create base table") + session.execute("CREATE TABLE t (k int, c int, a int, b int, e int, f int, primary key(k, c))") + + def create_views(session, views, keyspace="ks1"): + logger.debug("create view") + for view in range(views): + session.execute("CREATE MATERIALIZED VIEW mv{} AS SELECT * FROM t " + "WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (c,k)".format(view)) + for view in range(views): + self._wait_for_view(keyspace, "mv{}".format(view)) + + def drop_keyspace(session, keyspace="ks1"): + logger.debug("drop keyspace {}".format(keyspace)) + session.execute("DROP KEYSPACE IF EXISTS {}".format(keyspace)) + + def drop_views(session, views): + logger.debug("drop all views") + for view in range(views): + session.execute("DROP MATERIALIZED VIEW IF EXISTS mv{}".format(view)) + + rows = 100 + views = 5 + + create_keyspace(session) + create_table(session) + populate_data(session, rows) + create_views(session, views) + verify_data(session, rows, views) + + self._assert_view_meta(session, views) + drop_keyspace(session) + self._assert_view_meta(session, views, exists=False) + + create_keyspace(session) + create_table(session) + populate_data(session, rows) + create_views(session, views) + verify_data(session, rows, views) + + self._assert_view_meta(session, views) + drop_views(session, views) + self._assert_view_meta(session, views, exists=False) + def test_create(self): """Test the materialized view creation""" session = self.prepare(user_table=True) @@ -1099,6 +1174,7 @@ class TestMaterializedViews(Tester): except InvalidRequest: failed = True self.assertTrue(failed, "The view shouldn't be queryable") + self._assert_view_meta(session, views=1, exists=False) logger.debug("Create the MV again") session.execute(("CREATE MATERIALIZED VIEW t_by_v AS SELECT * FROM t " --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org