Skip to content
Permalink
Browse files
Add test_truncate_failure
Patch by Ekaterina Dimitrova, reviewed by brandonwilliams for
CASSANDRA-16208
  • Loading branch information
ekaterinadimitrova2 authored and driftx committed Oct 14, 2020
1 parent 9500cb9 commit 8cb6bd23e62c4d3b4e208d3909361d6812182bc6
Showing 2 changed files with 41 additions and 0 deletions.
@@ -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
@@ -1,4 +1,5 @@
import itertools
import re
import struct
import time
import pytest
@@ -764,6 +765,38 @@ def test_drop_compact_storage_flag(self):
[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):

0 comments on commit 8cb6bd2

Please sign in to comment.