}
hobject_t *obj = entry->touch_obj(obj_id);
- dout(0) << "do_touch " << entry->m_coll.to_str() << "/" << obj->oid.name << dendl;
+ dout(0) << "do_touch " << entry->m_coll << "/" << obj << dendl;
_do_touch(entry->m_coll, *obj);
return true;
hobject_t *obj = entry->touch_obj(obj_id);
ceph_assert(obj);
- dout(0) << "do_remove " << entry->m_coll.to_str() << "/" << obj->oid.name << dendl;
+ dout(0) << "do_remove " << entry->m_coll << "/" << obj << dendl;
_do_remove(entry->m_coll, *obj);
hobject_t *rmobj = entry->remove_obj(obj_id);
bufferlist bl;
_gen_random(gen, size, bl);
- dout(0) << "do_write " << entry->m_coll.to_str() << "/" << obj->oid.name
+ dout(0) << "do_write " << entry->m_coll << "/" << obj
<< " 0~" << size << dendl;
_do_write(entry->m_coll, *obj, 0, bl.length(), bl);
return true;
}
-bool DeterministicOpSequence::_prepare_clone(rngen_t& gen,
- coll_t& coll_ret, hobject_t& orig_obj_ret, hobject_t& new_obj_ret)
+bool DeterministicOpSequence::_prepare_clone(
+ rngen_t& gen,
+ coll_entry_t **entry_ret,
+ int *orig_obj_id,
+ hobject_t *orig_obj_ret,
+ int *new_obj_id,
+ hobject_t *new_obj_ret)
{
int coll_id = _gen_coll_id(gen);
ceph_assert(entry != NULL);
if (entry->m_objects.size() < 2) {
- dout(0) << "_prepare_clone coll " << entry->m_coll.to_str()
+ dout(0) << "_prepare_clone coll " << entry->m_coll
<< " doesn't have 2 or more objects" << dendl;
return false;
}
- int orig_obj_id = entry->get_random_obj_id(gen);
- hobject_t *orig_obj = entry->touch_obj(orig_obj_id);
+ *orig_obj_id = entry->get_random_obj_id(gen);
+ hobject_t *orig_obj = entry->touch_obj(*orig_obj_id);
ceph_assert(orig_obj);
- int id;
do {
- id = entry->get_random_obj_id(gen);
- } while (id == orig_obj_id);
- hobject_t *new_obj = entry->touch_obj(id);
+ *new_obj_id = entry->get_random_obj_id(gen);
+ } while (*new_obj_id == *orig_obj_id);
+ hobject_t *new_obj = entry->touch_obj(*new_obj_id);
ceph_assert(new_obj);
- coll_ret = entry->m_coll;
- orig_obj_ret = *orig_obj;
- new_obj_ret = *new_obj;
-
+ *entry_ret = entry;
+ *orig_obj_ret = *orig_obj;
+ *new_obj_ret = *new_obj;
return true;
}
bool DeterministicOpSequence::do_clone(rngen_t& gen)
{
- coll_t coll;
+ coll_entry_t *entry;
+ int orig_id, new_id;
hobject_t orig_obj, new_obj;
- if (!_prepare_clone(gen, coll, orig_obj, new_obj)) {
+ if (!_prepare_clone(gen, &entry, &orig_id, &orig_obj, &new_id, &new_obj)) {
return false;
}
- dout(0) << "do_clone " << coll.to_str() << "/" << orig_obj.oid.name
- << " => " << coll.to_str() << "/" << new_obj.oid.name << dendl;
+ dout(0) << "do_clone " << entry->m_coll << "/" << orig_obj
+ << " => " << entry->m_coll << "/" << new_obj << dendl;
- _do_clone(coll, orig_obj, new_obj);
+ _do_clone(entry->m_coll, orig_obj, new_obj);
return true;
}
bool DeterministicOpSequence::do_clone_range(rngen_t& gen)
{
- coll_t coll;
+ coll_entry_t *entry;
+ int orig_id, new_id;
hobject_t orig_obj, new_obj;
- if (!_prepare_clone(gen, coll, orig_obj, new_obj)) {
+ if (!_prepare_clone(gen, &entry, &orig_id, &orig_obj, &new_id, &new_obj)) {
return false;
}
boost::uniform_int<> clone_len(1, bl.length());
size = (size_t) clone_len(gen);
- dout(0) << "do_clone_range " << coll.to_str() << "/" << orig_obj.oid.name
+ dout(0) << "do_clone_range " << entry->m_coll << "/" << orig_obj
<< " (0~" << size << ")"
- << " => " << coll.to_str() << "/" << new_obj.oid.name
+ << " => " << entry->m_coll << "/" << new_obj
<< " (0)" << dendl;
- _do_write_and_clone_range(coll, orig_obj, new_obj, 0, size, 0, bl);
+ _do_write_and_clone_range(entry->m_coll, orig_obj, new_obj, 0, size, 0, bl);
return true;
}
-bool DeterministicOpSequence::_prepare_colls(rngen_t& gen,
- coll_entry_t* &orig_coll, coll_entry_t* &new_coll)
-{
- ceph_assert(m_collections_ids.size() > 1);
- int orig_coll_id = _gen_coll_id(gen);
- int new_coll_id;
- do {
- new_coll_id = _gen_coll_id(gen);
- } while (new_coll_id == orig_coll_id);
-
- dout(0) << "_prepare_colls from coll id " << orig_coll_id
- << " to coll id " << new_coll_id << dendl;
-
- orig_coll = get_coll_at(orig_coll_id);
- ceph_assert(orig_coll != NULL);
- new_coll = get_coll_at(new_coll_id);
- ceph_assert(new_coll != NULL);
-
- if (!orig_coll->m_objects.size()) {
- dout(0) << "_prepare_colls coll " << orig_coll->m_coll.to_str()
- << " has no objects to use" << dendl;
- return false;
- }
-
- return true;
-}
-
-
bool DeterministicOpSequence::do_coll_move(rngen_t& gen)
{
- coll_entry_t *orig_coll = NULL, *new_coll = NULL;
- if (!_prepare_colls(gen, orig_coll, new_coll))
- return false;
-
- ceph_assert(orig_coll && new_coll);
-
- boost::uniform_int<> obj_rng(0, orig_coll->m_objects.size()-1);
- int obj_pos = obj_rng(gen);
- int obj_key = -1;
- hobject_t *obj = orig_coll->get_obj_at(obj_pos, &obj_key);
- if (!obj) {
- dout(0) << "do_coll_move coll " << orig_coll->m_coll.to_str()
- << " has no object as pos #" << obj_pos << " (key " << obj_key << ")"
- << dendl;
- return false;
- }
- if (new_coll->check_for_obj(obj_key)) {
- dout(0) << "do_coll_move coll " << orig_coll->m_coll.to_str()
- << " already has object as pos #" << obj_pos << " (key " << obj_key << ")"
- << dendl;
+ coll_entry_t *entry;
+ int orig_id, new_id;
+ hobject_t orig_obj, new_obj;
+ if (!_prepare_clone(gen, &entry, &orig_id, &orig_obj, &new_id, &new_obj)) {
return false;
}
- dout(0) << "do_coll_move " << orig_coll->m_coll.to_str() << "/" << obj->oid.name
- << " => " << new_coll->m_coll.to_str() << "/" << obj->oid.name << dendl;
- new_coll->touch_obj(obj_key);
- orig_coll->remove_obj(obj_key);
+ dout(0) << "do_coll_move " << entry->m_coll << "/" << orig_obj
+ << " => " << entry->m_coll << "/" << new_obj << dendl;
+ entry->remove_obj(orig_id);
- _do_coll_move(orig_coll->m_coll, new_coll->m_coll, *obj);
+ _do_coll_move(entry->m_coll, orig_obj, new_obj);
return true;
}
m_store->apply_transaction(&m_osr, std::move(t));
}
-void DeterministicOpSequence::_do_coll_move(coll_t orig_coll, coll_t new_coll,
- hobject_t& obj)
+void DeterministicOpSequence::_do_coll_move(coll_t coll,
+ hobject_t& orig_obj,
+ hobject_t& new_obj)
{
ObjectStore::Transaction t;
note_txn(&t);
- t.remove(new_coll, ghobject_t(obj));
- t.collection_move_rename(orig_coll, ghobject_t(obj), new_coll, ghobject_t(obj));
+ t.remove(coll, ghobject_t(new_obj));
+ t.collection_move_rename(coll, ghobject_t(orig_obj),
+ coll, ghobject_t(new_obj));
m_store->apply_transaction(&m_osr, std::move(t));
}