Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
9e33dcb
feat(S3AccessIT): scrub minio from S3AccessIT test
srmanda-cs May 13, 2026
87ed705
feat(docker-compose-dev): scrub minio from docker-compose-dev.yml
srmanda-cs May 13, 2026
2d2af5f
feat(conf/keycloak/docker-compose-dev): scrub minio from conf/keycloa…
srmanda-cs May 13, 2026
fdc1a0a
feat(docker-compose-dev): add localstack_noredirect storage driver co…
srmanda-cs May 13, 2026
0f5f2d3
feat(keycloak/docker-compose-dev): add localstack_noredirect storage …
srmanda-cs May 13, 2026
6a3cfd4
test(S3AccessIT): use localstack_noredirect driver in testNonDirectUp…
srmanda-cs May 13, 2026
f991ca9
test(S3AccessIT): update drivers doc strings to include localstack_no…
srmanda-cs May 13, 2026
1e39eee
fix(S3AccessIT): use distinct bucket name mybucket-noredirect for loc…
srmanda-cs May 13, 2026
8eccaf4
docs(big-data-support): remove MinIO references
srmanda-cs May 15, 2026
801e2b9
docs(config): remove MinIO references
srmanda-cs May 15, 2026
483e7f2
docs(S3AccessIO): remove MinIO references
srmanda-cs May 15, 2026
73dbf13
docs(S3AccessIT): remove MinIO references
srmanda-cs May 15, 2026
3d4d86c
fix: remove unnecessary whitespace changes
srmanda-cs May 26, 2026
c132840
docs(S3AccessIO): remove MinIO references
srmanda-cs May 26, 2026
06bd792
feat(dev-start-frd.sh): remove MinIO initialization
srmanda-cs May 26, 2026
4102e85
feat: remove whitespaces
srmanda-cs May 26, 2026
c5a3d41
Clarify comment on S3 tags support
srmanda-cs May 26, 2026
c9dc95f
Ensure LocalStack no-redirect bucket exists for S3 tests
Copilot May 26, 2026
647dd51
Handle generic S3 404 in S3AccessIT bucket setup
Copilot May 26, 2026
84b0d18
Null-check S3 error details in bucket existence helper
Copilot May 26, 2026
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
37 changes: 10 additions & 27 deletions conf/keycloak/docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,16 @@ services:
-Ddataverse.files.localstack1.download-redirect=true
-Ddataverse.files.localstack1.access-key=default
-Ddataverse.files.localstack1.secret-key=default
-Ddataverse.files.minio1.type=s3
-Ddataverse.files.minio1.label=MinIO
-Ddataverse.files.minio1.custom-endpoint-url=http://minio:9000
-Ddataverse.files.minio1.custom-endpoint-region=us-east-1
-Ddataverse.files.minio1.bucket-name=mybucket
-Ddataverse.files.minio1.path-style-access=true
-Ddataverse.files.minio1.upload-redirect=false
-Ddataverse.files.minio1.download-redirect=false
-Ddataverse.files.minio1.access-key=4cc355_k3y
-Ddataverse.files.minio1.secret-key=s3cr3t_4cc355_k3y
-Ddataverse.files.localstack_noredirect.type=s3
-Ddataverse.files.localstack_noredirect.label=LocalStackNoRedirect
-Ddataverse.files.localstack_noredirect.custom-endpoint-url=http://localstack:4566
-Ddataverse.files.localstack_noredirect.custom-endpoint-region=us-east-2
-Ddataverse.files.localstack_noredirect.bucket-name=mybucket-noredirect
-Ddataverse.files.localstack_noredirect.path-style-access=true
-Ddataverse.files.localstack_noredirect.upload-redirect=false
-Ddataverse.files.localstack_noredirect.download-redirect=false
-Ddataverse.files.localstack_noredirect.access-key=default
-Ddataverse.files.localstack_noredirect.secret-key=default
-Ddataverse.pid.providers=fake
-Ddataverse.pid.default-provider=fake
-Ddataverse.pid.fake.type=FAKE
Expand Down Expand Up @@ -260,23 +260,6 @@ services:
tmpfs:
- /localstack:mode=770,size=128M,uid=1000,gid=1000

dev_minio:
container_name: "dev_minio"
hostname: "minio"
image: minio/minio
restart: on-failure
ports:
- "9000:9000"
- "9001:9001"
networks:
- dataverse
volumes:
- ./docker-dev-volumes/minio_storage:/data
environment:
MINIO_ROOT_USER: 4cc355_k3y
MINIO_ROOT_PASSWORD: s3cr3t_4cc355_k3y
command: server /data

