libradosstriper silently fails to delete empty objects in jewel
#1 Updated by Nathan Cutler 4 months ago
- Tracker changed from Bug to Backport
- Description updated (diff)
description¶libradosstriper fails to delete striped objects of zero length without returning any kind of error.
Steps to reproduce:
- Create an empty striper object:
~# echo 123 | rados --striper -p sata put test - ~# rados --striper -p sata truncate test 0 ~# rados --striper -p sata stat test sata/test mtime 2017-06-16 02:31:42.000000, size 0
Note: You cannot write empty object straight into libradosstriper, because it's causes an assertion failure. This issue is fixed in commit 7cce1e8c51640f466d8bb37a21c0d5f1b00db8ab which is not currently a part of jewel release.
- Try to remove striped object:
~# rados --striper -p sata rm test ~# echo $? 0
- Check that object is still present:
~# rados -p sata ls test.0000000000000000 ~# rados --striper -p sata ls test
Striped object is deleted
It seems that stripe math in "libradosstriper::RadosStriperImpl::remove()" is missing corner case of an empty object, so I'm attaching a simple patch to fix this.
Also this issue is probably fixed in commit 7a50ea479e7e5c2909d899d89d33d3fb082257f8, which is not part of the jewel release and pretty massive to backport.