[GH-ISSUE #2583] dell ecs storage 409(ObjectUnderRetention) response issue #1241

Open
opened 2026-03-04 01:52:30 +03:00 by kerem · 1 comment
Owner

Originally created by @santea on GitHub (Oct 31, 2024).
Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/2583

Additional Information

Version of s3fs being used (s3fs --version)

V1.94

Version of fuse being used (pkg-config --modversion fuse, rpm -qi fuse or dpkg -s fuse)

2.9.7

Kernel information (uname -r)

4.18.0-372.9.1.el8.x86_64

GNU/Linux Distribution, if applicable (cat /etc/os-release)

NAME="Red Hat Enterprise Linux"
VERSION="8.6 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.6"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.6 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/8/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.6
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.6"

How to run s3fs, if applicable

[] command line s3fs {bucketname} /appdata/appuser/s3 -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -o use_path_request_style -o url=http://{dell ecs storage ip:port}/
[X] /etc/fstab

s3fs {bucketname} /appdata/appuser/s3 -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -o use_path_request_style -o url=http://{dell ecs storage ip:port}/ 

s3fs syslog messages (grep s3fs /var/log/syslog, journalctl | grep s3fs, or s3fs outputs)

Oct 31 19:40:10 {hostname} s3fs[16835]: init v1.94(commit:unknown) with OpenSSL, credential-library(built-in)
Oct 31 19:40:10 {hostname} s3fs[16835]: check services.
Oct 31 19:40:10 {hostname} s3fs[16835]:       check a bucket path(/).
Oct 31 19:40:10 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/
Oct 31 19:40:10 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/
Oct 31 19:40:10 {hostname} s3fs[16835]:       computing signature [GET] [/] [] []
Oct 31 19:40:10 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:10 {hostname} s3fs[16835]:       HTTP response code 200
Oct 31 19:40:10 {hostname} s3fs[16835]: Any threads are running now, then nothing to do.
Oct 31 19:40:10 {hostname} s3fs[16835]:       Start worker thread in ThreadPoolMan.
Oct 31 19:40:10 {hostname} s3fs[16835]:       Start worker thread in ThreadPoolMan.
Oct 31 19:40:10 {hostname} s3fs[16835]:       Start worker thread in ThreadPoolMan.
Oct 31 19:40:10 {hostname} s3fs[16835]:       Start worker thread in ThreadPoolMan.
Oct 31 19:40:10 {hostname} s3fs[16835]:       Start worker thread in ThreadPoolMan.
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pid=6778,uid=1000,gid=1000]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=//]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=//][bpath=][save=][sseckeypos=18446744073709551615]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}//
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}//
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [HEAD] [//] [] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 404 was returned, returning ENOENT
Oct 31 19:40:38 {hostname} s3fs[16835]:   [path=/]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}?delimiter=/&max-keys=2&prefix=
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/?delimiter=/&max-keys=2&prefix=
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [GET] [/] [delimiter=/&max-keys=2&prefix=] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 200
Oct 31 19:40:38 {hostname} s3fs[16835]: marker_xp->nodesetval is empty.
Oct 31 19:40:38 {hostname} s3fs[16835]:       add stat cache entry[path=/]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text][bpath=][save=][sseckeypos=18446744073709551615]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [HEAD] [/newfile.text] [] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 404 was returned, returning ENOENT
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text/]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text/][bpath=][save=][sseckeypos=18446744073709551615]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text/
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text/
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [HEAD] [/newfile.text/] [] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 404 was returned, returning ENOENT
Oct 31 19:40:38 {hostname} s3fs[16835]:   [path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}?delimiter=/&max-keys=2&prefix=newfile.text/
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/?delimiter=/&max-keys=2&prefix=newfile.text/
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [GET] [/] [delimiter=/&max-keys=2&prefix=newfile.text/] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 200
Oct 31 19:40:38 {hostname} s3fs[16835]:       add no object cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][mode=100644][flags=0x8241][pid=6778,uid=1000,gid=1000]
Oct 31 19:40:38 {hostname} s3fs[16835]:       add stat cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       delete stat cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pid=6778,uid=1000,gid=1000]
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=6778,uid=1000,gid=1000]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       uploading... [path=/newfile.text][fd=6][size=0]
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [PUT] [/newfile.text] [] [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 200
Oct 31 19:40:38 {hostname} s3fs[16835]:       delete stat cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=6778,uid=1000,gid=1000]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text][bpath=][save=][sseckeypos=18446744073709551615]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [HEAD] [/newfile.text] [] []
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]:       HTTP response code 200
Oct 31 19:40:38 {hostname} s3fs[16835]:       add stat cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       uploading... [path=/newfile.text][fd=6][size=4]
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [PUT] [/newfile.text] [] [17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76]
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]: curl.cpp:RequestPerform(2573): HTTP response code 409, returning EIO. Body Text: <Error><Code>ObjectUnderRetention</Code><Message>The object is under retention and can't be deleted or modified.</Message><Resource>{bucketname}/newfile.text</Resource><RequestId>0c3ab04a:188e0ac5582:787b99:da26</RequestId></Error>
Oct 31 19:40:38 {hostname} s3fs[16835]:       delete stat cache entry[path=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=0,uid=0,gid=0]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [path=/newfile.text][pseudo_fd=2]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6]
Oct 31 19:40:38 {hostname} s3fs[16835]:       [tpath=/newfile.text]
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text
Oct 31 19:40:38 {hostname} s3fs[16835]:       uploading... [path=/newfile.text][fd=6][size=4]
Oct 31 19:40:38 {hostname} s3fs[16835]:       computing signature [PUT] [/newfile.text] [] [17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76]
Oct 31 19:40:38 {hostname} s3fs[16835]:       url is http://{dell ecs storage ip:port}
Oct 31 19:40:38 {hostname} s3fs[16835]: curl.cpp:RequestPerform(2573): HTTP response code 409, returning EIO. Body Text: <Error><Code>ObjectUnderRetention</Code><Message>The object is under retention and can't be deleted or modified.</Message><Resource>{bucketname}/newfile.text</Resource><RequestId>0c3ab04a:188e0ac5582:787394:262b8</RequestId></Error>
Oct 31 19:40:38 {hostname} s3fs[16835]: s3fs.cpp:s3fs_release(3116): failed to upload file contentsfor pseudo_fd(2) / path(/newfile.text) by result(-5)

Details about issue

after mount

echo "test" > newfile.txt
cat newfile.txt
# empty print

It seems that the error occurs because the file with size 0 is uploaded first and then uploaded when uploading to s3.
Because of the retention of ecs (maybe....), the actual file is not uploaded and a 409 response is returned.

And if you write the file again, it will be uploaded normally.

echo "test" > newfile.txt
cat newfile.txt
# empty print
echo "test" > newfile.txt
cat newfile.txt
test

It seems like the files are uploaded consecutively and are being uploaded a second time during 'retention'.
Can't I upload them all at once?

Originally created by @santea on GitHub (Oct 31, 2024). Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/2583 <!-- -------------------------------------------------------------------------- The following information is very important in order to help us to help you. Omission of the following details may delay your support request or receive no attention at all. Keep in mind that the commands we provide to retrieve information are oriented to GNU/Linux Distributions, so you could need to use others if you use s3fs on macOS or BSD. --------------------------------------------------------------------------- --> ### Additional Information #### Version of s3fs being used (`s3fs --version`) V1.94 #### Version of fuse being used (`pkg-config --modversion fuse`, `rpm -qi fuse` or `dpkg -s fuse`) 2.9.7 #### Kernel information (`uname -r`) 4.18.0-372.9.1.el8.x86_64 #### GNU/Linux Distribution, if applicable (`cat /etc/os-release`) NAME="Red Hat Enterprise Linux" VERSION="8.6 (Ootpa)" ID="rhel" ID_LIKE="fedora" VERSION_ID="8.6" PLATFORM_ID="platform:el8" PRETTY_NAME="Red Hat Enterprise Linux 8.6 (Ootpa)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos" HOME_URL="https://www.redhat.com/" DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/8/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" REDHAT_BUGZILLA_PRODUCT_VERSION=8.6 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="8.6" #### How to run s3fs, if applicable <!-- Describe the s3fs "command line" or "/etc/fstab" entry used. --> [] command line s3fs {bucketname} /appdata/appuser/s3 -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -o use_path_request_style -o url=http://{dell ecs storage ip:port}/ [X] /etc/fstab <!-- Executed command line or /etc/fastab entry --> ``` s3fs {bucketname} /appdata/appuser/s3 -o passwd_file=${HOME}/.passwd-s3fs -o dbglevel=info -o use_path_request_style -o url=http://{dell ecs storage ip:port}/ ``` #### s3fs syslog messages (`grep s3fs /var/log/syslog`, `journalctl | grep s3fs`, or `s3fs outputs`) ``` Oct 31 19:40:10 {hostname} s3fs[16835]: init v1.94(commit:unknown) with OpenSSL, credential-library(built-in) Oct 31 19:40:10 {hostname} s3fs[16835]: check services. Oct 31 19:40:10 {hostname} s3fs[16835]: check a bucket path(/). Oct 31 19:40:10 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/ Oct 31 19:40:10 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/ Oct 31 19:40:10 {hostname} s3fs[16835]: computing signature [GET] [/] [] [] Oct 31 19:40:10 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:10 {hostname} s3fs[16835]: HTTP response code 200 Oct 31 19:40:10 {hostname} s3fs[16835]: Any threads are running now, then nothing to do. Oct 31 19:40:10 {hostname} s3fs[16835]: Start worker thread in ThreadPoolMan. Oct 31 19:40:10 {hostname} s3fs[16835]: Start worker thread in ThreadPoolMan. Oct 31 19:40:10 {hostname} s3fs[16835]: Start worker thread in ThreadPoolMan. Oct 31 19:40:10 {hostname} s3fs[16835]: Start worker thread in ThreadPoolMan. Oct 31 19:40:10 {hostname} s3fs[16835]: Start worker thread in ThreadPoolMan. Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pid=6778,uid=1000,gid=1000] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=//] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=//][bpath=][save=][sseckeypos=18446744073709551615] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}// Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}// Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [HEAD] [//] [] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 404 was returned, returning ENOENT Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}?delimiter=/&max-keys=2&prefix= Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/?delimiter=/&max-keys=2&prefix= Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [GET] [/] [delimiter=/&max-keys=2&prefix=] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 200 Oct 31 19:40:38 {hostname} s3fs[16835]: marker_xp->nodesetval is empty. Oct 31 19:40:38 {hostname} s3fs[16835]: add stat cache entry[path=/] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text][bpath=][save=][sseckeypos=18446744073709551615] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [HEAD] [/newfile.text] [] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 404 was returned, returning ENOENT Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text/] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text/][bpath=][save=][sseckeypos=18446744073709551615] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text/ Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text/ Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [HEAD] [/newfile.text/] [] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 404 was returned, returning ENOENT Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}?delimiter=/&max-keys=2&prefix=newfile.text/ Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/?delimiter=/&max-keys=2&prefix=newfile.text/ Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [GET] [/] [delimiter=/&max-keys=2&prefix=newfile.text/] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 200 Oct 31 19:40:38 {hostname} s3fs[16835]: add no object cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][mode=100644][flags=0x8241][pid=6778,uid=1000,gid=1000] Oct 31 19:40:38 {hostname} s3fs[16835]: add stat cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: delete stat cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pid=6778,uid=1000,gid=1000] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=6778,uid=1000,gid=1000] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: uploading... [path=/newfile.text][fd=6][size=0] Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [PUT] [/newfile.text] [] [e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 200 Oct 31 19:40:38 {hostname} s3fs[16835]: delete stat cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=6778,uid=1000,gid=1000] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text][bpath=][save=][sseckeypos=18446744073709551615] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [HEAD] [/newfile.text] [] [] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: HTTP response code 200 Oct 31 19:40:38 {hostname} s3fs[16835]: add stat cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: uploading... [path=/newfile.text][fd=6][size=4] Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [PUT] [/newfile.text] [] [17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: curl.cpp:RequestPerform(2573): HTTP response code 409, returning EIO. Body Text: <Error><Code>ObjectUnderRetention</Code><Message>The object is under retention and can't be deleted or modified.</Message><Resource>{bucketname}/newfile.text</Resource><RequestId>0c3ab04a:188e0ac5582:787b99:da26</RequestId></Error> Oct 31 19:40:38 {hostname} s3fs[16835]: delete stat cache entry[path=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2][pid=0,uid=0,gid=0] Oct 31 19:40:38 {hostname} s3fs[16835]: [path=/newfile.text][pseudo_fd=2] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=][path=/newfile.text][pseudo_fd=2][physical_fd=6] Oct 31 19:40:38 {hostname} s3fs[16835]: [tpath=/newfile.text] Oct 31 19:40:38 {hostname} s3fs[16835]: URL is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: URL changed is http://{dell ecs storage ip:port}/{bucketname}/newfile.text Oct 31 19:40:38 {hostname} s3fs[16835]: uploading... [path=/newfile.text][fd=6][size=4] Oct 31 19:40:38 {hostname} s3fs[16835]: computing signature [PUT] [/newfile.text] [] [17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76] Oct 31 19:40:38 {hostname} s3fs[16835]: url is http://{dell ecs storage ip:port} Oct 31 19:40:38 {hostname} s3fs[16835]: curl.cpp:RequestPerform(2573): HTTP response code 409, returning EIO. Body Text: <Error><Code>ObjectUnderRetention</Code><Message>The object is under retention and can't be deleted or modified.</Message><Resource>{bucketname}/newfile.text</Resource><RequestId>0c3ab04a:188e0ac5582:787394:262b8</RequestId></Error> Oct 31 19:40:38 {hostname} s3fs[16835]: s3fs.cpp:s3fs_release(3116): failed to upload file contentsfor pseudo_fd(2) / path(/newfile.text) by result(-5) ``` ### Details about issue after mount ``` echo "test" > newfile.txt cat newfile.txt # empty print ``` It seems that the error occurs because the file with size 0 is uploaded first and then uploaded when uploading to s3. Because of the retention of ecs (maybe....), the actual file is not uploaded and a 409 response is returned. And if you write the file again, it will be uploaded normally. ``` echo "test" > newfile.txt cat newfile.txt # empty print echo "test" > newfile.txt cat newfile.txt test ``` It seems like the files are uploaded consecutively and are being uploaded a second time during 'retention'. Can't I upload them all at once?
Author
Owner

