}
dout(0) << "do_coll_add " << 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);
+ hobject_t *old = new_coll->add_obj(obj_key, obj);
- _do_coll_add(orig_coll->m_coll, new_coll->m_coll, *obj);
+ _do_coll_add(orig_coll->m_coll, new_coll->m_coll, old, *obj);
+ delete old;
}
void DeterministicOpSequence::_do_touch(coll_t coll, hobject_t& obj)
m_store->apply_transaction(t);
}
-void DeterministicOpSequence::_do_coll_add(coll_t orig_coll, coll_t new_coll,
- hobject_t& obj)
+void DeterministicOpSequence::_do_coll_add(
+ coll_t orig_coll, coll_t new_coll,
+ hobject_t *old,
+ hobject_t &obj)
{
ObjectStore::Transaction t;
note_txn(&t);
- t.remove(new_coll, obj);
+ if (old)
+ t.remove(new_coll, *old);
t.collection_add(new_coll, orig_coll, obj);
m_store->apply_transaction(t);
}
hobject_t& new_obj, uint64_t srcoff, uint64_t srclen,
uint64_t dstoff, bufferlist& bl);
virtual void _do_coll_move(coll_t new_coll, coll_t old_coll, hobject_t& obj);
- virtual void _do_coll_add(coll_t orig_coll, coll_t new_coll, hobject_t& obj);
+ virtual void _do_coll_add(
+ coll_t orig_coll, coll_t new_coll,
+ hobject_t *old, hobject_t& obj);
virtual void _do_coll_rename(coll_t orig_coll, coll_t new_coll);
int _gen_coll_id(rngen_t& gen);
}
}
+hobject_t *TestFileStoreState::coll_entry_t::add_obj(
+ int id, hobject_t *oid)
+{
+ hobject_t *ret = NULL;
+ if (m_objects.count(id))
+ ret = m_objects[id];
+ m_objects[id] = new hobject_t(*oid);
+ return ret;
+}
+
hobject_t *TestFileStoreState::coll_entry_t::touch_obj(int id)
{
map<int, hobject_t*>::iterator it = m_objects.find(id);
~coll_entry_t();
hobject_t *touch_obj(int id);
+ hobject_t *add_obj(int id, hobject_t *oid);
hobject_t *get_obj(int id);
hobject_t *remove_obj(int id);
hobject_t *get_obj_at(int pos, int *key = NULL);