otegami opened a new issue, #4392:
URL: https://github.com/apache/arrow-adbc/issues/4392

   ### What happened?
   
   Installing `red-adbc` fails on a clean Debian/Ubuntu under Ruby 4.0 (Bundler 
4.0):
   `libadbc-glib-dev` cannot be found and the install aborts. The same gems 
install
   fine under Ruby 3.2-3.4.
   
   `red-adbc.gemspec` declares its Debian/RHEL system package 
(`libadbc-glib-dev` /
   `adbc-glib-devel`) but not the Apache Arrow repository the package comes 
from. It
   has worked only because its dependency `red-arrow` registers that shared
   repository first: `red-arrow.gemspec` declares the full `try -> install
   apache-arrow-apt-source -> retry` recipe, while red-adbc has no such 
fallback.
   
   Bundler 4.0 (rubygems/rubygems#9381, "Split the download and install process 
of a
   gem") installs pure-ruby gems as soon as they are downloaded, without 
waiting for
   their native-extension dependencies. red-adbc is pure ruby; red-arrow has a 
native
   extension. So under Bundler 4.0 red-adbc installs before red-arrow, its
   rubygems-requirements-system hook runs before the Apache Arrow repository is
   registered, and `libadbc-glib-dev` cannot be located.
   
   Install order was never a Bundler guarantee; the underlying gap is that 
red-adbc's
   system-requirement declaration is incomplete — it names the package but not 
the
   repository it comes from.
   
   ### Stack Trace
   
   ```
   INFO:  requirements: system: libadbc-glib-dev: install: Start
   E: Unable to locate package libadbc-glib-dev
   ERROR:  requirements: system: libadbc-glib-dev: install: Failed.
   ERROR:  Error installing red-adbc:
        pre-install hook at 
.../rubygems-requirements-system-0.1.6/lib/rubygems_plugin.rb:16 failed for 
red-adbc-1.11.0
   ```
   
   ### How can we reproduce the bug?
   
   This `bundle install` failure is a Bundler 4.0 install-order regression. It
   reproduces with nothing but `red-adbc` + `rubygems-requirements-system`. Two 
files:
   
   ```ruby
   # Gemfile
   source "https://rubygems.org/";
   plugin "rubygems-requirements-system"
   gem "red-adbc", "1.11.0"
   ```
   
   ```dockerfile
   # Dockerfile  (amd64: libadbc-glib-dev is amd64-only in the Arrow APT repo)
   FROM --platform=linux/amd64 ruby:4.0
   WORKDIR /repro
   COPY Gemfile .
   CMD ["bundle", "install", "--jobs=4"]
   ```
   
   ```sh
   docker build -t repro . && docker run --rm repro
   ```
   
   Same Ruby (the `ruby:4.0` image), same gems — only the Bundler version 
differs:
   
   | Bundler           | install order              | result                    
                                |
   
|-------------------|----------------------------|-----------------------------------------------------------|
   | 4.0.10 (bundled)  | red-adbc (pure-ruby) first | NG: `E: Unable to locate 
package libadbc-glib-dev` (exit 5) |
   | 2.7.2 (last 2.x)  | red-arrow (native) first   | OK: `Bundle complete!` 
(exit 0)                             |
   
   ```sh
   # contrast: same image, downgrade Bundler
   docker run --rm repro sh -c 'gem install bundler -v 2.7.2 >/dev/null && 
bundle _2.7.2_ install --jobs=4'
   ```
   
   Under 4.0 the pure-ruby red-adbc is installed before the native red-arrow, so
   red-adbc's requirement hook runs while the Apache Arrow repo is still 
unregistered.
   Under 2.7.2 red-arrow installs first and registers the repo, so red-adbc 
then finds
   its package — which is why Ruby 3.2-3.4 (Bundler 2.x) are unaffected.
   
   ### Environment/Setup
   
   - red-adbc 1.11.0, red-arrow 24.0.0, rubygems-requirements-system 0.1.6
   - Ruby 4.0.x, Bundler 4.0.10


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to