previewers-provider:
container_name: previewers-provider
hostname: previewers-provider
Expand Down
1 change: 1 addition & 0 deletions conf/localstack/buckets.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
# https://stackoverflow.com/questions/53619901/auto-create-s3-buckets-on-localstack
awslocal s3 mb s3://mybucket
awslocal s3 mb s3://mybucket-noredirect
9 changes: 1 addition & 8 deletions doc/sphinx-guides/source/installation/big-data-support.rst
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ If the bucket allows the wildcard ``*`` but the Dataverse application only allow
Detailed information for the most common S3 admin tools around CORS:

- `AWS <https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html>`_
- `Minio mc <https://docs.min.io/enterprise/aistor-object-store/reference/cli/mc-cors>`_
- `s3cmd <https://servicedesk.surf.nl/wiki/spaces/WIKI/pages/215253125/Object+Store+S3+CORS+Policies>`_

Get Current CORS Policy on Bucket
Expand All @@ -80,9 +79,6 @@ If you'd like to check the CORS configuration on your bucket before making chang
.. group-tab:: AWS CLI
:code:`aws s3api get-bucket-cors --bucket <BUCKET_NAME>`

.. group-tab:: Minio Client (mc)
:code:`mc cors get <STORE_NAME>/<BUCKET_NAME>`

Set CORS Policy on Bucket
+++++++++++++++++++++++++

Expand All @@ -107,9 +103,6 @@ Both JSON and XML format are explained in detail in `AWS Docs <https://docs.aws.

Alternatively, you can enable CORS using the AWS S3 web interface, using json-encoded rules as in the example above.

.. group-tab:: Minio Client (mc)
Create a file :download:`cors.xml </_static/installation/cors/cors.xml>` as follows:

.. literalinclude:: /_static/installation/cors/cors.xml
:name: xml-cors
:language: xml
Expand All @@ -124,7 +117,7 @@ Both JSON and XML format are explained in detail in `AWS Docs <https://docs.aws.
S3 Tags and Direct Upload
~~~~~~~~~~~~~~~~~~~~~~~~~

Since the direct upload mechanism creates the final file rather than an intermediate temporary file, user actions, such as neither saving or canceling an upload session before closing the browser page, can leave an abandoned file in the store. The direct upload mechanism attempts to use S3 tags to aid in identifying/removing such files. Upon upload, files are given a "dv-state":"temp" tag which is removed when the dataset changes are saved and new files are added in the Dataverse installation. Note that not all S3 implementations support tags. Minio, for example, does not. With such stores, direct upload may not work and you might need to disable tagging. For details, see :ref:`s3-tagging` in the Installation Guide.
Since the direct upload mechanism creates the final file rather than an intermediate temporary file, user actions, such as neither saving or canceling an upload session before closing the browser page, can leave an abandoned file in the store. The direct upload mechanism attempts to use S3 tags to aid in identifying/removing such files. Upon upload, files are given a "dv-state":"temp" tag which is removed when the dataset changes are saved and new files are added in the Dataverse installation. Note that not all S3 implementations support tags. With such stores, direct upload may not work and you might need to disable tagging. For details, see :ref:`s3-tagging` in the Installation Guide.

Trusted Remote Storage with the ``remote`` Store Type
-----------------------------------------------------
Expand Down
9 changes: 2 additions & 7 deletions doc/sphinx-guides/source/installation/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1218,7 +1218,7 @@ You can configure this redirect properly in your cloud environment to generate a
Amazon S3 Storage (or Compatible)
+++++++++++++++++++++++++++++++++

The Dataverse Software supports Amazon S3 storage as well as other S3-compatible stores (like Minio, Ceph RADOS S3 Gateway and many more) for files uploaded to your Dataverse installation.
The Dataverse Software supports Amazon S3 storage as well as other S3-compatible stores (like Ceph RADOS S3 Gateway and many more) for files uploaded to your Dataverse installation.

The Dataverse Software S3 driver supports multi-part upload for large files (over 1 GB by default - see the min-part-size option in the table below to change this).

Expand Down Expand Up @@ -1264,7 +1264,7 @@ Please make note of the following details:

- **Endpoint URL** - consult the documentation of your service on how to find it.

* Example: https://play.minio.io:9000
* Example: http://localhost.localstack.cloud:4566

- **Region:** Optional, but some services might use it. Consult your service documentation.

Expand Down Expand Up @@ -1461,11 +1461,6 @@ You may provide the values for these via any `supported MicroProfile Config API
Reported Working S3-Compatible Storage
######################################

`Minio v2018-09-12 <https://minio.io>`_
Set ``dataverse.files.<id>.path-style-access=true``, as Minio works path-based. Works pretty smooth, easy to setup.
**Can be used for quick testing, too:** just use the example values above. Uses the public (read: unsecure and
possibly slow) https://play.minio.io:9000 service.
Comment on lines -1464 to -1467
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd be ok with leaving this in. I'm also ok with removing it.

