FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

test: replace MinIO with SeaweedFS for object-storage testing by dimitri-yatsenko · Pull Request #1647 · datajoint/datajoint-python · GitHub

Repository navigation

test: replace MinIO with SeaweedFS for object-storage testing - #1647

Open
dimitri-yatsenko wants to merge 2 commits into
masterfrom
test/seaweedfs-fixture
Open

dimitri-yatsenko wants to merge 2 commits into
masterfrom
test/seaweedfs-fixture

Conversation

dimitri-yatsenko commented Oct 24, 2026 •
edited
Loading

Copy link
Copy Markdown
Member

Closes #1560. Supersedes #1608.

Summary

The test suite and the docker-compose dev environment now use SeaweedFS as the S3-compatible object store, in place of MinIO. MinIO has stopped publishing public images and archived its source: minio/minio is gone from Docker Hub, quay.io/minio/minio requires authentication, and the Chainguard build adopted in #1559 depends on a third party rebuilding software that no longer gets upstream fixes.

Only the test and development setup changes; no library code is touched. DataJoint's support for MinIO as a user's storage backend (protocol: "minio" in migrate.py, and any S3-compatible endpoint generally) is unchanged.

Changes

File Change
tests/conftest.py minio_container → s3_container, running chrislusf/seaweedfs:4.48 through a generic testcontainers DockerContainer, with a readiness wait on the S3 gateway. Image override DJ_TEST_MINIO_IMAGE → DJ_TEST_S3_IMAGE. Fixture minio_client → s3_client. Marker requires_minio → requires_s3. External-container default S3_ENDPOINT → localhost:8333.
tests/integration/test_{npy_codec,attach,codecs}.py Use the renamed s3_client fixture.
docker-compose.yaml The minio service becomes s3, on the same image as the fixture, port 8333, with a healthcheck; app depends on it. The previous minio/minio image no longer pulls, so docker compose up was already broken.
pyproject.toml, pixi.lock Drop the unused minio extra from testcontainers (which pulled in the minio client and pycryptodome); rename the marker; services-up starts db s3.
CONTRIBUTING.md Updated service names, commands, and endpoint.

Credentials (datajoint/datajoint) and the bucket name (datajoint.test) are unchanged.

Why SeaweedFS

#1560 set the bar: DataJoint reaches object storage through s3fs, which emulates directories over S3 listing, and garbage collection decides what is orphaned by walking that emulation. A server that lists differently would not error; it would make GC misclassify files while test_gc still passed. That rules out lenient mocks (moto, s3mock) as the default. SeaweedFS is a real object store (Apache-2.0, public image, monthly releases), and it was tested first; Garage was the fallback and was not needed.

Testing

Listing fidelity. A probe built the same tree on Chainguard MinIO and on SeaweedFS through s3fs: nested prefixes, a zero-byte directory marker, a marker that also has children, an empty object, and a missing path. It recorded isdir, exists, ls, find (with and without directories), walk, du, isfile on the marker, and the tree after a recursive rm. The outputs were identical.

Suites.

Run Result
Object-storage suites (test_gc, test_object, test_npy_codec, test_codecs, test_attach) on MinIO, baseline 124 passed, 41s
Same suites on SeaweedFS, cold pull with the image removed first 124 passed, 30s
Same suites against docker compose up s3 with DJ_USE_EXTERNAL_CONTAINERS=1 124 passed; the service reports healthy
Full suite on SeaweedFS 1203 passed, 14 skipped
-m requires_s3 selects 39 tests, as requires_minio did

Auth. Credentials are enforced: a request with a wrong secret is rejected.

Notes for reviewers

  • Anyone with a local DJ_TEST_MINIO_IMAGE, or with -m "not requires_minio" in their own scripts, needs the new names.
  • For anyone running external containers by hand, the endpoint moves from port 9000 to 8333.

MinIO withdrew its public images and archived its source. SeaweedFS
4.48 matches MinIO on s3fs directory emulation, which GC relies on, and
passes the object-storage suites from a cold pull. The image is
overridable through DJ_TEST_S3_IMAGE.

Refs #1560
- docker-compose: replace the minio service with s3 (SeaweedFS 4.48,
  the image the fixture uses); the old minio/minio image no longer pulls
- rename the requires_minio marker to requires_s3 and the minio_client
  fixture to s3_client
- default S3_ENDPOINT for external containers is localhost:8333
- drop the unused minio extra from testcontainers; relock pixi
- update CONTRIBUTING.md

Refs #1560
dimitri-yatsenko changed the title Run object-storage tests against SeaweedFS instead of MinIO test: replace MinIO with SeaweedFS for object-storage testing Oct 24, 2026

This branch has not been deployed

No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Evaluate replacing MinIO in the test fixture: the vendor has withdrawn public images

1 participant


Back | FazBrowse Home | New Git URL