blob: 81fbf536a6b12ae96a85fbe7138231d4ad2aa86c [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from tests.common.impala_test_suite import ImpalaTestSuite
from tests.common.skip import SkipIfDockerizedCluster
import re
import time
class TestLogFragments(ImpalaTestSuite):
"""Checks that logging includes query/fragment ids when available."""
@SkipIfDockerizedCluster.daemon_logs_not_exposed
def test_log_fragments(self):
"""Tests that fragment ids percolate through to the logs.
Runs two queries that have more than one fragment; looks for logs annotated
as expected. Also checks that some log statements are *not* tagged
with anything, to ensure that threads "release" their tagging
when they're done.
"""
# This query produces more than one fragment when there
# is more than one impalad running.
result = self.execute_query("select count(*) from functional.alltypes")
query_id = re.search("id=([0-9a-f]+:[0-9a-f]+)",
result.runtime_profile).groups()[0]
self.execute_query("select 1")
# Logging may be buffered, so sleep to wait out the buffering.
time.sleep(6)
self.assert_impalad_log_contains('INFO', query_id +
"] Analysis and authorization finished.")
assert query_id.endswith("000")
# Looks for a fragment instance that doesn't end with "0" to make sure instances
# are getting propagated too.
self.assert_impalad_log_contains('INFO',
query_id[:-1] + "[1-9]" + "] Instance completed")
# This log entry should exist (many times), but not be tagged
self.assert_impalad_log_contains('INFO',
"impala-beeswax-server.cc:[0-9]+\] query: Query", -1)
# Check that the version with the query_id doesn't exist!
try:
self.assert_impalad_log_contains('INFO',
"impala-beeswax-server.*" + query_id + "].*query: Query")
raise Exception("query-id still attached to thread after query finished")
except AssertionError:
pass