rgw_bucket& bucket = bucket_info.bucket;
- ret = store->create_bucket(user_id, bucket, attrs);
+ ret = store->create_bucket(user_id, bucket, attrs, objv_tracker);
if (ret && ret != -EEXIST)
goto done;
read_version = write_version;
write_version = obj_version();
}
+
+ void generate_new_write_ver(CephContext *cct);
};
/** Store all the state necessary to complete and respond to an HTTP request*/
attrs[RGW_ATTR_ACL] = aclbl;
s->bucket.name = s->bucket_name_str;
- ret = store->create_bucket(s->user.user_id, s->bucket, attrs, true);
+ RGWObjVersionTracker objv_tracker;
+ ret = store->create_bucket(s->user.user_id, s->bucket, attrs, objv_tracker, true);
/* continue if EEXIST and create_bucket will fail below. this way we can recover
* from a partial create by retrying it. */
ldout(s->cct, 20) << "rgw_create_bucket returned ret=" << ret << " bucket=" << s->bucket << dendl;
obj_size += m.obj_size;
}
+void RGWObjVersionTracker::generate_new_write_ver(CephContext *cct)
+{
+ write_version.ver = 1;
+#define TAG_LEN 24
+
+ write_version.tag.clear();
+ append_rand_alpha(cct, write_version.tag, write_version.tag, TAG_LEN);
+}
+
class RGWWatcher : public librados::WatchCtx {
RGWRados *rados;
public:
*/
int RGWRados::create_bucket(string& owner, rgw_bucket& bucket,
map<std::string, bufferlist>& attrs,
+ RGWObjVersionTracker& objv_tracker,
bool exclusive)
{
int ret = 0;
if (r < 0 && r != -EEXIST)
return r;
- RGWObjVersionTracker objv_tracker;
+ objv_tracker.generate_new_write_ver(cct);
+
RGWBucketInfo info;
info.bucket = bucket;
info.owner = owner;
*/
virtual int create_bucket(string& owner, rgw_bucket& bucket,
map<std::string,bufferlist>& attrs,
+ RGWObjVersionTracker& objv_tracker,
bool exclusive = true);
virtual int add_bucket_placement(std::string& new_pool);
virtual int remove_bucket_placement(std::string& new_pool);