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

Reply via email to