Bug 784192

Summary: qpid libraries API compatibility issue with qpid::types::Variant::fromString() and qpid::types::from_string<>()
Product: Red Hat Enterprise MRG Reporter: Frantisek Reznicek <freznice>
Component: qpid-cppAssignee: Justin Ross <jross>
Status: CLOSED CURRENTRELEASE QA Contact: Frantisek Reznicek <freznice>
Severity: high Docs Contact:
Priority: high    
Version: 2.1CC: esammons, jross
Target Milestone: 2.1.2   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: qpid-cpp-mrg-0.14-5 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Frantisek Reznicek 2012-01-24 08:27:59 UTC
Description of problem:

The API compatibility checker highlighted following issues:

  [A]
  Short API check summary between libqpidtypes.qpid-cpp-mrg-debuginfo-0.10-8.el5.i386.current and libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-4.el5.i386: (199 matching, 0 new and 1 missing symbols)
  .following symbols are MISSING: (cnt:1, cnt before exclusion:1)
    qpid::types::Variant::fromString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
  [13:38:00] .ERROR:failed! (ecode:1)
  

  [B]
  [13:38:00] Comparing library libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-4.el5.i386 vs. libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-22/28/34.el5.i386.current
  Short API check summary between libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-22/28/34.el5.i386.current and libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-4.el5.i386: (197 matching, 2 new and 4 missing symbols)
  .following symbols are MISSING: (cnt:3, cnt before exclusion:4)
    qpid::types::Variant::fromString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    bool qpid::types::from_string<int>(int&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    bool qpid::types::from_string<double>(double&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
  [13:38:00] .ERROR:failed! (ecode:3)


The API changed and if we want to guarantee backward compatibility we need to add above missing symbols.


Version-Release number of selected component (if applicable):
libqpidtypes.qpid-cpp-mrg-debuginfo-0.14*

How reproducible:
100%

Steps to Reproduce:
1. nm or readelf on libqpidtypes on versions 0.7.946106-* / 0.10-* /0.14-*
2. compare
  
Actual results:
Some public exports from libqpidtypes are missing.

Expected results:
No public exports from libqpidtypes should be missing.

Additional info:

Comment 1 Frantisek Reznicek 2012-01-24 11:58:47 UTC
The API changed and if we want to guarantee backward compatibility we need to
add above missing symbols.

The decision has to be made.

Raising NEEDINFO for Justin.

Comment 2 Justin Ross 2012-01-24 16:52:56 UTC
AFAIK, we plan to maintain compatibility until for this item until a major version change.  I'll ensure it goes into our patch.

Comment 4 Frantisek Reznicek 2012-02-20 09:24:51 UTC
The above patch was applied, but there are still two problems on following builds:
  qpid-cpp-mrg-0.14-5.el5
  qpid-cpp-0.14-6.el6.x86_64

Linked test still highlights that following symbols (from B] case) are missing:

  [12:51:55] Comparing library libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386 vs. libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-22.el5.i386.current
  Short API check summary between libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-22.el5.i386.current and libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386: (198 matching, 2 new and 3 missing symbols)
  .following symbols are MISSING: (cnt:2, cnt before exclusion:3)
    bool qpid::types::from_string<int>(int&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    bool qpid::types::from_string<double>(double&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
  [12:51:55] .ERROR:failed! (ecode:2)
  [12:51:55] Comparing library libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386 vs. libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-28.el5.i386.current
  Short API check summary between libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-28.el5.i386.current and libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386: (198 matching, 2 new and 3 missing symbols)
  .following symbols are MISSING: (cnt:2, cnt before exclusion:3)
    bool qpid::types::from_string<int>(int&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    bool qpid::types::from_string<double>(double&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
  [12:51:55] .ERROR:failed! (ecode:2)
  [12:51:55] Comparing library libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386 vs. libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-34.el5.i386.current
  Short API check summary between libqpidtypes.qpid-cpp-mrg-debuginfo-0.7.946106-34.el5.i386.current and libqpidtypes.qpid-cpp-mrg-debuginfo-0.14-5.el5.i386: (198 matching, 2 new and 3 missing symbols)
  .following symbols are MISSING: (cnt:2, cnt before exclusion:3)
    bool qpid::types::from_string<int>(int&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    bool qpid::types::from_string<double>(double&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)



The patch fixes just part of the issues (not all template ool qpid::types::from_string<> methods are available).


-> ASSIGNED

Comment 5 Justin Ross 2012-02-25 20:33:42 UTC
Case B is not a regression in 0.14 but in 0.10.  It's also not a practical difficulty; therefore, we'll proceed without repairing this for 2.1.2/0.14-mrg.  Case A is fixed, so I'm moving this to modified.

Comment 6 Frantisek Reznicek 2012-02-29 13:55:30 UTC
Thanks for check. Retested.

The issue has been partially fixed and partially waived. Tested on RHEL 5.7 / 6.2 i[36]86 / x86_64 on packages:
  python-qpid-0.14-4.el5
  python-qpid-qmf-0.14-3.el5
  qpid-cpp-client-0.14-7.el5
  qpid-cpp-client-devel-0.14-7.el5
  qpid-cpp-client-devel-docs-0.14-7.el5
  qpid-cpp-client-rdma-0.14-7.el5
  qpid-cpp-client-ssl-0.14-7.el5
  qpid-cpp-mrg-debuginfo-0.14-7.el5
  qpid-cpp-server-0.14-7.el5
  qpid-cpp-server-cluster-0.14-7.el5
  qpid-cpp-server-devel-0.14-7.el5
  qpid-cpp-server-rdma-0.14-7.el5
  qpid-cpp-server-ssl-0.14-7.el5
  qpid-cpp-server-store-0.14-7.el5
  qpid-cpp-server-xml-0.14-7.el5
  qpid-java-client-0.14-3.el5
  qpid-java-common-0.14-3.el5
  qpid-java-example-0.14-3.el5
  qpid-qmf-0.14-3.el5
  qpid-qmf-debuginfo-0.14-3.el5
  qpid-qmf-devel-0.14-3.el5
  qpid-tests-0.14-1.el5
  qpid-tools-0.14-1.el5
  rh-qpid-cpp-tests-0.14-7.el5
  ruby-qpid-qmf-0.14-3.el5

-> VERIFIED