Repository navigation
test: replace MinIO with SeaweedFS for object-storage testing - #1647
Open
dimitri-yatsenko wants to merge 2 commits into
Open
dimitri-yatsenko wants to merge 2 commits into
dimitri-yatsenko wants to merge 2 commits into
Conversation
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
dimitri-yatsenko
requested review from
MilagrosMarin,
lum-agilyti and
ttngu207
October 24, 2026 18:12
- 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
This branch has not been deployed
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
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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/miniois gone from Docker Hub,quay.io/minio/miniorequires 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"inmigrate.py, and any S3-compatible endpoint generally) is unchanged.Changes
tests/conftest.pyminio_container→s3_container, runningchrislusf/seaweedfs:4.48through a generic testcontainersDockerContainer, with a readiness wait on the S3 gateway. Image overrideDJ_TEST_MINIO_IMAGE→DJ_TEST_S3_IMAGE. Fixtureminio_client→s3_client. Markerrequires_minio→requires_s3. External-container defaultS3_ENDPOINT→localhost:8333.tests/integration/test_{npy_codec,attach,codecs}.pys3_clientfixture.docker-compose.yamlminioservice becomess3, on the same image as the fixture, port 8333, with a healthcheck;appdepends on it. The previousminio/minioimage no longer pulls, sodocker compose upwas already broken.pyproject.toml,pixi.lockminioextra fromtestcontainers(which pulled in theminioclient andpycryptodome); rename the marker;services-upstartsdb s3.CONTRIBUTING.mdCredentials (
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_gcstill 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,isfileon the marker, and the tree after a recursiverm. The outputs were identical.Suites.
test_gc,test_object,test_npy_codec,test_codecs,test_attach) on MinIO, baselinedocker compose up s3withDJ_USE_EXTERNAL_CONTAINERS=1-m requires_s3requires_miniodidAuth. Credentials are enforced: a request with a wrong secret is rejected.
Notes for reviewers
DJ_TEST_MINIO_IMAGE, or with-m "not requires_minio"in their own scripts, needs the new names.