From: Samuel Just Date: Wed, 5 Jun 2013 21:28:02 +0000 (-0700) Subject: test_filestore_idempotent: use obj name from source coll add X-Git-Tag: v0.65~134 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0bc731ea93ae198afcdcba285751a6201c3de8de;p=ceph.git test_filestore_idempotent: use obj name from source coll add Fixes: #5240 Reviewed-by: David Zafman Signed-off-by: Samuel Just --- diff --git a/src/test/filestore/DeterministicOpSequence.cc b/src/test/filestore/DeterministicOpSequence.cc index c347df3b2a36..9e13cfac86c3 100644 --- a/src/test/filestore/DeterministicOpSequence.cc +++ b/src/test/filestore/DeterministicOpSequence.cc @@ -435,9 +435,10 @@ void DeterministicOpSequence::do_coll_add(rngen_t& gen) } 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) @@ -519,12 +520,15 @@ void DeterministicOpSequence::_do_coll_move(coll_t new_coll, 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); } diff --git a/src/test/filestore/DeterministicOpSequence.h b/src/test/filestore/DeterministicOpSequence.h index 44e632ab5c08..d1ab1d454bff 100644 --- a/src/test/filestore/DeterministicOpSequence.h +++ b/src/test/filestore/DeterministicOpSequence.h @@ -83,7 +83,9 @@ class DeterministicOpSequence : public TestFileStoreState { 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); diff --git a/src/test/filestore/TestFileStoreState.cc b/src/test/filestore/TestFileStoreState.cc index 9f0d6916c0ac..b23798f79c7c 100644 --- a/src/test/filestore/TestFileStoreState.cc +++ b/src/test/filestore/TestFileStoreState.cc @@ -157,6 +157,16 @@ TestFileStoreState::coll_entry_t::~coll_entry_t() } } +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::iterator it = m_objects.find(id); diff --git a/src/test/filestore/TestFileStoreState.h b/src/test/filestore/TestFileStoreState.h index b58d2db5e239..a47c15853cb0 100644 --- a/src/test/filestore/TestFileStoreState.h +++ b/src/test/filestore/TestFileStoreState.h @@ -41,6 +41,7 @@ public: ~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);