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 <marc...@apache.org>
Authored: Mon Mar 6 14:38:14 2017 +0100
Committer: Philip Thompson <ptnapol...@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-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to