Skip to content

Putting 0 byte files into a S3 resource throws an ignored error in the logs every time #2301

Description

@deanlinssen

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"

Metadata

Metadata

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions