You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by zz...@apache.org on 2017/07/13 00:15:13 UTC
[02/50] cassandra-dtest git commit: CASSANDRA-13294
CASSANDRA-13294
Project: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/commit/eb3b5749
Tree: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/tree/eb3b5749
Diff: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/diff/eb3b5749
Branch: refs/heads/master
Commit: eb3b5749ef4f22460365ad8369ff668d68c5d85b
Parents: 6bb074f
Author: Marcus Eriksson <ma...@apache.org>
Authored: Mon Mar 6 14:38:14 2017 +0100
Committer: Philip Thompson <pt...@gmail.com>
Committed: Mon Mar 6 09:56:46 2017 -0500
----------------------------------------------------------------------
upgrade_tests/regression_test.py | 70 +++++++++++++++++++++++++++++++++++
upgrade_tests/upgrade_base.py | 10 +++++
2 files changed, 80 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/eb3b5749/upgrade_tests/regression_test.py
----------------------------------------------------------------------
diff --git a/upgrade_tests/regression_test.py b/upgrade_tests/regression_test.py
index 14a17f7..cff3c50 100644
--- a/upgrade_tests/regression_test.py
+++ b/upgrade_tests/regression_test.py
@@ -7,9 +7,15 @@ from cassandra import ConsistencyLevel as CL
from nose.tools import assert_not_in
from dtest import RUN_STATIC_UPGRADE_MATRIX
+from tools.jmxutils import (JolokiaAgent, make_mbean)
from upgrade_base import UpgradeTester
from upgrade_manifest import build_upgrade_pairs
+import glob
+import os
+import re
+import time
+
class TestForRegressions(UpgradeTester):
"""
@@ -60,6 +66,70 @@ class TestForRegressions(UpgradeTester):
count = s[1].execute("select count(*) from financial.symbol_history where symbol='{}' and year={};".format(symbol, year))[0][0]
self.assertEqual(count, expected_rows, "actual {} did not match expected {}".format(count, expected_rows))
+ def test13294(self):
+ """
+ Tests upgrades with files having a bunch of files with the same prefix as another file
+
+ this file is then compacted and we verify that no other sstables are removed
+
+ @jira_ticket CASSANDRA-13294
+ """
+ cluster = self.cluster
+ cluster.set_datadir_count(1) # we want the same prefix for all sstables
+ session = self.prepare(jolokia=True)
+ session.execute("CREATE KEYSPACE test13294 WITH replication={'class':'SimpleStrategy', 'replication_factor': 2};")
+ session.execute("CREATE TABLE test13294.t (id int PRIMARY KEY, d int) WITH compaction = {'class': 'SizeTieredCompactionStrategy','enabled':'false'}")
+ for x in xrange(0, 5):
+ session.execute("INSERT INTO test13294.t (id, d) VALUES (%d, %d)" % (x, x))
+ cluster.flush()
+
+ node1 = cluster.nodelist()[0]
+
+ sstables = node1.get_sstables('test13294', 't')
+ node1.stop(wait_other_notice=True)
+ generation_re = re.compile(r'(.*-)(\d+)(-.*)')
+ mul = 1
+ first_sstable = ''
+ for sstable in sstables:
+ res = generation_re.search(sstable)
+ if res:
+ glob_for = "%s%s-*" % (res.group(1), res.group(2))
+ for f in glob.glob(glob_for):
+ res2 = generation_re.search(f)
+ new_filename = "%s%s%s" % (res2.group(1), mul, res2.group(3))
+ os.rename(f, new_filename)
+ if first_sstable == '' and '-Data' in new_filename:
+ first_sstable = new_filename # we should compact this
+ mul = mul * 10
+ node1.start(wait_other_notice=True)
+ sessions = self.do_upgrade(session)
+ checked = False
+ for is_upgraded, cursor in sessions:
+ if is_upgraded:
+ sstables_before = self.get_all_sstables(node1)
+ self.compact_sstable(node1, first_sstable)
+ time.sleep(2) # wait for sstables to get physically removed
+ sstables_after = self.get_all_sstables(node1)
+ # since autocompaction is disabled and we compact a single sstable above
+ # the number of sstables after should be the same as before.
+ self.assertEquals(len(sstables_before), len(sstables_after))
+ checked = True
+ self.assertTrue(checked)
+
+ def compact_sstable(self, node, sstable):
+ mbean = make_mbean('db', type='CompactionManager')
+ with JolokiaAgent(node) as jmx:
+ jmx.execute_method(mbean, 'forceUserDefinedCompaction', [sstable])
+
+ def get_all_sstables(self, node):
+ # note that node.get_sstables(...) only returns current version sstables
+ keyspace_dirs = [os.path.join(node.get_path(), "data{0}".format(x), "test13294") for x in xrange(0, node.cluster.data_dir_count)]
+ files = []
+ for d in keyspace_dirs:
+ for f in glob.glob(d + "/*/*Data*"):
+ files.append(f)
+ return files
+
for path in build_upgrade_pairs():
gen_class_name = TestForRegressions.__name__ + path.name
http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/eb3b5749/upgrade_tests/upgrade_base.py
----------------------------------------------------------------------
diff --git a/upgrade_tests/upgrade_base.py b/upgrade_tests/upgrade_base.py
index 3d44cef..6d37468 100644
--- a/upgrade_tests/upgrade_base.py
+++ b/upgrade_tests/upgrade_base.py
@@ -5,6 +5,7 @@ from abc import ABCMeta
from unittest import skipIf
from ccmlib.common import get_version_from_build, is_win
+from tools.jmxutils import remove_perf_disable_shared_mem
from dtest import CASSANDRA_VERSION_FROM_BUILD, DEBUG, Tester, debug, create_ks
@@ -60,6 +61,7 @@ class UpgradeTester(Tester):
self.ignore_log_patterns = self.ignore_log_patterns[:] + [
r'RejectedExecutionException.*ThreadPoolExecutor has shut down', # see CASSANDRA-12364
]
+ self.enable_for_jolokia = False
super(UpgradeTester, self).__init__(*args, **kwargs)
def setUp(self):
@@ -99,6 +101,10 @@ class UpgradeTester(Tester):
cluster.populate(nodes)
node1 = cluster.nodelist()[0]
cluster.set_install_dir(version=self.UPGRADE_PATH.starting_version)
+ self.enable_for_jolokia = kwargs.pop('jolokia', False)
+ if self.enable_for_jolokia:
+ remove_perf_disable_shared_mem(node1)
+
cluster.start(wait_for_binary_proto=True)
node1 = cluster.nodelist()[0]
@@ -157,6 +163,10 @@ class UpgradeTester(Tester):
'with Cassandra version {}'.format(self.protocol_version, new_version_from_build))
node1.set_log_level("DEBUG" if DEBUG else "INFO")
node1.set_configuration_options(values={'internode_compression': 'none'})
+
+ if self.enable_for_jolokia:
+ remove_perf_disable_shared_mem(node1)
+
node1.start(wait_for_binary_proto=True, wait_other_notice=True)
sessions_and_meta = []
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org