This is an automated email from the ASF dual-hosted git repository.

brandonwilliams pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cassandra-dtest.git


The following commit(s) were added to refs/heads/master by this push:
     new ded6a96  Revert "Revert "Add test_truncate_failure""
ded6a96 is described below

commit ded6a967601f554770c533984a42ae841a20943d
Author: Brandon Williams <brandonwilli...@apache.org>
AuthorDate: Wed Oct 21 09:12:37 2020 -0500

    Revert "Revert "Add test_truncate_failure""
    
    This restores test_truncate_failure.
    This reverts commit 016a0eb38db25ab36e1adabbc0bfe9575212b2ec.
---
 byteman/truncate_fail.btm |  8 ++++++++
 cql_test.py               | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/byteman/truncate_fail.btm b/byteman/truncate_fail.btm
new file mode 100644
index 0000000..fa9caba
--- /dev/null
+++ b/byteman/truncate_fail.btm
@@ -0,0 +1,8 @@
+RULE Throw during truncate operation
+CLASS org.apache.cassandra.db.ColumnFamilyStore
+METHOD truncateBlocking()
+AT ENTRY
+IF TRUE
+DO
+   throw new RuntimeException("Dummy failure");
+ENDRULE
\ No newline at end of file
diff --git a/cql_test.py b/cql_test.py
index eced21d..dde7b7d 100644
--- a/cql_test.py
+++ b/cql_test.py
@@ -1,4 +1,5 @@
 import itertools
+import re
 import struct
 import time
 import pytest
@@ -764,6 +765,38 @@ class TestMiscellaneousCQL(CQLTester):
                         [2, None, 2, None],
                         [3, None, 3, None]])
 
+    @since("4.0")
+    def test_truncate_failure(self):
+        """
+        @jira_ticket CASSANDRA-16208
+        Tests that if a TRUNCATE query fails on some replica, the coordinator 
will immediately return an error to the
+        client instead of waiting to time out because it couldn't get the 
necessary number of success acks.
+        """
+        cluster = self.cluster
+        cluster.populate(3, install_byteman=True).start()
+        node1, _, node3 = cluster.nodelist()
+        node3.byteman_submit(['./byteman/truncate_fail.btm'])
+
+        session = self.patient_exclusive_cql_connection(node1)
+        create_ks(session, 'ks', 3)
+
+        logger.debug("Creating data table")
+        session.execute("CREATE TABLE data (id int PRIMARY KEY, data text)")
+        session.execute("UPDATE data SET data = 'Awesome' WHERE id = 1")
+
+        self.fixture_dtest_setup.ignore_log_patterns = ['Dummy failure']
+        logger.debug("Truncating data table (error expected)")
+
+        thrown = False
+        exception = None
+        try:
+            session.execute("TRUNCATE data")
+        except Exception as e:
+            exception = e
+            thrown = True
+
+        assert thrown, "No exception has been thrown"
+        assert re.search("Truncate failed on replica /127.0.0.3", 
str(exception)) is not None
 
 @since('3.2')
 class AbortedQueryTester(CQLTester):


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to