RGWObjectCtx rctx(store);
rgw_obj obj(bucket_info.bucket, obj_iter->key);
RGWObjState *state;
- int ret = store->get_obj_state(&rctx, obj, &state, false);
+ int ret = store->get_obj_state(&rctx, bucket_info, obj, &state, false);
if (ret < 0) {
return ret;
}
if (op_ret < 0)
return;
- rgw_obj obj(s->bucket, s->object.name);
- obj.set_instance(s->object.instance);
+ rgw_obj obj(s->bucket, s->object);
store->set_atomic(s->obj_ctx, obj);
return 0;
}
+template<>
+void RGWObjectCtxImpl<rgw_obj, RGWObjState>::invalidate(rgw_obj& obj) {
+ RWLock::WLocker wl(lock);
+ auto iter = objs_state.find(obj);
+ if (iter == objs_state.end()) {
+ return;
+ }
+ bool is_atomic = iter->second.is_atomic;
+ bool prefetch_data = iter->second.prefetch_data;
+
+ objs_state.erase(iter);
+
+ if (is_atomic || prefetch_data) {
+ auto& s = objs_state[obj];
+ s.is_atomic = is_atomic;
+ s.prefetch_data = prefetch_data;
+ }
+}
+
+template<>
+void RGWObjectCtxImpl<rgw_raw_obj, RGWRawObjState>::invalidate(rgw_raw_obj& obj) {
+ RWLock::WLocker wl(lock);
+ auto iter = objs_state.find(obj);
+ if (iter == objs_state.end()) {
+ return;
+ }
+
+ objs_state.erase(iter);
+}
+
void RGWDefaultZoneGroupInfo::dump(Formatter *f) const {
encode_json("default_zonegroup", default_zonegroup, f);
}
rgw_obj_index_key cur_end_marker;
if (!params.ns.empty()) {
end_marker_obj = rgw_obj_key(params.end_marker.name, params.end_marker.instance, params.ns);
- end_marker_obj.set_ns(params.ns);
+ end_marker_obj.ns = params.ns;
end_marker_obj.get_index_key(&cur_end_marker);
}
rgw_obj_index_key cur_marker;
int RGWRados::delete_system_obj(rgw_raw_obj& obj, RGWObjVersionTracker *objv_tracker)
{
- if (obj.get_object().empty()) {
+ if (obj.empty()) {
ldout(cct, 1) << "delete_system_obj got empty object name "
<< obj << ", returning EINVAL" << dendl;
return -EINVAL;
}
};
+template<>
+void RGWObjectCtxImpl<rgw_obj, RGWObjState>::invalidate(rgw_obj& obj);
+
+template<>
+void RGWObjectCtxImpl<rgw_raw_obj, RGWRawObjState>::invalidate(rgw_raw_obj& obj);
+
struct RGWObjectCtx {
RGWRados *store;
void *user_ctx;
int get_system_obj_state(RGWObjectCtx *rctx, rgw_raw_obj& obj, RGWRawObjState **state, RGWObjVersionTracker *objv_tracker);
int get_obj_state(RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state,
- bool follow_olh, assume_noent = false);
+ bool follow_olh, bool assume_noent = false);
int get_obj_state(RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state) {
return get_obj_state(rctx, bucket_info, obj, state, true);
}
return 0;
}
-int rgw_delete_system_obj(RGWRados *rgwstore, rgw_bucket& bucket, const string& oid,
+int rgw_delete_system_obj(RGWRados *rgwstore, rgw_pool& pool, const string& oid,
RGWObjVersionTracker *objv_tracker)
{
- rgw_obj obj(bucket, oid);
+ rgw_raw_obj obj(pool, oid);
return rgwstore->delete_system_obj(obj, objv_tracker);
}
int rgw_get_system_obj(RGWRados *rgwstore, RGWObjectCtx& obj_ctx, rgw_pool& pool, const string& key, bufferlist& bl,
RGWObjVersionTracker *objv_tracker, real_time *pmtime, map<string, bufferlist> *pattrs = NULL,
rgw_cache_entry_info *cache_info = NULL);
-int rgw_delete_system_obj(RGWRados *rgwstore, rgw_bucket& bucket, const string& oid,
+int rgw_delete_system_obj(RGWRados *rgwstore, rgw_pool& pool, const string& oid,
RGWObjVersionTracker *objv_tracker);
int rgw_tools_init(CephContext *cct);