Copy link
Copy Markdown
Contributor Author

@srmanda-cs srmanda-cs Jun 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lemme know if anyone wants this back in, and I'll add it back in! For now, imma leave it as is


`StorJ Object Store <https://www.storj.io>`_
StorJ is a distributed object store that can be configured with an S3 gateway. Per the S3 Storage instructions above, you'll first set up the StorJ S3 store by defining the id, type, and label. After following the general installation, set the following configuration to use a StorJ object store: ``dataverse.files.<id>.chunked-encoding=false``. For step-by-step instructions see https://docs.storj.io/dcs/how-tos/dataverse-integration-guide/

Expand Down
37 changes: 10 additions & 27 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@ services:
-Ddataverse.files.localstack1.download-redirect=true
-Ddataverse.files.localstack1.access-key=default
-Ddataverse.files.localstack1.secret-key=default
-Ddataverse.files.minio1.type=s3
-Ddataverse.files.minio1.label=MinIO
-Ddataverse.files.minio1.custom-endpoint-url=http://minio:9000
-Ddataverse.files.minio1.custom-endpoint-region=us-east-1
-Ddataverse.files.minio1.bucket-name=mybucket
-Ddataverse.files.minio1.path-style-access=true
-Ddataverse.files.minio1.upload-redirect=false
-Ddataverse.files.minio1.download-redirect=false
-Ddataverse.files.minio1.access-key=4cc355_k3y
-Ddataverse.files.minio1.secret-key=s3cr3t_4cc355_k3y
-Ddataverse.files.localstack_noredirect.type=s3
-Ddataverse.files.localstack_noredirect.label=LocalStackNoRedirect
-Ddataverse.files.localstack_noredirect.custom-endpoint-url=http://localstack:4566
-Ddataverse.files.localstack_noredirect.custom-endpoint-region=us-east-2
-Ddataverse.files.localstack_noredirect.bucket-name=mybucket-noredirect
-Ddataverse.files.localstack_noredirect.path-style-access=true
-Ddataverse.files.localstack_noredirect.upload-redirect=false
-Ddataverse.files.localstack_noredirect.download-redirect=false
-Ddataverse.files.localstack_noredirect.access-key=default
-Ddataverse.files.localstack_noredirect.secret-key=default
-Ddataverse.pid.providers=fake
-Ddataverse.pid.default-provider=fake
-Ddataverse.pid.fake.type=FAKE
Expand Down Expand Up @@ -252,23 +252,6 @@ services:
tmpfs:
- /localstack:mode=770,size=128M,uid=1000,gid=1000

dev_minio:
container_name: "dev_minio"
hostname: "minio"
image: minio/minio
restart: on-failure
ports:
- "9000:9000"
- "9001:9001"
networks:
- dataverse
volumes:
- ./docker-dev-volumes/minio_storage:/data
environment:
MINIO_ROOT_USER: 4cc355_k3y
MINIO_ROOT_PASSWORD: s3cr3t_4cc355_k3y
command: server /data

previewers-provider:
container_name: previewers-provider
hostname: previewers-provider
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm just putting this here at the bottom so we can resolve it later but @srmanda-cs can you please investigate the failure at https://github.com/IQSS/dataverse/actions/runs/26771052464/job/78910313410?pr=12394 ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, probably some kind of rebasing failure, I'll look into it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be fixed now.

Expand Down
1 change: 0 additions & 1 deletion scripts/dev/dev-start-frd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ mkdir -p docker-dev-volumes/app/secrets
mkdir -p docker-dev-volumes/postgresql/data
mkdir -p docker-dev-volumes/solr/data
mkdir -p docker-dev-volumes/solr/conf
mkdir -p docker-dev-volumes/minio_storage

# Only disable DDL generation if database is already initialized
# (on first run, we need create-tables to bootstrap the schema)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1331,8 +1331,8 @@ public void removeTempTag() throws IOException {
if (e.getCause() instanceof S3Exception) {
S3Exception s3e = (S3Exception) e.getCause();
if (s3e.statusCode() == 501) {
// In this case, it's likely that tags are not implemented at all (e.g. by
// Minio) so no tag was set either and it's just something to be aware of
// In this case, it's likely that tags are not implemented at all
// so no tag was set either and it's just something to be aware of
logger.warning("Temp tag not deleted: Object tags not supported by storage: " + driverId);
} else {
// In this case, the assumption is that adding tags has worked, so not removing
Expand Down
Loading