// prevent other gateways from attempting to trim for the duration
set_status("acquiring trim lock");
yield call(new RGWSimpleRadosLockCR(store->get_async_rados(), store,
- store->get_zone_params().log_pool,
- lock_oid, "data_trim", lock_cookie,
+ rgw_raw_obj(store->get_zone_params().log_pool, lock_oid),
+ "data_trim", lock_cookie,
interval.sec()));
if (retcode < 0) {
// if the lock is already held, go back to sleep and try again later
for (iter = multi_delete->objects.begin();
iter != multi_delete->objects.end() && num_processed < max_to_delete;
++iter, num_processed++) {
- rgw_obj obj(bucket, iter->name);
- obj.set_instance(iter->instance);
+ rgw_obj obj(bucket, *iter);
obj_ctx->obj.set_atomic(obj);
std::map<string, bufferlist>& m)
{
rgw_rados_ref ref;
- rgw_bucket bucket;
- int r = get_obj_ref(obj, &ref, &bucket);
+ int r = get_raw_obj_ref(obj, &ref);
if (r < 0) {
return r;
}
}
static void gen_obj(test_rgw_env& env, uint64_t obj_size, uint64_t head_max_size, uint64_t stripe_size,
- RGWObjManifest *manifest, rgw_bucket *bucket, rgw_obj *head, RGWObjManifest::generator *gen,
+ RGWObjManifest *manifest, const string& placement_id, rgw_bucket *bucket, rgw_obj *head, RGWObjManifest::generator *gen,
list<rgw_obj> *test_objs)
{
manifest->set_trivial_rule(head_max_size, stripe_size);
test_rgw_init_bucket(bucket, "buck");
*head = rgw_obj(*bucket, "oid");
- gen->create_begin(g_ceph_context, manifest, *bucket, *head);
+ gen->create_begin(g_ceph_context, manifest, placement_id, *bucket, *head);
append_head(test_objs, *head);
cout << "test_objs.size()=" << test_objs->size() << std::endl;
while (ofs < obj_size) {
rgw_raw_obj obj = gen->get_cur_obj(env.zonegroup, env.zone_params);
-cout << "obj=" << obj << std::endl;
- rgw_raw_obj test_raw;
- rgw_obj_to_raw(env.zonegroup, env.zone_params, *iter, &test_raw);
+ cout << "obj=" << obj << std::endl;
+ rgw_raw_obj test_raw = rgw_obj_select(*iter).get_raw_obj(env.zonegroup, env.zone_params);
ASSERT_TRUE(obj == test_raw);
ofs = MIN(ofs + gen->cur_stripe_max_size(), obj_size);
if (manifest->has_tail()) {
rgw_raw_obj obj = gen->get_cur_obj(env.zonegroup, env.zone_params);
- rgw_raw_obj test_raw;
- rgw_obj_to_raw(env.zonegroup, env.zone_params, *iter, &test_raw);
+ rgw_raw_obj test_raw = rgw_obj_select(*iter).get_raw_obj(env.zonegroup, env.zone_params);
ASSERT_TRUE(obj == test_raw);
++iter;
}
list<rgw_obj> objs;
- gen_obj(env, obj_size, 512 * 1024, 4 * 1024 * 1024, &manifest, &bucket, &head, &gen, &objs);
+ gen_obj(env, obj_size, 512 * 1024, 4 * 1024 * 1024, &manifest, env.zonegroup.default_placement, &bucket, &head, &gen, &objs);
cout << " manifest.get_obj_size()=" << manifest.get_obj_size() << std::endl;
cout << " manifest.get_head_size()=" << manifest.get_head_size() << std::endl;
int stripe_size = 4 * 1024 * 1024;
int head_size = 512 * 1024;
- gen_obj(env, obj_size, head_size, stripe_size, &manifest, &bucket, &head, &gen, &objs);
+ gen_obj(env, obj_size, head_size, stripe_size, &manifest, env.zonegroup.default_placement, &bucket, &head, &gen, &objs);
list<rgw_obj>::iterator liter;
rgw_obj head;
for (ofs = 0; ofs < part_size; ofs += stripe_size) {
if (ofs == 0) {
- int r = gen.create_begin(g_ceph_context, &manifest, bucket, head);
+ int r = gen.create_begin(g_ceph_context, &manifest, env.zonegroup.default_placement, bucket, head);
ASSERT_EQ(r, 0);
continue;
}
argv_to_vec(argc, (const char **)argv, args);
env_to_vec(args);
- vector<const char*> def_args;
- global_init(&def_args, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+ auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
void check_parsed_correctly(rgw_obj& obj, const string& name, const string& ns, const string& instance)
{
/* parse_raw_oid() */
- string parsed_name, parsed_ns, parsed_instance;
- ASSERT_EQ(true, rgw_obj::parse_raw_oid(obj.get_object(), &parsed_name, &parsed_instance, &parsed_ns));
+ rgw_obj_key parsed_key;
+ ASSERT_EQ(true, rgw_obj_key::parse_raw_oid(obj.get_oid(), &parsed_key));
- cout << "parsed: " << parsed_name << " ns=" << parsed_ns << " i=" << parsed_instance << std::endl;
+ cout << "parsed: " << parsed_key << std::endl;
- ASSERT_EQ(name, parsed_name);
- ASSERT_EQ(ns, parsed_ns);
- ASSERT_EQ(instance, parsed_instance);
+ ASSERT_EQ(name, parsed_key.name);
+ ASSERT_EQ(ns, parsed_key.ns);
+ ASSERT_EQ(instance, parsed_key.instance);
/* translate_raw_obj_to_obj_in_ns() */
- string tname = obj.get_object();
+ rgw_obj_key tkey = parsed_key;
string tns = ns + "foo";
- string tinstance;
- ASSERT_EQ(0, rgw_obj::translate_raw_obj_to_obj_in_ns(tname, tinstance, tns));
- ASSERT_EQ(name, tname);
- ASSERT_EQ(instance, tinstance);
+ ASSERT_EQ(0, rgw_obj_key::oid_to_key_in_ns(obj.get_oid(), &tkey, tns));
- tname = obj.get_object();
+ tkey = rgw_obj_key();
tns = ns;
- ASSERT_EQ(true, rgw_obj::translate_raw_obj_to_obj_in_ns(tname, tinstance, tns));
+ ASSERT_EQ(true, rgw_obj_key::oid_to_key_in_ns(obj.get_oid(), &tkey, tns));
- cout << "parsed: " << parsed_name << " ns=" << parsed_ns << " i=" << parsed_instance << std::endl;
+ cout << "parsed: " << tkey << std::endl;
- ASSERT_EQ(name, tname);
- ASSERT_EQ(instance, tinstance);
+ ASSERT_EQ(obj.key, tkey);
/* strip_namespace_from_object() */
- string strip_name = obj.get_object();
+ string strip_name = obj.get_oid();
string strip_ns, strip_instance;
- ASSERT_EQ(true, rgw_obj::strip_namespace_from_object(strip_name, strip_ns, strip_instance));
+ ASSERT_EQ(true, rgw_obj_key::strip_namespace_from_name(strip_name, strip_ns, strip_instance));
cout << "stripped: " << strip_name << " ns=" << strip_ns << " i=" << strip_instance << std::endl;
rgw_obj obj1(o);
if (!instance.empty()) {
- obj1.set_instance(instance);
+ obj1.key.instance = instance;
}
if (!ns.empty()) {
- obj1.set_ns(ns);
+ obj1.key.ns = ns;
}
check_parsed_correctly(obj1, name, ns, instance);
encode_json("obj3", obj3, formatter);
if (!instance.empty()) {
- obj3.set_instance(instance);
+ obj3.key.instance = instance;
}
if (!ns.empty()) {
- obj3.set_ns(ns);
+ obj3.key.ns = ns;
}
check_parsed_correctly(obj3, name, ns, instance);
/* rgw_obj_key conversion */
- rgw_obj_key k;
- obj1.get_index_key(&k);
+ rgw_obj_index_key k;
+ obj1.key.get_index_key(&k);
rgw_obj new_obj(b, k);
{
JSONFormatter f(true);
dump(f, "bucket", b);
- rgw_obj obj = test_rgw_create_obj(b, name, instance, ns, placement_id);
+ rgw_obj obj = test_rgw_create_obj(b, name, instance, ns);
dump(f, "obj", obj);
- rgw_raw_obj raw_obj;
-
- rgw_obj_to_raw(env.zonegroup, env.zone_params, obj, &raw_obj);
+ rgw_obj_select s(obj);
+ rgw_raw_obj raw_obj = s.get_raw_obj(env.zonegroup, env.zone_params);
dump(f, "raw_obj", raw_obj);
if (!placement_id.empty()) {
bufferlist::iterator iter = bl.begin();
::decode(new_obj2, iter);
+ /*
+ can't decode raw obj here, because we didn't encode an old versioned
+ object
+ */
+
+ bl.clear();
+ ::encode(raw_obj, bl);
iter = bl.begin();
::decode(raw_obj2, iter);
} catch (buffer::error& err) {
ASSERT_TRUE(false);
}
+ dump(f, "raw_obj2", raw_obj2);
+ dump(f, "new_obj2", new_obj2);
+ cout << "raw2=" << raw_obj2 << std::endl;
+
ASSERT_EQ(new_obj, new_obj2);
ASSERT_EQ(raw_obj, raw_obj2);
}