Bug Report
iRODS Version, OS and Version
iRODS 5.0.2, Ubuntu 24.04 (Docker)
Using MinIO as S3 storage backend. Have not been able to test in acceptance, where we use Ceph, yet.
What did you try to do?
Trying to put 0 byte files into S3 using irsync throws errors in the logs, but seems to function just fine. It only seems to happen on empty (0 byte) files.
Expected behavior
No errors in the logs
Observed Behavior (including steps to reproduce, if applicable)
irods@icat:/etc/irods$ touch /tmp/0bytes.bin
irods@icat:/etc/irods$ iput -R replRescUMCeph01 /tmp/0bytes.bin
irods@icat:/etc/irods$ irsync -K -v -R replRescUMCeph01 /tmp/0bytes.bin i:/nlmumc/home/rods
0bytes.bin 0.000 MB | 3.289 sec | 0 thr | 0.000 MB/s
irods@icat:/etc/irods$ ils -l /nlmumc/home/rods/0bytes.bin
rods 0 replRescUMCeph01;UM-Ceph-S3-AC 0 2026-06-12.15:34 & 0bytes.bin
rods 1 replRescUMCeph01;UM-Ceph-S3-GL 0 2026-06-12.15:34 & 0bytes.bin
no error exit code, all files in iRODS in a 'good' state and replicated properly
Resource configuration:
irods@icat:/$ iadmin lr UM-Ceph-S3-AC
resc_id: 10249
resc_name: UM-Ceph-S3-AC
zone_name: nlmumc
resc_type_name: s3
resc_net: ires-hnas-um.dh.local
resc_def_path: /dh-irods-bucket-dev
free_space:
free_space_ts:
resc_info:
r_comment:
resc_status:
create_ts: 2026-06-12.15:12:58
modify_ts: 2026-06-12.15:13:04
resc_children:
resc_context: S3_DEFAULT_HOSTNAME=minio1.dh.local:9000;S3_AUTH_FILE=/var/lib/irods/minio1.keypair;S3_REGIONNAME=irods-dev;S3_RETRY_COUNT=1;S3_WAIT_TIME_SECONDS=3;S3_PROTO=HTTPS;ARCHIVE_NAMING_POLICY=consistent;HOST_MODE=cacheless_detached;S3_CACHE_DIR=/cache
resc_parent: 10252
resc_parent_context:
iRODS Server Logs (if applicable)
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:242 [store_and_log_status] [[12404964357216192316]] libs3_types::status: [XmlParseFailure] - 31"
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:245 [store_and_log_status] [[12404964357216192316]] S3Host: minio1.dh.local:9000"
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:249 [store_and_log_status] [[12404964357216192316]] Function: s3_upload::callback_for_write_to_s3_base::on_response_completion"
"[-]\t/irods_source/server/api/src/rsFileChksum.cpp:365:auto file_checksum(RsComm *, const char *, const char *, const char *, const char *, rodsLong_t, char *)::(anonymous class)::operator()() const : status [S3_PUT_ERROR] errno [] -- message [operator() - fileClose error for [/dh-irods-bucket-dev/home/rods/0bytes.bin].]\n\t[-]\t/irods_source/server/drivers/src/fileDriver.cpp:167:irods::error fileClose(rsComm_t *, irods::first_class_object_ptr) : status [S3_PUT_ERROR] errno [] -- message [failed to call 'close']\n\t\t[-]\t/irods_source/plugins/resources/replication/src/librepl.cpp:763:irods::error repl_file_close(irods::plugin_context &) : status [S3_PUT_ERROR] errno [] -- message [Failed while calling child operation.]\n\t\t\t[-]\t/irods_plugin_source/s3_transport/include/irods/private/s3_transport/s3_transport.hpp:2330:error_codes irods::experimental::io::s3_transport::s3_transport<char>::s3_upload_file(bool) [CharT = char] : status [S3_PUT_ERROR] errno [] -- message [failed in S3_put_object]\n\n"
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:242 [store_and_log_status] [[12404964357216192316]] libs3_types::status: [XmlParseFailure] - 31"
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:245 [store_and_log_status] [[12404964357216192316]] S3Host: minio2.dh.local:9000"
"/irods_plugin_source/s3_transport/src/s3_transport.cpp:249 [store_and_log_status] [[12404964357216192316]] Function: s3_upload::callback_for_write_to_s3_base::on_response_completion"
"[-]\t/irods_source/server/api/src/rsFileChksum.cpp:365:auto file_checksum(RsComm *, const char *, const char *, const char *, const char *, rodsLong_t, char *)::(anonymous class)::operator()() const : status [S3_PUT_ERROR] errno [] -- message [operator() - fileClose error for [/dh-irods-bucket-dev/home/rods/0bytes.bin].]\n\t[-]\t/irods_source/server/drivers/src/fileDriver.cpp:167:irods::error fileClose(rsComm_t *, irods::first_class_object_ptr) : status [S3_PUT_ERROR] errno [] -- message [failed to call 'close']\n\t\t[-]\t/irods_source/plugins/resources/replication/src/librepl.cpp:763:irods::error repl_file_close(irods::plugin_context &) : status [S3_PUT_ERROR] errno [] -- message [Failed while calling child operation.]\n\t\t\t[-]\t/irods_plugin_source/s3_transport/include/irods/private/s3_transport/s3_transport.hpp:2330:error_codes irods::experimental::io::s3_transport::s3_transport<char>::s3_upload_file(bool) [CharT = char] : status [S3_PUT_ERROR] errno [] -- message [failed in S3_put_object]\n\n"
Bug Report
iRODS Version, OS and Version
iRODS 5.0.2, Ubuntu 24.04 (Docker)
Using MinIO as S3 storage backend. Have not been able to test in acceptance, where we use Ceph, yet.
What did you try to do?
Trying to put 0 byte files into S3 using irsync throws errors in the logs, but seems to function just fine. It only seems to happen on empty (0 byte) files.
Expected behavior
No errors in the logs
Observed Behavior (including steps to reproduce, if applicable)
no error exit code, all files in iRODS in a 'good' state and replicated properly
Resource configuration:
iRODS Server Logs (if applicable)