]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_filestore_idempotent_sequence: fix up clone, move ops; cleanup
authorSage Weil <sage@redhat.com>
Sun, 4 Feb 2018 16:34:25 +0000 (10:34 -0600)
committerSage Weil <sage@redhat.com>
Tue, 6 Feb 2018 00:08:28 +0000 (18:08 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/test/objectstore/DeterministicOpSequence.cc
src/test/objectstore/DeterministicOpSequence.h

index 93734c728941ce2cc88058cc2adc961f26efd422..5067168939c755cd1869b9b8617a62b66b46e100 100644 (file)
@@ -165,7 +165,7 @@ bool DeterministicOpSequence::do_touch(rngen_t& gen)
   }
   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;
@@ -186,7 +186,7 @@ bool DeterministicOpSequence::do_remove(rngen_t& gen)
   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);
@@ -270,15 +270,20 @@ bool DeterministicOpSequence::do_write(rngen_t& gen)
   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);
 
@@ -286,49 +291,49 @@ bool DeterministicOpSequence::_prepare_clone(rngen_t& 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;
   }
 
@@ -347,73 +352,28 @@ bool DeterministicOpSequence::do_clone_range(rngen_t& gen)
   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;
 }
@@ -516,13 +476,15 @@ void DeterministicOpSequence::_do_write_and_clone_range(coll_t coll,
   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));
 }
 
index 44ee46a71924860ca13bba2589a6ef94047004f0..8f8cc12d6a09147b590b73346cee53eb8db891df 100644 (file)
@@ -80,7 +80,7 @@ class DeterministicOpSequence : public TestObjectStoreState {
   virtual void _do_write_and_clone_range(coll_t coll, hobject_t& orig_obj,
       hobject_t& new_obj, uint64_t srcoff, uint64_t srclen,
       uint64_t dstoff, bufferlist& bl);
-  virtual void _do_coll_move(coll_t orig_coll, coll_t new_coll, hobject_t& obj);
+  virtual void _do_coll_move(coll_t cid, hobject_t& orig_obj, hobject_t& new_obj);
   virtual void _do_coll_create(coll_t cid, uint32_t pg_num, uint64_t num_objs);
 
   int _gen_coll_id(rngen_t& gen);
@@ -88,10 +88,13 @@ class DeterministicOpSequence : public TestObjectStoreState {
   void _print_status(int seq, int op);
 
  private:
-  bool _prepare_clone(rngen_t& gen, coll_t& coll_ret,
-      hobject_t& orig_obj_ret, hobject_t& new_obj_ret);
-  bool _prepare_colls(rngen_t& gen,
-      coll_entry_t* &orig_coll, coll_entry_t* &new_coll);
+  bool _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);
 };