From 2a3cc4ca8e7584850326029a5d6997531073bae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Mon, 28 Sep 2026 10:14:09 +0200 Subject: [PATCH 1/3] GH-51604: [C++][Parquet] Avoid double linking OpenTelemetry on arrow_reader_writer_tracing_test.cc --- cpp/src/parquet/CMakeLists.txt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt index 59ac95265259..54b03178314a 100644 --- a/cpp/src/parquet/CMakeLists.txt +++ b/cpp/src/parquet/CMakeLists.txt @@ -412,12 +412,18 @@ add_parquet_test(arrow-reader-writer-test arrow/arrow_statistics_test.cc arrow/variant_test.cc) -if(ARROW_WITH_OPENTELEMETRY AND NOT ARROW_USE_ASAN) - add_parquet_test(arrow-reader-writer-tracing-test - SOURCES - arrow/arrow_reader_writer_tracing_test.cc - EXTRA_LINK_LIBS - ${ARROW_OPENTELEMETRY_LIBS}) +if(ARROW_WITH_OPENTELEMETRY) + add_parquet_test(arrow-reader-writer-tracing-test SOURCES + arrow/arrow_reader_writer_tracing_test.cc) + # Only add include directories and compile definitions for OpenTelemetry. + # Opentelemetry is already linked into libarrow. Linking it again duplicates + # globals and causes a double free at exit failing ASAN and TSAN. + target_include_directories(parquet-arrow-reader-writer-tracing-test SYSTEM + PRIVATE $ + ) + target_compile_definitions(parquet-arrow-reader-writer-tracing-test + PRIVATE $ + ) endif() add_parquet_test(arrow-index-test SOURCES arrow/index_test.cc) From 2b7b573ac8ddde3c6b7357543bba7d6d7a3384f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Mon, 28 Sep 2026 10:51:48 +0200 Subject: [PATCH 2/3] Use existing infra instead of reinventing the wheel --- cpp/src/parquet/CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt index 54b03178314a..894feaf0ab30 100644 --- a/cpp/src/parquet/CMakeLists.txt +++ b/cpp/src/parquet/CMakeLists.txt @@ -413,16 +413,16 @@ add_parquet_test(arrow-reader-writer-test arrow/variant_test.cc) if(ARROW_WITH_OPENTELEMETRY) - add_parquet_test(arrow-reader-writer-tracing-test SOURCES - arrow/arrow_reader_writer_tracing_test.cc) - # Only add include directories and compile definitions for OpenTelemetry. - # Opentelemetry is already linked into libarrow. Linking it again duplicates - # globals and causes a double free at exit failing ASAN and TSAN. - target_include_directories(parquet-arrow-reader-writer-tracing-test SYSTEM - PRIVATE $ - ) - target_compile_definitions(parquet-arrow-reader-writer-tracing-test - PRIVATE $ + # Use extra include directories and compile definitions for OpenTelemetry + # instead of linking otherwise we double link it, libarrow already contains it + # and ASAN/TSAN fails with double free errors. + add_parquet_test(arrow-reader-writer-tracing-test + SOURCES + arrow/arrow_reader_writer_tracing_test.cc + EXTRA_INCLUDES + $ + DEFINITIONS + $ ) endif() From 2f4ee12528064e769fdb4f53653a467dc90e49f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Mon, 28 Sep 2026 14:12:39 +0200 Subject: [PATCH 3/3] Test linking only opentelemetry-cpp::sdk as suggested instead of all ARROW_OPENTELEMETRY_LIBS or manually defining EXTRA_INCLUDES and DEFINITIONS --- cpp/src/parquet/CMakeLists.txt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt index 894feaf0ab30..077946e6cc42 100644 --- a/cpp/src/parquet/CMakeLists.txt +++ b/cpp/src/parquet/CMakeLists.txt @@ -413,17 +413,11 @@ add_parquet_test(arrow-reader-writer-test arrow/variant_test.cc) if(ARROW_WITH_OPENTELEMETRY) - # Use extra include directories and compile definitions for OpenTelemetry - # instead of linking otherwise we double link it, libarrow already contains it - # and ASAN/TSAN fails with double free errors. add_parquet_test(arrow-reader-writer-tracing-test SOURCES arrow/arrow_reader_writer_tracing_test.cc - EXTRA_INCLUDES - $ - DEFINITIONS - $ - ) + EXTRA_LINK_LIBS + opentelemetry-cpp::sdk) endif() add_parquet_test(arrow-index-test SOURCES arrow/index_test.cc)