for idx in range(0, 5):
row = list(session.execute("SELECT data from counter_cs where key = {k}".format(k=idx)))
assert rows_to_list(row)[0][0] == 5
+
+ def test_counter_node_down(self):
+ """
+ @jira_ticket CASSANDRA-17411
+ """
+ cluster = self.cluster
+ cluster.populate(3).start()
+ node1, node2, node3 = cluster.nodelist()
+ session = self.patient_cql_connection(node1)
+ create_ks(session, 'counter_tests', 3)
+
+ session.execute("""
+ CREATE TABLE IF NOT EXISTS counter_cs (
+ key text PRIMARY KEY,
+ count counter
+ )
+ """)
+
+ node2.stop(gently=False, wait_other_notice=True)
+
+ for _ in range(0, 20):
+ session.execute("UPDATE counter_cs SET count = count + 1 WHERE key = 'test'")
+
+ row = list(session.execute("SELECT count from counter_cs where key = 'test'"))
+ assert len(row) == 1
import sys
import tempfile
import logging
+import shutil
logger = logging.getLogger(__name__)
if verbose:
logger.debug('getting sizes of these files: {}'.format(files))
return sum(os.path.getsize(f) for f in files)
+
+def copytree(src, dst, symlinks=False, ignore=None):
+ for item in os.listdir(src):
+ s = os.path.join(src, item)
+ d = os.path.join(dst, item)
+ if os.path.isdir(s):
+ shutil.copytree(s, d, symlinks, ignore)
+ else:
+ shutil.copy2(s, d)
logger = logging.getLogger(__name__)
-JOLOKIA_JAR = os.path.join(os.path.dirname(__file__), '..', 'lib', 'jolokia-jvm-1.6.2-agent.jar')
+JOLOKIA_JAR = os.path.join(os.path.dirname(__file__), '..', 'lib', 'jolokia-jvm-1.7.1-agent.jar')
CLASSPATH_SEP = ';' if common.is_win() else ':'
import logging
from collections import OrderedDict
-from distutils import dir_util
from distutils.version import LooseVersion
from cassandra import ConsistencyLevel, InvalidRequest
from dtest import Tester, create_ks
from tools.assertions import (assert_all, assert_almost_equal, assert_none,
assert_row_count, assert_unavailable)
+from tools.files import copytree
since = pytest.mark.since
logger = logging.getLogger(__name__)
version = '2.1' if self.cluster.version() < LooseVersion('3.0') else \
('3.0' if self.cluster.version() < LooseVersion('3.11') else '3.11')
- corrupt_sstable_dir = os.path.join('sstables', 'ttl_test', version)
+ base_dir = os.path.dirname(os.path.abspath(__file__))
+ corrupt_sstable_dir = os.path.join(base_dir, 'sstables', 'ttl_test', version)
table_dir = self.get_table_paths('ttl_table')[0]
logger.debug("Copying sstables from {} into {}", corrupt_sstable_dir, table_dir)
- dir_util.copy_tree(corrupt_sstable_dir, table_dir)
+ copytree(corrupt_sstable_dir, table_dir)
logger.debug("Load corrupted sstable")
node.nodetool('refresh ks ttl_table')
import pytest
import logging
+from cassandra import ConsistencyLevel
+from cassandra.query import SimpleStatement
from dtest import Tester
from tools.assertions import assert_all
session.execute("CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'} ;")
session.execute("CREATE TABLE test.test (a text PRIMARY KEY, b text, c text);")
+ session.cluster.control_connection.wait_for_schema_agreement()
for i in range(1, 6):
- session.execute("INSERT INTO test.test (a, b, c) VALUES ('{}', '{}', '{}');".format(i, i + 1, i + 2))
+ session.execute(SimpleStatement("INSERT INTO test.test (a, b, c) VALUES ('{}', '{}', '{}');".format(i, i + 1, i + 2),
+ consistency_level=ConsistencyLevel.ALL))
assert_all(session,
"SELECT * FROM test.test",
- [[str(i), str(i + 1), str(i + 2)] for i in range(1, 6)], ignore_order=True)
+ [[str(i), str(i + 1), str(i + 2)] for i in range(1, 6)], ignore_order=True,
+ cl=ConsistencyLevel.ALL)
assert_all(session,
"SELECT a,c FROM test.test",
- [[str(i), str(i + 2)] for i in range(1, 6)], ignore_order=True)
+ [[str(i), str(i + 2)] for i in range(1, 6)], ignore_order=True,
+ cl=ConsistencyLevel.ALL)
@since('3.0.14', max_version='3.0.x')
res = list(cursor.execute("SELECT * FROM test LIMIT {}".format(int(nb_keys / 2))))
assert_length_equal(res, nb_keys / 2)
+ @since('2.0', max_version='4.1') # CASSANDRA-8877
def test_collection_function(self):
cursor = self.prepare()
session.execute(prepared, (key))
to_verify_queue.put_nowait((key, count + 1,))
+ except DriverException as dex:
+ if "ID mismatch while trying to reprepare" in str(dex):
+ time.sleep(1) # Pstmnt id mismatch, retry. See CASSANDRA-15252/17140
+ continue
+ else:
+ logger.error("Error in counter incrementer process!", dex)
+ shutdown_gently()
+ raise
except Exception as ex:
logger.error("Error in counter incrementer process!", ex)
shutdown_gently()
except Empty:
time.sleep(0.1) # let's not eat CPU if the queue is empty
continue
+ except DriverException as dex:
+ if "ID mismatch while trying to reprepare" in str(dex):
+ time.sleep(1) # Pstmnt id mismatch, retry. See CASSANDRA-15252/17140
+ continue
+ else:
+ logger.error("Error in counter verifier process!", dex)
+ shutdown_gently()
+ raise
except Exception as ex:
logger.error("Error in counter verifier process!", ex)
shutdown_gently()
r'Unknown column cdc during deserialization',
# may occur during 2.2 check for existing roles
r'Got slice command for nonexistent table system_auth.roles',
+ # file may be read while being written; will be read again when done (CASSANDRA-17749)
+ r'Snitch definitions at cassandra-topology.properties do not define a location',
)
def prepare(self):