@gaul commented on GitHub (Nov 3, 2024):

I don't think we have ever tested object locking before but I don't understand this series of operations. The documentation says:

Placing a retention period or a legal hold on an object protects only the version that's specified in the request. Retention periods and legal holds don't prevent new versions of the object from being created, or delete markers to be added on top of the object.

So I would expect s3fs to allow updating an object version by creating a new version (not tested, speculation). Does the ECS behavior differ?

But s3fs should not create two objects in your example. We removed the zero byte temporary object in #1013 so I suspect something else is going on. Can you run this again with -o curldbg to see the series of requests sent to the server?

Lastly I don't think 409 ObjectUnderRetention should translate to EIO. Perhaps EACCES or EPERM would be more appropriate?

<!-- gh-comment-id:2453235901 --> @gaul commented on GitHub (Nov 3, 2024): I don't think we have ever tested [object locking](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html) before but I don't understand this series of operations. The documentation says: > Placing a retention period or a legal hold on an object protects only the version that's specified in the request. Retention periods and legal holds don't prevent new versions of the object from being created, or delete markers to be added on top of the object. So I would expect s3fs to allow updating an object version by creating a new version (not tested, speculation). Does the ECS behavior differ? But s3fs should not create two objects in your example. We removed the zero byte temporary object in #1013 so I suspect something else is going on. Can you run this again with `-o curldbg` to see the series of requests sent to the server? Lastly I don't think 409 ObjectUnderRetention should translate to `EIO`. Perhaps `EACCES` or `EPERM` would be more appropriate?
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/s3fs-fuse#1241
No description provided.