Ejemplo n.º 1
0
 def dsetool(self, cmd):
     env = self.get_env()
     extension.append_to_client_env(self, env)
     node_ip, binary_port = self.network_interfaces['binary']
     dsetool = common.join_bin(self.get_install_dir(), 'bin', 'dsetool')
     args = [dsetool, '-h', node_ip, '-j', str(self.jmx_port), '-c', str(binary_port)]
     args += cmd.split()
     p = subprocess.Popen(args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     return handle_external_tool_process(p, args)
Ejemplo n.º 2
0
 def dsetool(self, cmd):
     env = self.get_env()
     extension.append_to_client_env(self, env)
     node_ip, binary_port = self.network_interfaces['binary']
     dsetool = common.join_bin(self.get_install_dir(), 'bin', 'dsetool')
     args = [dsetool, '-h', node_ip, '-j', str(self.jmx_port), '-c', str(binary_port)]
     args += cmd.split()
     p = subprocess.Popen(args, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     return handle_external_tool_process(p, args)
Ejemplo n.º 3
0
 def spark(self, spark_options=None):
     if spark_options is None:
         spark_options = []
     env = self.get_env()
     env['JMX_PORT'] = self.jmx_port
     dse = common.join_bin(self.get_install_dir(), 'bin', 'dse')
     args = [dse, 'spark']
     args += spark_options
     p = subprocess.Popen(args, env=env)  #Don't redirect stdout/stderr, users need to interact with new process
     return handle_external_tool_process(p, args)
Ejemplo n.º 4
0
 def spark(self, spark_options=None):
     if spark_options is None:
         spark_options = []
     env = self.get_env()
     env['JMX_PORT'] = self.jmx_port
     dse = common.join_bin(self.get_install_dir(), 'bin', 'dse')
     args = [dse, 'spark']
     args += spark_options
     p = subprocess.Popen(args, env=env)  #Don't redirect stdout/stderr, users need to interact with new process
     return handle_external_tool_process(p, args)
Ejemplo n.º 5
0
 def dse(self, dse_options=None):
     if dse_options is None:
         dse_options = []
     env = self.get_env()
     extension.append_to_client_env(self, env)
     env['JMX_PORT'] = self.jmx_port
     dse = common.join_bin(self.get_install_dir(), 'bin', 'dse')
     args = [dse]
     args += dse_options
     p = subprocess.Popen(args, env=env)  #Don't redirect stdout/stderr, users need to interact with new process
     return handle_external_tool_process(p, args)
Ejemplo n.º 6
0
 def dse(self, dse_options=None):
     if dse_options is None:
         dse_options = []
     env = self.get_env()
     extension.append_to_client_env(self, env)
     env['JMX_PORT'] = self.jmx_port
     dse = common.join_bin(self.get_install_dir(), 'bin', 'dse')
     args = [dse]
     args += dse_options
     p = subprocess.Popen(args, env=env)  #Don't redirect stdout/stderr, users need to interact with new process
     return handle_external_tool_process(p, args)
    def test_deprecated_repair_error_notification(self):
        """
        * Check whether a legacy JMX nodetool understands the
        * notification for a failed repair job.
        """
        # This test intentionally provokes an error in a repair job
        self.fixture_dtest_setup.ignore_log_patterns = [r'Repair failed', r'The current host must be part of the repair']

        # start a 2-node cluster
        logger.debug("Starting cluster...")
        cluster = self.cluster
        cluster.populate(2)
        node1, node2 = cluster.nodelist()
        cluster.start(wait_for_binary_proto=True, wait_other_notice=True)

        # write some data that could be repaired
        logger.debug("Stressing node1...")
        node1.stress(stress_options=['write', 'n=5000', 'no-warmup', 'cl=ONE', '-schema', 'replication(factor=2)', '-rate', 'threads=5'])

        # set up a legacy repository
        logger.debug("Setting up legacy repository...")
        legacy_version = 'github:apache/cassandra-2.1'
        ccmlib.repository.setup(legacy_version)

        # Run repair with legacy nodetool.
        # The options specified will cause an error, and legacy nodetool should error out.
        logger.debug("Running repair on node1 using legacy nodetool (using options that will cause failure with error)")
        legacy_dirpath = ccmlib.repository.directory_name(legacy_version)
        legacy_nodetool_path = os.path.join(legacy_dirpath, "bin", "nodetool")
        repair_env = self.get_legacy_environment(legacy_version, node_env=node1.get_env())
        repair_args = [legacy_nodetool_path, "-h", "localhost", "-p", str(node1.jmx_port), "repair", "-hosts", "127.0.0.2"]
        p = subprocess.Popen(repair_args, env=repair_env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
        nodetool_stderr = None
        nodetool_returncode = None
        try:
            _, nodetool_stderr, _ = handle_external_tool_process(p, repair_args)
        except ToolError as tool_error:
            nodetool_stderr = tool_error.stderr

        # Check for repair failed message in node1 log
        repair_failed_logs = node1.grep_log(r"ERROR \[(Repair-Task|Thread)-\d+\] \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} RepairRunnable.java:\d+ - Repair failed")
        assert len(repair_failed_logs) > 0, "Node logs don't have an error message for the failed repair"
        # Check for error and stacktrace in nodetool output
        assert nodetool_stderr.find("error") > -1, "Legacy nodetool didn't print an error message for the failed repair"
        assert nodetool_stderr.find("-- StackTrace --") > -1, "Legacy nodetool didn't print a stack trace for the failed repair"
    def test_deprecated_repair_error_notification(self):
        """
        * Check whether a legacy JMX nodetool understands the
        * notification for a failed repair job.
        """
        # This test intentionally provokes an error in a repair job
        self.fixture_dtest_setup.ignore_log_patterns = [r'Repair failed', r'The current host must be part of the repair']

        # start a 2-node cluster
        logger.debug("Starting cluster...")
        cluster = self.cluster
        cluster.populate(2)
        node1, node2 = cluster.nodelist()
        cluster.start()

        # write some data that could be repaired
        logger.debug("Stressing node1...")
        node1.stress(stress_options=['write', 'n=5000', 'no-warmup', 'cl=ONE', '-schema', 'replication(factor=2)', '-rate', 'threads=5'])

        # set up a legacy repository
        logger.debug("Setting up legacy repository...")
        legacy_version = 'github:apache/cassandra-2.1'
        ccmlib.repository.setup(legacy_version)

        # Run repair with legacy nodetool.
        # The options specified will cause an error, and legacy nodetool should error out.
        logger.debug("Running repair on node1 using legacy nodetool (using options that will cause failure with error)")
        legacy_dirpath = ccmlib.repository.directory_name(legacy_version)
        legacy_nodetool_path = os.path.join(legacy_dirpath, "bin", "nodetool")
        repair_env = self.get_legacy_environment(legacy_version, node_env=node1.get_env())
        repair_args = [legacy_nodetool_path, "-h", "localhost", "-p", str(node1.jmx_port), "repair", "-hosts", "127.0.0.2"]
        p = subprocess.Popen(repair_args, env=repair_env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
        nodetool_stderr = None
        nodetool_returncode = None
        try:
            _, nodetool_stderr, _ = handle_external_tool_process(p, repair_args)
        except ToolError as tool_error:
            nodetool_stderr = tool_error.stderr

        # Check for repair failed message in node1 log
        repair_failed_logs = node1.grep_log(r"ERROR \[(Repair-Task|Thread)-\d+\] \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} RepairRunnable.java:\d+ - Repair failed")
        assert len(repair_failed_logs) > 0, "Node logs don't have an error message for the failed repair"
        # Check for error and stacktrace in nodetool output
        assert nodetool_stderr.find("error") > -1, "Legacy nodetool didn't print an error message for the failed repair"
        assert nodetool_stderr.find("-- StackTrace --") > -1, "Legacy nodetool didn't print a stack trace for the failed repair"