def test_auto_reconnect_after_impalad_died(self): """Test reconnect after restarting the remote impalad without using connect;""" # Use pexpect instead of ImpalaShell() since after using get_result() in ImpalaShell() # to check Disconnect, send_cmd() will no longer have any effect so we can not check # reconnect. impalad = ImpaladService(socket.getfqdn()) # Iterate over test vector within test function to avoid restarting cluster. for vector in [ ImpalaTestVector([value]) for value in create_beeswax_dimension() ]: cmd = get_shell_cmd(vector) proc = pexpect.spawn(cmd[0], cmd[1:]) proc.expect("{0}] default>".format(get_impalad_port(vector))) # ImpalaShell startup may issue query to get server info - get num queries after # starting shell. start_num_queries = impalad.get_metric_value(NUM_QUERIES) proc.sendline("use tpch;") # wait for the USE command to finish impalad.wait_for_metric_value(NUM_QUERIES, start_num_queries + 1) assert impalad.wait_for_num_in_flight_queries(0) # Disconnect self.cluster.impalads[0].kill() proc.sendline("show tables;") # Search from [1:] since the square brackets "[]" are special characters in regex proc.expect(ImpalaShellClass.DISCONNECTED_PROMPT[1:]) # Restarting Impalad self.cluster.impalads[0].start() # Check reconnect proc.sendline("show tables;") proc.expect("nation") proc.expect("{0}] tpch>".format(get_impalad_port(vector)))
def test_admission_status(self): """Test whether the admission status gets printed if a query gets queued when either live_summary or live_progress is set to true""" expected_admission_status = "Query queued. Latest queuing reason: " \ "number of running queries 1 is at or over limit 1" # Start a long running query so that the next one gets queued. sleep_query_handle = self.client.execute_async("select sleep(10000)") self.client.wait_for_admission_control(sleep_query_handle) # Iterate over test vector within test function to avoid restarting cluster. for vector in [ ImpalaTestVector([value]) for value in create_beeswax_dimension() ]: cmd = get_shell_cmd(vector) proc = pexpect.spawn(cmd[0], cmd[1:]) # Check with only live_summary set to true. proc.expect("{0}] default>".format(get_impalad_port(vector))) proc.sendline("set live_summary=true;") proc.sendline("select 1;") proc.expect(expected_admission_status) proc.sendcontrol('c') proc.expect("Cancelling Query") # Check with only live_progress set to true. proc.sendline("set live_summary=false;") proc.sendline("set live_progress=true;") proc.sendline("select 1;") proc.expect(expected_admission_status)
def __trigger_retry_shell(self, vector, query, shell_params=[]): """Runs a query via the impala-shell and triggers a query retry.""" vector = ImpalaTestVector([ImpalaTestVector.Value("protocol", "hs2")]) pool = ThreadPool(processes=1) proc = spawn_shell(get_shell_cmd(vector) + shell_params) proc.expect("{0}] default>".format(get_impalad_port(vector))) proc.sendline("set retry_failed_queries=true;") pool.apply_async(lambda: proc.sendline(query + ";")) wait_for_query_state(vector, query, "RUNNING") self.cluster.impalads[randint( 1, ImpalaTestSuite.get_impalad_cluster_size() - 1)].kill() return proc