Skip to content

Commit 20eb23e

Browse files
authored
GH-47130: [Packaging][deb] Fix upgrade from 20.0.0-1 (#47343)
### Rationale for this change We split `libarrow-dev` to `libarrow-compute-dev` but we forgot to add `Replaces:`/`Breaks:` to `libarrow-compute-dev`. So `apt upgrade` from 20.0.0-1 is failed. ### What changes are included in this PR? * Add missing `Replaces:`/`Breaks:` to `libarrow-compute-dev` for smooth upgrade. See also: https://www.debian.org/doc/debian-policy/ch-relationships.html#overwriting-files-in-other-packages * Add downgrade/upgrade tests. * Add missing explicit versioned dependencies (`XXX (= ${binary:Version})`). ### Are these changes tested? Yes. ### Are there any user-facing changes? Yes. * GitHub Issue: #47130 Authored-by: Sutou Kouhei <[email protected]> Signed-off-by: Sutou Kouhei <[email protected]>
1 parent 1672472 commit 20eb23e

File tree

2 files changed

+165
-52
lines changed

2 files changed

+165
-52
lines changed

dev/release/verify-apt.sh

Lines changed: 123 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,6 @@ esac
8484

8585
if [ "${TYPE}" = "local" ]; then
8686
case "${VERSION}" in
87-
*-dev*)
88-
package_version="$(echo "${VERSION}" | sed -e 's/-dev\(.*\)$/~dev\1/g')"
89-
;;
9087
*-rc*)
9188
package_version="$(echo "${VERSION}" | sed -e 's/-rc.*$//g')"
9289
;;
@@ -111,7 +108,7 @@ fi
111108

112109
if [ "${TYPE}" = "local" ]; then
113110
sed \
114-
-i"" \
111+
-i.bak \
115112
-e "s,^URIs: .*$,URIs: file://${local_prefix}/apt/repositories/${distribution},g" \
116113
/etc/apt/sources.list.d/apache-arrow.sources
117114
keys="${local_prefix}/KEYS"
@@ -126,15 +123,11 @@ if [ "${TYPE}" = "local" ]; then
126123
--armor \
127124
--export > /usr/share/keyrings/apache-arrow-apt-source.asc
128125
fi
129-
else
130-
case "${TYPE}" in
131-
rc)
132-
sed \
133-
-i"" \
134-
-e "s,^URIs: \\(.*\\)/,URIs: \\1-${suffix}/,g" \
135-
/etc/apt/sources.list.d/apache-arrow.sources
136-
;;
137-
esac
126+
elif [ "${TYPE}" = "rc" ]; then
127+
sed \
128+
-i.bak \
129+
-e "s,^URIs: \\(.*\\)/,URIs: \\1-${suffix}/,g" \
130+
/etc/apt/sources.list.d/apache-arrow.sources
138131
fi
139132

140133
apt update
@@ -227,3 +220,120 @@ ${APT_INSTALL} libparquet-glib-dev=${package_version}
227220
${APT_INSTALL} libparquet-glib-doc=${package_version}
228221
ruby -r gi -e "p GI.load('Parquet')"
229222
echo "::endgroup::"
223+
224+
echo "::group::Prepare downgrade test"
225+
can_downgrade=false
226+
if [ -f /etc/apt/sources.list.d/apache-arrow.sources.bak ]; then
227+
mv /etc/apt/sources.list.d/apache-arrow.sources \
228+
/etc/apt/sources.list.d/apache-arrow-current.sources
229+
mv /etc/apt/sources.list.d/apache-arrow.sources{.bak,}
230+
cp -a /usr/share/keyrings/apache-arrow-apt-source{,-current}.asc
231+
sed \
232+
-i.bak \
233+
-e 's/\.asc$/-current.asc/g' \
234+
/etc/apt/sources.list.d/apache-arrow-current.sources
235+
if curl \
236+
--fail \
237+
--output "apache-arrow-apt-source-latest.deb" \
238+
https://packages.apache.org/artifactory/arrow/${distribution}/apache-arrow-apt-source-latest-${code_name}.deb; then
239+
${APT_INSTALL} --allow-downgrades ./apache-arrow-apt-source-latest.deb
240+
apt update
241+
can_downgrade=true
242+
fi
243+
fi
244+
245+
# 22.0.0.dev54 -> 22
246+
# 22.0.0 -> 22
247+
current_major_version=${package_version%%.*}
248+
# 22 -> 21
249+
previous_major_version=$[current_major_version -1]
250+
# 22 -> 21
251+
previous_package_version="${previous_major_version}.0.0-1"
252+
echo "::endgroup::"
253+
254+
if [ "${can_downgrade}" != "true" ]; then
255+
exit 0
256+
fi
257+
258+
echo "::group::Downgrade Gandiva"
259+
${APT_INSTALL} --allow-downgrades \
260+
gir1.2-arrow-1.0=${previous_package_version} \
261+
gir1.2-gandiva-1.0=${previous_package_version} \
262+
libarrow${previous_major_version}00=${previous_package_version} \
263+
libarrow-acero${previous_major_version}00=${previous_package_version} \
264+
libarrow-acero-dev=${previous_package_version} \
265+
libarrow-compute${previous_major_version}00=${previous_package_version} \
266+
libarrow-compute-dev=${previous_package_version} \
267+
libarrow-dev=${previous_package_version} \
268+
libarrow-glib${previous_major_version}00=${previous_package_version} \
269+
libarrow-glib-dev=${previous_package_version} \
270+
libgandiva${previous_major_version}00=${previous_package_version} \
271+
libgandiva-dev=${previous_package_version} \
272+
libgandiva-glib${previous_major_version}00=${previous_package_version} \
273+
libgandiva-glib-dev=${previous_package_version} \
274+
libparquet${previous_major_version}00=${previous_package_version} \
275+
libparquet-dev=${previous_package_version}
276+
echo "::endgroup::"
277+
278+
echo "::group::Downgrade Apache Arrow Flight SQL"
279+
${APT_INSTALL} --allow-downgrades \
280+
gir1.2-arrow-1.0=${previous_package_version} \
281+
gir1.2-arrow-flight-1.0=${previous_package_version} \
282+
gir1.2-arrow-flight-sql-1.0=${previous_package_version} \
283+
libarrow${previous_major_version}00=${previous_package_version} \
284+
libarrow-acero${previous_major_version}00=${previous_package_version} \
285+
libarrow-acero-dev=${previous_package_version} \
286+
libarrow-compute${previous_major_version}00=${previous_package_version} \
287+
libarrow-compute-dev=${previous_package_version} \
288+
libarrow-dev=${previous_package_version} \
289+
libarrow-flight${previous_major_version}00=${previous_package_version} \
290+
libarrow-flight-dev=${previous_package_version} \
291+
libarrow-flight-glib${previous_major_version}00=${previous_package_version} \
292+
libarrow-flight-glib-dev=${previous_package_version} \
293+
libarrow-flight-sql-dev=${previous_package_version} \
294+
libarrow-flight-sql-glib-dev=${previous_package_version} \
295+
libarrow-glib${previous_major_version}00=${previous_package_version} \
296+
libarrow-glib-dev=${previous_package_version}
297+
echo "::endgroup::"
298+
299+
echo "::group::Downgrade Apache Arrow Dataset"
300+
${APT_INSTALL} --allow-downgrades \
301+
gir1.2-arrow-1.0=${previous_package_version} \
302+
gir1.2-arrow-dataset-1.0=${previous_package_version} \
303+
gir1.2-parquet-1.0=${previous_package_version} \
304+
libarrow${previous_major_version}00=${previous_package_version} \
305+
libarrow-acero${previous_major_version}00=${previous_package_version} \
306+
libarrow-acero-dev=${previous_package_version} \
307+
libarrow-compute${previous_major_version}00=${previous_package_version} \
308+
libarrow-compute-dev=${previous_package_version} \
309+
libarrow-dataset${previous_major_version}00=${previous_package_version} \
310+
libarrow-dataset-dev=${previous_package_version} \
311+
libarrow-dataset-glib${previous_major_version}00=${previous_package_version} \
312+
libarrow-dataset-glib-dev=${previous_package_version} \
313+
libarrow-dev=${previous_package_version} \
314+
libarrow-glib${previous_major_version}00=${previous_package_version} \
315+
libarrow-glib-dev=${previous_package_version} \
316+
libparquet${previous_major_version}00=${previous_package_version} \
317+
libparquet-dev=${previous_package_version} \
318+
libparquet-glib${previous_major_version}00=${previous_package_version} \
319+
libparquet-glib-dev=${previous_package_version}
320+
echo "::endgroup::"
321+
322+
323+
echo "::group::Prepare upgrade test"
324+
mv /etc/apt/sources.list.d/apache-arrow-current.sources \
325+
/etc/apt/sources.list.d/apache-arrow.sources
326+
apt update
327+
echo "::endgroup::"
328+
329+
echo "::group::Upgrade Gandiva"
330+
${APT_INSTALL} libgandiva-glib-dev=${package_version}
331+
echo "::endgroup::"
332+
333+
echo "::group::Upgrade Apache Arrow Flight SQL"
334+
${APT_INSTALL} libarrow-flight-sql-glib-dev=${package_version}
335+
echo "::endgroup::"
336+
337+
echo "::group::Upgrade Apache Arrow Dataset"
338+
${APT_INSTALL} libarrow-dataset-dev=${package_version}
339+
echo "::endgroup::"

dev/tasks/linux-packages/apache-arrow/debian/control.in

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,10 @@ Architecture: any
180180
Multi-Arch: same
181181
Depends:
182182
${misc:Depends},
183-
libarrow-compute2200 (= ${binary:Version})
183+
libarrow-compute2200 (= ${binary:Version}),
184+
libarrow-dev (= ${binary:Version})
185+
Replaces: libarrow-dev (<< 21.0.0-1)
186+
Breaks: libarrow-dev (<< 21.0.0-1)
184187
Description: Apache Arrow is a data processing library for analysis
185188
.
186189
This package provides C++ header files for compute module.
@@ -191,8 +194,8 @@ Architecture: @CUDA_ARCHITECTURE@
191194
Multi-Arch: same
192195
Depends:
193196
${misc:Depends},
194-
libarrow-dev (= ${binary:Version}),
195-
libarrow-cuda2200 (= ${binary:Version})
197+
libarrow-cuda2200 (= ${binary:Version}),
198+
libarrow-dev (= ${binary:Version})
196199
Description: Apache Arrow is a data processing library for analysis
197200
.
198201
This package provides C++ header files for CUDA support.
@@ -204,7 +207,7 @@ Multi-Arch: same
204207
Depends:
205208
${misc:Depends},
206209
libarrow-acero2200 (= ${binary:Version}),
207-
libparquet-dev (= ${binary:Version})
210+
libarrow-compute-dev (= ${binary:Version})
208211
Description: Apache Arrow is a data processing library for analysis
209212
.
210213
This package provides C++ header files for Acero module.
@@ -282,7 +285,8 @@ Multi-Arch: same
282285
Pre-Depends: ${misc:Pre-Depends}
283286
Depends:
284287
${misc:Depends},
285-
${shlibs:Depends}
288+
${shlibs:Depends},
289+
libarrow2200 (= ${binary:Version})
286290
Description: Apache Parquet is a columnar storage format
287291
.
288292
This package provides C++ library files to process Apache Parquet format.
@@ -321,7 +325,7 @@ Pre-Depends: ${misc:Pre-Depends}
321325
Depends:
322326
${misc:Depends},
323327
${shlibs:Depends},
324-
libarrow2200 (= ${binary:Version})
328+
libarrow-acero2200 (= ${binary:Version})
325329
Description: Apache Arrow is a data processing library for analysis
326330
.
327331
This package provides GLib based library files.
@@ -332,7 +336,8 @@ Architecture: any
332336
Multi-Arch: same
333337
Depends:
334338
${gir:Depends},
335-
${misc:Depends}
339+
${misc:Depends},
340+
libarrow-glib2200 (= ${binary:Version})
336341
Description: Apache Arrow is a data processing library for analysis
337342
.
338343
This package provides GObject Introspection typelib files.
@@ -343,11 +348,9 @@ Architecture: any
343348
Multi-Arch: same
344349
Depends:
345350
${misc:Depends},
346-
libglib2.0-dev,
347-
libarrow-compute-dev (= ${binary:Version}),
351+
gir1.2-arrow-1.0 (= ${binary:Version}),
348352
libarrow-acero-dev (= ${binary:Version}),
349-
libarrow-glib2200 (= ${binary:Version}),
350-
gir1.2-arrow-1.0 (= ${binary:Version})
353+
libglib2.0-dev
351354
Suggests: libarrow-glib-doc
352355
Description: Apache Arrow is a data processing library for analysis
353356
.
@@ -372,8 +375,8 @@ Pre-Depends: ${misc:Pre-Depends}
372375
Depends:
373376
${misc:Depends},
374377
${shlibs:Depends},
375-
libarrow-glib2200 (= ${binary:Version}),
376-
libarrow-cuda2200 (= ${binary:Version})
378+
libarrow-cuda2200 (= ${binary:Version}),
379+
libarrow-glib2200 (= ${binary:Version})
377380
Description: Apache Arrow is a data processing library for analysis
378381
.
379382
This package provides GLib based library files for CUDA support.
@@ -385,7 +388,8 @@ Multi-Arch: same
385388
Depends:
386389
${gir:Depends},
387390
${misc:Depends},
388-
gir1.2-arrow-1.0 (= ${binary:Version})
391+
gir1.2-arrow-1.0 (= ${binary:Version}),
392+
libarrow-cuda-glib2200 (= ${binary:Version})
389393
Description: Apache Arrow is a data processing library for analysis
390394
.
391395
This package provides GObject Introspection typelib files for CUDA support.
@@ -396,10 +400,9 @@ Architecture: @CUDA_ARCHITECTURE@
396400
Multi-Arch: same
397401
Depends:
398402
${misc:Depends},
403+
gir1.2-arrow-cuda-1.0 (= ${binary:Version}),
399404
libarrow-cuda-dev (= ${binary:Version}),
400-
libarrow-glib-dev (= ${binary:Version}),
401-
libarrow-cuda-glib2200 (= ${binary:Version}),
402-
gir1.2-arrow-cuda-1.0 (= ${binary:Version})
405+
libarrow-glib-dev (= ${binary:Version})
403406
Description: Apache Arrow is a data processing library for analysis
404407
.
405408
This package provides GLib based header files for CUDA support.
@@ -412,8 +415,8 @@ Pre-Depends: ${misc:Pre-Depends}
412415
Depends:
413416
${misc:Depends},
414417
${shlibs:Depends},
415-
libarrow-glib2200 (= ${binary:Version}),
416-
libarrow-dataset2200 (= ${binary:Version})
418+
libarrow-dataset2200 (= ${binary:Version}),
419+
libarrow-glib2200 (= ${binary:Version})
417420
Description: Apache Arrow is a data processing library for analysis
418421
.
419422
This package provides GLib based library files for dataset module.
@@ -425,7 +428,8 @@ Multi-Arch: same
425428
Depends:
426429
${gir:Depends},
427430
${misc:Depends},
428-
gir1.2-arrow-1.0 (= ${binary:Version})
431+
gir1.2-arrow-1.0 (= ${binary:Version}),
432+
libarrow-dataset-glib2200 (= ${binary:Version})
429433
Description: Apache Arrow is a data processing library for analysis
430434
.
431435
This package provides GObject Introspection typelib files for dataset module.
@@ -436,10 +440,9 @@ Architecture: any
436440
Multi-Arch: same
437441
Depends:
438442
${misc:Depends},
443+
gir1.2-arrow-dataset-1.0 (= ${binary:Version}),
439444
libarrow-dataset-dev (= ${binary:Version}),
440-
libarrow-glib-dev (= ${binary:Version}),
441-
libarrow-dataset-glib2200 (= ${binary:Version}),
442-
gir1.2-arrow-dataset-1.0 (= ${binary:Version})
445+
libarrow-glib-dev (= ${binary:Version})
443446
Description: Apache Arrow is a data processing library for analysis
444447
.
445448
This package provides GLib based header files for dataset module.
@@ -476,7 +479,8 @@ Multi-Arch: same
476479
Depends:
477480
${gir:Depends},
478481
${misc:Depends},
479-
gir1.2-arrow-1.0 (= ${binary:Version})
482+
gir1.2-arrow-1.0 (= ${binary:Version}),
483+
libarrow-flight-glib2200 (= ${binary:Version})
480484
Description: Apache Arrow is a data processing library for analysis
481485
.
482486
This package provides GObject Introspection typelib files for Apache Arrow
@@ -488,10 +492,9 @@ Architecture: any
488492
Multi-Arch: same
489493
Depends:
490494
${misc:Depends},
495+
gir1.2-arrow-flight-1.0 (= ${binary:Version}),
491496
libarrow-flight-dev (= ${binary:Version}),
492-
libarrow-glib-dev (= ${binary:Version}),
493-
libarrow-flight-glib2200 (= ${binary:Version}),
494-
gir1.2-arrow-flight-1.0 (= ${binary:Version})
497+
libarrow-glib-dev (= ${binary:Version})
495498
Description: Apache Arrow is a data processing library for analysis
496499
.
497500
This package provides GLib based header files for Apache Arrow Flight.
@@ -528,7 +531,8 @@ Multi-Arch: same
528531
Depends:
529532
${gir:Depends},
530533
${misc:Depends},
531-
gir1.2-arrow-flight-1.0 (= ${binary:Version})
534+
gir1.2-arrow-flight-1.0 (= ${binary:Version}),
535+
libarrow-flight-sql-glib2200 (= ${binary:Version})
532536
Description: Apache Arrow is a data processing library for analysis
533537
.
534538
This package provides GObject Introspection typelib files for Apache Arrow
@@ -540,10 +544,9 @@ Architecture: any
540544
Multi-Arch: same
541545
Depends:
542546
${misc:Depends},
543-
libarrow-flight-sql-dev (= ${binary:Version}),
547+
gir1.2-arrow-flight-sql-1.0 (= ${binary:Version}),
544548
libarrow-flight-glib-dev (= ${binary:Version}),
545-
libarrow-flight-sql-glib2200 (= ${binary:Version}),
546-
gir1.2-arrow-flight-sql-1.0 (= ${binary:Version})
549+
libarrow-flight-sql-dev (= ${binary:Version})
547550
Description: Apache Arrow is a data processing library for analysis
548551
.
549552
This package provides GLib based header files for Apache Arrow Flight SQL.
@@ -581,7 +584,8 @@ Multi-Arch: same
581584
Depends:
582585
${gir:Depends},
583586
${misc:Depends},
584-
gir1.2-arrow-1.0 (= ${binary:Version})
587+
gir1.2-arrow-1.0 (= ${binary:Version}),
588+
libgandiva-glib2200 (= ${binary:Version})
585589
Description: Gandiva is a toolset for compiling and evaluating expressions
586590
on Arrow Data.
587591
.
@@ -593,10 +597,9 @@ Architecture: any
593597
Multi-Arch: same
594598
Depends:
595599
${misc:Depends},
596-
libgandiva-dev (= ${binary:Version}),
600+
gir1.2-gandiva-1.0 (= ${binary:Version}),
597601
libarrow-glib-dev (= ${binary:Version}),
598-
libgandiva-glib2200 (= ${binary:Version}),
599-
gir1.2-gandiva-1.0 (= ${binary:Version})
602+
libgandiva-dev (= ${binary:Version})
600603
Description: Gandiva is a toolset for compiling and evaluating expressions
601604
on Arrow Data.
602605
.
@@ -635,7 +638,8 @@ Multi-Arch: same
635638
Depends:
636639
${gir:Depends},
637640
${misc:Depends},
638-
gir1.2-arrow-1.0 (= ${binary:Version})
641+
gir1.2-arrow-1.0 (= ${binary:Version}),
642+
libparquet-glib2200 (= ${binary:Version})
639643
Description: Apache Parquet is a columnar storage format
640644
.
641645
This package provides GObject Introspection typelib files.
@@ -646,10 +650,9 @@ Architecture: any
646650
Multi-Arch: same
647651
Depends:
648652
${misc:Depends},
653+
gir1.2-parquet-1.0 (= ${binary:Version}),
649654
libarrow-glib-dev (= ${binary:Version}),
650-
libparquet-dev (= ${binary:Version}),
651-
libparquet-glib2200 (= ${binary:Version}),
652-
gir1.2-parquet-1.0 (= ${binary:Version})
655+
libparquet-dev (= ${binary:Version})
653656
Suggests: libparquet-glib-doc
654657
Description: Apache Parquet is a columnar storage format
655658
.

0 commit comments

Comments
 (0)