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)))
Exemplo n.º 2
0
    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