From: Orit Wasserman Date: Sun, 30 Apr 2017 07:16:18 +0000 (+0300) Subject: rgw: check for exisiting entries in cls_rgw_reshard_add X-Git-Tag: ses5-milestone6~8^2~7^2~70 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=be156d086dba47e72fca1165a6f2da1520e99485;p=ceph.git rgw: check for exisiting entries in cls_rgw_reshard_add Signed-off-by: Orit Wasserman --- diff --git a/src/cls/rgw/cls_rgw.cc b/src/cls/rgw/cls_rgw.cc index c6cfd42dfeda4..9335cdd4c694c 100644 --- a/src/cls/rgw/cls_rgw.cc +++ b/src/cls/rgw/cls_rgw.cc @@ -3502,12 +3502,21 @@ static int rgw_reshard_add(cls_method_context_t hctx, bufferlist *in, bufferlist return -EINVAL; } - bufferlist bl; - ::encode(op.entry, bl); string key; generate_reshard_key(op.entry, key); - int ret = cls_cxx_map_set_val(hctx, key, &bl); + bufferlist bl; + int ret = cls_cxx_map_get_val(hctx, key, &bl); + if (ret < 0 && ret != -ENOENT) { + CLS_ERR("error adding reshard job for bucket %s with key %s: %d",op.entry.bucket_name.c_str(), key.c_str() + , ret); + return ret; + } else if (ret != -ENOENT) { + return -EEXIST; + } + + ::encode(op.entry, bl); + ret = cls_cxx_map_set_val(hctx, key, &bl); if (ret < 0) { CLS_ERR("error adding reshard job for bucket %s with key %s",op.entry.bucket_name.c_str(), key.c_str()); return ret;