This is an automated email from the ASF dual-hosted git repository.

joemcdonnell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 49d37cfef2e1aef611330489082e12e3c0c63347
Author: stiga-huang <huangquanl...@gmail.com>
AuthorDate: Fri Feb 9 10:07:42 2024 +0800

    IMPALA-12795: Deflake test_catalog_operation_fields
    
    test_catalog_operation_fields verifies the CREATE DATABASE statement has
    consistent fields in the catalog operations page and the impalad queries
    page. It could fail if the query is waiting to be closed (so not in the
    list of completed queries). This fix the test by also finding the query
    in the list of in-flight queries.
    
    Tests:
     - Ran the test 18000 times with other concurrent tests running
    
    Change-Id: Ibc8e642d560c1a4ca1bdc3a618eb67e1329b47d2
    Reviewed-on: http://gerrit.cloudera.org:8080/21023
    Reviewed-by: Impala Public Jenkins <impala-public-jenk...@cloudera.com>
    Tested-by: Impala Public Jenkins <impala-public-jenk...@cloudera.com>
---
 tests/webserver/test_web_pages.py | 43 ++++++++++++++++++++++++++++++---------
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/tests/webserver/test_web_pages.py 
b/tests/webserver/test_web_pages.py
index 2a713cf86..35f69519e 100644
--- a/tests/webserver/test_web_pages.py
+++ b/tests/webserver/test_web_pages.py
@@ -27,11 +27,14 @@ from multiprocessing import Process, Queue
 from time import sleep, time
 import itertools
 import json
+import logging
 import os
 import pytest
 import re
 import requests
 
+LOG = logging.getLogger(__name__)
+
 
 class TestWebPage(ImpalaTestSuite):
   ROOT_URL = "http://localhost:{0}/";
@@ -906,12 +909,12 @@ class TestWebPage(ImpalaTestSuite):
   def test_catalog_operation_fields(self, unique_database):
     """Verify the CREATE_DATABASE operation is consistent with the statement 
shown in the
        /queries page of impalad."""
-    catalog_operations = json.loads(
-        requests.get("http://localhost:25020/operations?json";).text)
+    catalog_operations_page = 
requests.get("http://localhost:25020/operations?json";).text
+    catalog_operations = json.loads(catalog_operations_page)
     assert "finished_catalog_operations" in catalog_operations
 
-    queries = json.loads(
-        requests.get("http://localhost:25000/queries?json";).text)
+    queries_page = requests.get("http://localhost:25000/queries?json";).text
+    queries = json.loads(queries_page)
     assert "completed_queries" in queries
 
     # Find the CREATE_DATABASE operation in catalogd
@@ -926,19 +929,39 @@ class TestWebPage(ImpalaTestSuite):
         catalog_op_end_time = datetime.strptime(op["finish_time"], ts_format)
         catalog_op_duration = parse_duration_string_ms(op["duration"])
         found = True
+        LOG.info("Found query id in catalog operations: " + 
catalog_op_query_id)
         break
     assert found
+
+    def verify_query_record(query):
+      assert "CREATE DATABASE" in query["stmt"]
+      assert unique_database in query["stmt"]
+      assert catalog_op_user == query["effective_user"]
+      assert datetime.strptime(query["start_time"], ts_format) <= 
catalog_op_start_time
+      assert datetime.strptime(query["end_time"], ts_format) >= 
catalog_op_end_time
+      assert parse_duration_string_ms(query["duration"]) >= catalog_op_duration
+
     # Find the query in impalad
     matched = False
     for query in queries["completed_queries"]:
       if query["query_id"] == catalog_op_query_id:
-        assert "CREATE DATABASE" in query["stmt"]
-        assert unique_database in query["stmt"]
-        assert catalog_op_user == query["effective_user"]
-        assert datetime.strptime(query["start_time"], ts_format) <= 
catalog_op_start_time
-        assert datetime.strptime(query["end_time"], ts_format) >= 
catalog_op_end_time
-        assert parse_duration_string_ms(query["duration"]) >= 
catalog_op_duration
+        verify_query_record(query)
         matched = True
+    if not matched:
+      LOG.info("Query id {0} not found in the completed queries list".format(
+          catalog_op_query_id))
+      # Try to find the query in the in-flight queries list. It could be 
waiting to
+      # be closed.
+      for query in queries["in_flight_queries"]:
+        if query["query_id"] == catalog_op_query_id:
+          verify_query_record(query)
+          matched = True
+
+    # Dump web pages for debug
+    if not matched:
+      LOG.info("Query id {0} not found in queries 
page!".format(catalog_op_query_id))
+      LOG.info("Catalog operations: " + catalog_operations_page)
+      LOG.info("Queries: " + queries_page)
     assert matched
 
   def test_catalog_metrics(self):

Reply via email to