iRODS S3 API
Alan King
Senior Software Developer
iRODS Consortium
November 17-22, 2024
Supercomputing 2024
Atlanta, GA
Overview
Motivation / Goals
History
Status / Implementation - Architecture
Status / Implementation - Endpoints
Implementation - Configuration
Single file which defines two sections to help administrators understand the options and how they relate to each other.
Modeled after NFSRODS.
{
// Defines S3 options that affect how the
// client-facing component of the server behaves.
"s3_server": {
// ...
},
// Defines iRODS connection information.
"irods_client": {
// ...
}
}
Implementation - Configuration
"s3_server": {
"host": "0.0.0.0",
"port": 9000,
"log_level": "info",
"plugins": {
"static_bucket_resolver": {
"name": "static_bucket_resolver",
"mappings": {
"<bucket_name>": "/path/to/collection",
"<another_bucket>": "/path/to/another/collection"
}
},
"static_authentication_resolver": {
"name": "static_authentication_resolver",
"users": {
"<s3_username>": {
"username": "<string>",
"secret_key": "<string>"
}
}
}
},
"region": "us-east-1",
"multipart_upload_part_files_directory": "/tmp",
"authentication": {
"eviction_check_interval_in_seconds": 60,
"basic": { "timeout_in_seconds": 3600 }
},
"requests": {
"threads": 3,
"max_size_of_request_body_in_bytes": 8388608,
"timeout_in_seconds": 30
},
"background_io": { "threads": 6 }
}
Implementation - Configuration
"irods_client": {
"host": "<string>",
"port": 1247,
"zone": "<string>",
"tls": { /* ... options ... */ },
"enable_4_2_compatibility": false,
"proxy_admin_account": {
"username": "<string>",
"password": "<string>"
},
"connection_pool": {
"size": 6,
"refresh_timeout_in_seconds": 600,
"max_retrievals_before_refresh": 16,
"refresh_when_resource_changes_detected": true
},
"resource": "<string>",
"put_object_buffer_size_in_bytes": 8192,
"get_object_buffer_size_in_bytes": 8192
}
Implementation - Multipart Implementations Considered
A. Multiobject - Parts written as separate objects. On CompleteMultipartUpload, parts are concatenated on the iRODS server.
B. Store-and-Forward - Write each part to the mid-tier, then forward to iRODS on CompleteMultipartUpload.
C. Efficient Store-and-Forward - Write down / hold non-contiguous parts in the mid-tier, then send contiguous parts to iRODS when ready.
D. Store-and-Register - Write to a file accessible to iRODS and register when complete.
Implementation - B. Store-and-Forward (v0.2.0)
How does it work?
1. CreateMultipartUpload
2. UploadPart
Implementation - B. Store-and-Forward (v0.2.0)
3. CompleteMultipartUpload
Status / Implementation - v0.2.0 Performance Comparison
The following compares transfers to/from iRODS via the S3 API with transfers to/from a local MinIO server. The Boto S3 client was used for all cases.
Notes:
Status / Implementation - C. Efficient Store-and-Forward (v0.3.0)
Status / Implementation - Multipart Performance Improvement
Future Work - D. Store and Register
Future Work
Thank you!