Bug 2269811

Summary: libarrow 15.0.1 seems to break ABI
Product: [Fedora] Fedora Reporter: Orion Poplawski <orion>
Component: libarrowAssignee: Kaleb KEITHLEY <kkeithle>
Status: CLOSED ERRATA QA Contact:
Severity: high Docs Contact:
Priority: unspecified    
Version: rawhideCC: alekcejk, benson_muite, code, kkeithle, neil
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: libarrow-15.0.2-2.fc41 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2024-03-20 13:14:19 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2261766    

Description Orion Poplawski 2024-03-16 16:40:36 UTC
With the update to 15.0.1, vfrnav fails to build with:

/usr/bin/ld: /usr/lib64/libgdal.so: undefined reference to `arrow::KeyValueMetadata::Contains(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/usr/bin/ld: /usr/lib64/libgdal.so: undefined reference to `arrow::KeyValueMetadata::Get(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'

See https://koschei.fedoraproject.org/package/vfrnav

It has also broken many other builds:

https://koschei.fedoraproject.org/affected-by/libarrow?epoch1=0&version1=15.0.0&release1=3.fc41&epoch2=0&version2=15.0.1&release2=1.fc41&collection=f41

Reproducible: Always

Comment 1 Ben Beasley 2024-03-16 22:00:19 UTC
Looking just at the main library, it looks like upstream changed some string references to string_view without considering that this would break ABI:

$ fedabipkgdiff --from fc40 libarrow-15.0.1-1.fc41.x86_64.rpm 
Comparing the ABI of binaries between libarrow-15.0.0-2.fc40.x86_64.rpm and libarrow-15.0.1-1.fc41.x86_64.rpm:

================ changes of 'libarrow.so.1500.0.0'===============
  Functions changes summary: 6 Removed, 0 Changed (11 filtered out), 6 Added functions
  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

  6 Removed functions:

    [D] 'method bool arrow::KeyValueMetadata::Contains(const std::string&) const'    {_ZNK5arrow16KeyValueMetadata8ContainsERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE}
    [D] 'method arrow::Status arrow::KeyValueMetadata::Delete(const std::string&)'    {_ZN5arrow16KeyValueMetadata6DeleteERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE}
    [D] 'method int arrow::KeyValueMetadata::FindKey(const std::string&) const'    {_ZNK5arrow16KeyValueMetadata7FindKeyERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE}
    [D] 'method arrow::Result<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > arrow::KeyValueMetadata::Get(const std::string&) const'    {_ZNK5arrow16KeyValueMetadata3GetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE}
    [D] 'method arrow::Status arrow::KeyValueMetadata::Set(const std::string&, const std::string&)'    {_ZN5arrow16KeyValueMetadata3SetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_}
    [D] 'function arrow::Status arrow::compute::internal::FSBFilterExec(arrow::compute::KernelContext*, const arrow::compute::ExecSpan&, arrow::compute::ExecResult*)'    {_ZN5arrow7compute8internal13FSBFilterExecEPNS0_13KernelContextERKNS0_8ExecSpanEPNS0_10ExecResultE}

  6 Added functions:

    [A] 'method bool arrow::KeyValueMetadata::Contains(std::string_view) const'    {_ZNK5arrow16KeyValueMetadata8ContainsESt17basic_string_viewIcSt11char_traitsIcEE}
    [A] 'method arrow::Status arrow::KeyValueMetadata::Delete(std::string_view)'    {_ZN5arrow16KeyValueMetadata6DeleteESt17basic_string_viewIcSt11char_traitsIcEE}
    [A] 'method int arrow::KeyValueMetadata::FindKey(std::string_view) const'    {_ZNK5arrow16KeyValueMetadata7FindKeyESt17basic_string_viewIcSt11char_traitsIcEE}
    [A] 'method arrow::Result<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > arrow::KeyValueMetadata::Get(std::string_view) const'    {_ZNK5arrow16KeyValueMetadata3GetB5cxx11ESt17basic_string_viewIcSt11char_traitsIcEE}
    [A] 'method arrow::Status arrow::KeyValueMetadata::Set(std::string, std::string)'    {_ZN5arrow16KeyValueMetadata3SetENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_}
    [A] 'function arrow::Status arrow::compute::internal::PrimitiveTakeExec(arrow::compute::KernelContext*, const arrow::compute::ExecSpan&, arrow::compute::ExecResult*)'    {_ZN5arrow7compute8internal17PrimitiveTakeExecEPNS0_13KernelContextERKNS0_8ExecSpanEPNS0_10ExecResultE}

================ end of changes of 'libarrow.so.1500.0.0'===============

Most or all of this is due to https://github.com/apache/arrow/commit/91be098b56021b1f9569986b038bd46c3ed53701.

Comment 2 Ben Beasley 2024-03-16 22:48:19 UTC
I went ahead and reported this upstream in https://github.com/apache/arrow/issues/40604.

Comment 3 Ben Beasley 2024-03-19 17:51:28 UTC
This is now affecting F40 due to the update to 15.0.2 in https://bodhi.fedoraproject.org/updates/FEDORA-2024-e075b0f5cf and the buildroot override https://bodhi.fedoraproject.org/overrides/libarrow-15.0.2-1.fc40.

Comment 4 Fedora Update System 2024-03-20 13:10:41 UTC
FEDORA-2024-ab6fe10b51 (libarrow-15.0.2-2.fc41) has been submitted as an update to Fedora 41.
https://bodhi.fedoraproject.org/updates/FEDORA-2024-ab6fe10b51

Comment 5 Fedora Update System 2024-03-20 13:14:19 UTC
FEDORA-2024-ab6fe10b51 (libarrow-15.0.2-2.fc41) has been pushed to the Fedora 41 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 6 nucleo 2024-03-20 13:49:54 UTC
digikam build failed with libarrow 15.0.2-2.fc41 https://koji.fedoraproject.org/koji/taskinfo?taskID=115205076

/usr/bin/ld: /usr/lib64/libgdal.so.34: undefined reference to `arrow::KeyValueMetadata::Get[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const'
/usr/bin/ld: /usr/lib64/libgdal.so.34: undefined reference to `arrow::KeyValueMetadata::Contains(std::basic_string_view<char, std::char_traits<char> >) const'
collect2: error: ld returned 1 exit status

Comment 7 nucleo 2024-03-20 13:52:40 UTC
gdal-3.8.4-4.fc41 rebuilt with libarrow 15.0.1-1.fc41
https://koji.fedoraproject.org/koji/buildinfo?buildID=2422900

Comment 8 Ben Beasley 2024-03-20 13:58:49 UTC
Right, it looks like gdal was rebuilt due to the ABI break, and now needs to be re-rebuilt because reverting the ABI break is still an ABI break. There could be others.