-
Notifications
You must be signed in to change notification settings - Fork 127
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
azure-core-cpp version 1.11.0 introduced a binary breaking change. #5322
Comments
To my knowledge, there are no expectations of binary stability across versions of the Azure SDK. There is an expectation of source stability across minor versions and patches. But whenever a new release of the Azure SDK is made (even patch releases), we expect that customers will recompile the libraries to consume the release. Could you help us understand how we can improve our documentation to ensure that we help other customers to avoid making similar assumptions? |
You should change this line to |
@teo-tsirpanis, we read it as "API (not ABI) is compatible within the same Major version". I.e. if you had your code written against Azure Core 1.0, you can expect to rebuild it with 1.1 and everything will compile and work the same. We do not read it as binary compatibility without recompilation. Why do you read that CMake's compatibility is talking about binary compatibility? Binary compatibility is way harder to achieve - basically, I don't think majority of C++ (not C) libraries do provide binary compatibility. |
My understanding might be wrong, but because the |
FWIW, my reading of the CMAKE documentation says that the And as Anton said above, for C++ packages, the only safe choice is to recompile the package on every new version. And honestly, you should also recompile C++ packages every new version of the compiler as well - because (as I've said many times), C++ has no stable binary contract. Heck, I'm half-heartedly considering getting that as a tattoo, I say it so often. |
Thanks for the comments, turns out my understanding of |
Describe the bug
Since publishing
azure-core-cpp
1.11.0 to Conda, users have hit segfaults when the destructor ofCurlTransport
is called, from a library compiled with version 1.10.3.The issue was originally reported in conda-forge/azure-core-cpp-feedstock#10 (comment). Because the Azure SDK declares to be binary-compatible across minor releases, we had followed suit when we created the Conda feedstock, and the minor version bump did not cause downstreams to be rebuilt.
Exception or Stack Trace
To Reproduce
The bug reproduces when using TileDB built with Azure support and
azure-core-cpp
1.10.3, and linked to 1.11.0 at runtime, and calling thetiledb_ctx_free
API, which under the hood will free the AzureHttpTransport
.Code Snippet
TileDB creates the
CurlTransport
in question here:https://github.com/TileDB-Inc/TileDB/blob/ad0371fb8cc87abf9aa7c23e053d40b1f87fa80d/tiledb/sm/filesystem/azure.cc#L1147-L1168
Expected behavior
Updating
azure-core-cpp
to 1.11.0 without recompiling does not segfault.Screenshots
N/A
Setup (please complete the following information):
Additional context
For now we changed the Conda feedstock for
azure-core-cpp
(andazure-storage-common-cpp
for good measure) to be compatible only across patch versions, and pinned TileDB toazure-core-cpp
versions less than 1.11.0.I am not very familiar with what constitutes a binary breaking change in C++, but after comparing versions 1.10.3 and 1.11.0, I am strongly suspecting #4982 to have caused the break. At the time TileDB got compiled, the type layout of
CurlTransportOptions
is different from at the time the app runs.Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report
The text was updated successfully, but these errors were encountered: