Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@ networks:
services:
minio:
container_name: minio
image: quay.io/minio/minio:latest
# MinIO discontinued prebuilt community images (quay.io/minio/minio and
# minio/minio on Docker Hub are both unpullable now -- see
# docker/minio/Dockerfile). Built locally from their last binary
# release until this is mirrored into a registry we control -- `image:`
# here just names/tags the local build result for now.
build: ./minio
image: rustyiceberg/minio:RELEASE.2025-09-07T16-13-09Z
ports:
- "9000:9000" # MinIO API port
- "9001:9001" # MinIO Console port
Expand All @@ -24,7 +30,9 @@ services:
retries: 5

setup_bucket:
image: quay.io/minio/mc:latest
# See the minio service above -- same situation for quay.io/minio/mc.
build: ./mc
image: rustyiceberg/mc:RELEASE.2025-08-13T08-35-41Z
depends_on:
minio:
condition: service_healthy
Expand Down
19 changes: 19 additions & 0 deletions docker/mc/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# See docker/iceberg/minio/Dockerfile's header: quay.io/minio/mc and
# minio/mc (Docker Hub) are both unpullable now that MinIO has discontinued
# prebuilt community images. This builds the mc client from MinIO's last
# published binary release, fetched from GitHub Releases and checksum-verified.
FROM debian:bookworm-slim

ARG MC_RELEASE=RELEASE.2025-08-13T08-35-41Z
ARG MC_SHA256=01f866e9c5f9b87c2b09116fa5d7c06695b106242d829a8bb32990c00312e891

RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*

RUN curl -fsSL -o /usr/bin/mc \
"https://github.com/minio/mc/releases/download/${MC_RELEASE}/mc.linux-amd64.${MC_RELEASE}" \
&& echo "${MC_SHA256} /usr/bin/mc" | sha256sum -c - \
&& chmod +x /usr/bin/mc

ENTRYPOINT ["mc"]
27 changes: 27 additions & 0 deletions docker/minio/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# MinIO discontinued prebuilt community images (see minio/minio's README as
# of Oct 2025: "THIS REPOSITORY IS NO LONGER MAINTAINED" / "distributed as
# source code only") -- quay.io/minio/minio and minio/minio (Docker Hub) are
# both unpullable now, and even upstream's own Dockerfile is broken (it FROMs
# minio/minio:latest, the very image that no longer exists).
#
# This builds a drop-in replacement from MinIO's last published binary
# release instead, fetched directly from GitHub Releases (still served,
# unlike dl.min.io which now returns 410) and checksum-verified.
FROM debian:bookworm-slim

ARG MINIO_RELEASE=RELEASE.2025-09-07T16-13-09Z
ARG MINIO_SHA256=7c5bd8512c6e966455b1d198209358b2d191c77a83ab377c4073281065fb855f

RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*

RUN curl -fsSL -o /usr/bin/minio \
"https://github.com/minio/minio/releases/download/${MINIO_RELEASE}/minio.linux-amd64.${MINIO_RELEASE}" \
&& echo "${MINIO_SHA256} /usr/bin/minio" | sha256sum -c - \
&& chmod +x /usr/bin/minio

EXPOSE 9000 9001
VOLUME ["/data"]
ENTRYPOINT ["minio"]
CMD ["server", "/data"]
2 changes: 1 addition & 1 deletion iceberg_rust_ffi/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion iceberg_rust_ffi/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "iceberg_rust_ffi"
version = "0.9.5"
version = "0.9.6"
edition = "2021"

[lib]
Expand Down
14 changes: 12 additions & 2 deletions iceberg_rust_ffi/src/nested_pipeline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -847,8 +847,18 @@ mod tests {
batch.byte_sem.add_permits(batch.clamped_byte_len);
assert_eq!(byte_sem.available_permits(), byte_budget);

// Free the IPC payload allocated by serialize_record_batch.
unsafe { drop(Box::from_raw(batch.batch.rust_ptr as *mut Vec<u8>)) };
// Free the ArrowBatchInner allocated by record_batch_to_c_ffi (see
// `iceberg_arrow_batch_free`, which does the same thing at the FFI
// boundary). The prior `*mut Vec<u8>` cast here was wrong: `rust_ptr`
// is a `Box<ArrowBatchInner>`, not a serialized byte buffer, and
// dropping it as the wrong type is undefined behavior (freeing with
// a layout that doesn't match the real allocation) -- rustc 1.99's
// new allocator precondition checks started catching it as a SIGABRT.
unsafe {
drop(Box::from_raw(
batch.batch.rust_ptr as *mut crate::table::ArrowBatchInner,
))
};

// Drain finishes cleanly once the stream is exhausted.
drop(rx);
Expand Down
2 changes: 1 addition & 1 deletion iceberg_rust_ffi/src/pipeline_stats.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ impl PipelineStats {
/// caused by lingering tasks from a previous scan releasing after a reset().
pub(crate) fn track_buffer_release(&self, bytes: u64) {
self.buffered_bytes
.fetch_update(Ordering::Relaxed, Ordering::Relaxed, |v| {
.try_update(Ordering::Relaxed, Ordering::Relaxed, |v| {
Some(v.saturating_sub(bytes))
})
.ok();
Expand Down
Loading