mirror of
https://github.com/ceph/ceph
synced 2025-03-11 02:39:05 +00:00
tools: rados put /dev/null should write() and not create()
In the rados.cc special case to handle put an empty objects, use
write_full() instead of create().
A special case was introduced 6843a0b81f
to create() an object if the rados put file is empty. Prior to this fix
an attempt to rados put an empty file was a noop. The problem with this
fix is that it is not idempotent. rados put an empty file twice would
fail the second time and rados put a file with one byte would succeed as
expected.
Signed-off-by: Loic Dachary <loic-201408@dachary.org>
This commit is contained in:
parent
b038969b7c
commit
50e80407f3
@ -431,10 +431,9 @@ static int do_put(IoCtx& io_ctx, const char *objname, const char *infile, int op
|
||||
goto out;
|
||||
}
|
||||
if (count == 0) {
|
||||
if (!offset) {
|
||||
ret = io_ctx.create(oid, true);
|
||||
if (!offset) { // in case we have to create an empty object
|
||||
ret = io_ctx.write_full(oid, indata); // indata is empty
|
||||
if (ret < 0) {
|
||||
cerr << "WARNING: could not create object: " << oid << std::endl;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user