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)
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)
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)
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)
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 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"