Backport #20325
Updated by Nathan Cutler almost 7 years ago
libradosstriper fails to delete striped objects of zero length without returning any kind of error.
Steps to reproduce:
# Create an empty striper object:
<pre>
~# 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
</pre>
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:
<pre>
~# rados --striper -p sata rm test
~# echo $?
0
</pre>
# Check that object is still present:
<pre>
~# rados -p sata ls
test.0000000000000000
~# rados --striper -p sata ls
test
</pre>
Expected result:
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.