]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test_filestore_idempotent: use obj name from source coll add
authorSamuel Just <sam.just@inktank.com>
Wed, 5 Jun 2013 21:28:02 +0000 (14:28 -0700)
committerSamuel Just <sam.just@inktank.com>
Fri, 7 Jun 2013 22:59:40 +0000 (15:59 -0700)
Fixes: #5240
Reviewed-by: David Zafman <david.zafman@inktank.com>
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/test/filestore/DeterministicOpSequence.cc
src/test/filestore/DeterministicOpSequence.h
src/test/filestore/TestFileStoreState.cc
src/test/filestore/TestFileStoreState.h

index c347df3b2a367f073dbfd8453b85544594e42a6c..9e13cfac86c32f3d22a4257595e1c48e7a94b4b1 100644 (file)
@@ -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);
 }
index 44e632ab5c081fbda3f4aad09493a7181ce3465a..d1ab1d454bff157631bd9ec89b06e2bb0bade8cb 100644 (file)
@@ -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);
index 9f0d6916c0acd4f8a01adc40645adacd27864aa7..b23798f79c7cb390313035269b6e29a9dd5e396f 100644 (file)
@@ -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<int, hobject_t*>::iterator it = m_objects.find(id);
index b58d2db5e23928c1e68f892939981e7e9c27d743..a47c15853cb0013c297bb5849c0addf009cdedeb 100644 (file)
@@ -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);