# 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.

# This file suppresses TSAN errors, following
# https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions

# This method in Boost's UUID library operates on static state with impunity,
# triggering (harmless) data races in TSAN when boost::uuids::random_generator
# instances are created across threads (this suppression and the corresponding
# explanation were copied from Kudu's sanitizer_options.cc).
race:boost::uuids::detail::seed_rng::sha1_random_digest_

# TODO: IMPALA-9314: The ThriftServer used by the Statestore has various race conditions
# during the shutdown process (and leaks threads)
race:impala::StatestoreTest_SmokeTest_Test
thread:impala::StatestoreTest_SmokeTest_Test
race:impala::SessionTest_TestExpiry_Test
race:impala::StatestoreSslTest_ValidCertSmokeTest_Test

# TODO: IMPALA-9314: The ThriftServer used by the tests in hs2-http-test.cc has various
# race conditions during the shutdown process
race:impala::ThriftHttpTest_TestChunkedRequests_Test
race:impala::Hs2HttpTest_TestSpnego_Test

# TODO: IMPALA-9455 / IMPALA-6085: 'RpcMgrKerberizedTest' calls 'InitAuth'
# (auth-provider.h) multiple times per process. This causes a race condition on
# 'g_kinit_ctx' (init.cc). On a production cluster, Impala daemons should only call
# 'InitAuth' once.
race:impala::RpcMgrKerberizedTest

# TODO: IMPALA-9403: Allow TSAN to be set on codegen
race:impala::HdfsColumnarScanner::ProcessScratchBatchCodegenOrInterpret
