Conversation
This comment was marked as off-topic.
This comment was marked as off-topic.
74a0d20 to
07fa9cc
Compare
|
@pitrou @kou I've been working on splitting the S3 library (and the AWS SDK) outside $ ls -lhL libarrow.so libarrow_s3.so
-rwxrwxr-x 1 raulcd raulcd 59M Jun 22 19:30 libarrow_s3.so
-rwxrwxr-x 1 raulcd raulcd 317M Jun 22 19:29 libarrow.soAnd we can see AWS symbols aren't present on libarrow.so $ nm -C libarrow.so | grep -c "Aws::"
0
$ nm -C libarrow_s3.so | grep -c "Aws::"
33991With current main libarrow.so size and it contains AWS SDK symbols: $ ls -lhL libarrow.so
-rwxrwxr-x 1 raulcd raulcd 368M Jun 22 19:45 libarrow.so
$ ls -lhL libarrow_s3.so
ls: cannot access 'libarrow_s3.so': No such file or directory
$ nm -C libarrow.so | grep -c "Aws::"
33991Those are debug builds but as a summary: |
|
I think that we should use I think that bindings can provide convenient API to use the S3 module even if we use |
With conda this isn't necessary, we already ship all the With wheels this is another different beast and I have to explore a little further. A related issue: The original problem we had with wheels is that there's no mechanism to share dependencies between wheels. Auditwheel/delvewheel/delocate mangle the .so name to avoid other wheels clashing with other dependencies symbols. The problem is that As a note, I've just validated we don't mangle libarrow (or any of our .so) on the wheels. I am going to start exploring this a little further to see if I can come up with something even though I am still unclear about some of the questions above, like version matching to avoid ABI problems. Related: @amol- who worked on And some Python PEP attempts to define some external dependencies for wheels are on discussion: What I am saying is that using cc @h-vetinari who knows this space and might shed some light |
|
For the PyPI side, you might be able to do something similar to what numpy/scipy are doing with openblas as a wheel. |
| target_link_libraries(arrow_s3fs PRIVATE ${AWSSDK_LINK_LIBRARIES} arrow_shared) | ||
| set_source_files_properties(filesystem/s3fs.cc filesystem/s3fs_module.cc | ||
| PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) | ||
| if(ARROW_BUILD_STATIC AND WIN32) |
There was a problem hiding this comment.
The AND WIN32 isn't useful, right?
There was a problem hiding this comment.
We use the same pattern on other places:
if(ARROW_BUILD_STATIC AND WIN32)
target_compile_definitions(arrow_compute_static PUBLIC ARROW_COMPUTE_STATIC)
endif()
or
if(ARROW_BUILD_STATIC AND WIN32)
target_compile_definitions(arrow_static PUBLIC ARROW_STATIC)
endif()
Taking a look at the definition on visibility.h of ARROW_S3_STATIC is already guarded for WIN32:
#if defined(_WIN32) || defined(__CYGWIN__)
So it will only be used on WIN32, it does not seem necessary on others so I would say the AND WIN32 does nothing but it's hygiene?
|
So, this is as if |
Yes but with a small caveat. |
|
Oh, great, thank you! |
…nd add required ARROW_EXPORTs
…covered on s3fs_module_test and s3fs_module_test doesn't make sense on static builds
…row and static build
|
Could you try the following to debug reproducible builds failure? diff --git a/.github/workflows/package_linux.yml b/.github/workflows/package_linux.yml
index dd5d5a4eaf..1627d3286b 100644
--- a/.github/workflows/package_linux.yml
+++ b/.github/workflows/package_linux.yml
@@ -353,7 +353,6 @@ jobs:
reprotest \
--build-command \
"rake -C dev/tasks/linux-packages ${TASK_NAMESPACE}:build" \
- --no-diffoscope \
--vary=-fileordering \
"${PWD}" \
"dev/tasks/linux-packages/*/apt/repositories/${DISTRIBUTION}/pool/${DISTRIBUTION_CODE_NAME}/*/*/*/*.deb"https://github.com/apache/arrow/actions/runs/34948510691/job/104313673313?pr=50195#step:21:15883 |
I will try but on a different PR as this is also failing on main (nightlies). I've opened: |
|
Weirdly enough I can't reproduce on the standalone PR, I'll temporary remove the |
…ible builds issue
Rationale for this change
Trying to reduce the size of
libarrow.soand remove AWS SDK on some builds. Allow for users to plug and play based on requirements and divide our functionality into cleaner modules.What changes are included in this PR?
Unconditionally build S3 and the AWS SDK into a different module
libarrow_s3.sooutside oflibarrow.so.Update bindings to link against the new
libarrow_s3.solibrary.Update the Linux Package jobs to have the new module into a different package.
Are these changes tested?
Yes via CI
Are there any user-facing changes?
Yes, users will need to either link against
libarrow_s3.soor register usingLoadFileSystemFactories