]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
deterministicopseq: add collection_rename() support
authorJoao Eduardo Luis <jecluis@gmail.com>
Thu, 12 Apr 2012 13:53:50 +0000 (14:53 +0100)
committerSage Weil <sage.weil@dreamhost.com>
Sat, 14 Apr 2012 03:38:19 +0000 (20:38 -0700)
src/test/filestore_test/DeterministicOpSequence.cc
src/test/filestore_test/DeterministicOpSequence.h

index 9b5619b0b8122099dd07a241ea05fa2da8576616..e3f0811b91bdbfc1ec66d60f5ad90068f27ff70d 100644 (file)
@@ -58,6 +58,9 @@ void DeterministicOpSequence::run_one_op(int op, rngen_t& gen) {
   case DSOP_COLL_ADD:
     do_coll_add(gen);
     break;
+  case DSOP_COLL_RENAME:
+    do_coll_rename(gen);
+    break;
   case DSOP_CLONE:
     do_clone(gen);
     break;
@@ -331,8 +334,27 @@ void DeterministicOpSequence::do_coll_move(rngen_t& gen)
   _do_coll_move(new_coll->m_coll, orig_coll->m_coll, *obj);
 }
 
-void DeterministicOpSequence::do_coll_rename(rngen_t& gen) {
+void DeterministicOpSequence::do_coll_rename(rngen_t& gen)
+{
+  int coll_pos = _gen_coll_id(gen);
+  dout(0) << "do_coll_rename coll pos #" << coll_pos << dendl;
+
+  coll_entry_t *coll_entry = get_coll_at(coll_pos);
+  if (!coll_entry) {
+    dout(0) << "do_coll_rename no collection at pos #" << coll_pos << dendl;
+    return;
+  }
+
+  coll_t orig_coll = coll_entry->m_coll;
+  char buf[100];
+  memset(buf, 0, 100);
+  snprintf(buf, 100, "0.%d_head", m_next_coll_nr++);
+  coll_t new_coll(buf);
+  coll_entry->m_coll = new_coll;
 
+  dout(0) << "do_coll_rename " << orig_coll.to_str()
+      << " => " << new_coll.to_str() << dendl;
+  _do_coll_rename(orig_coll, new_coll);
 }
 
 void DeterministicOpSequence::do_coll_add(rngen_t& gen)
@@ -406,3 +428,10 @@ void DeterministicOpSequence::_do_coll_add(coll_t orig_coll, coll_t new_coll,
   t.collection_add(orig_coll, new_coll, obj);
   m_store->apply_transaction(t);
 }
+
+void DeterministicOpSequence::_do_coll_rename(coll_t orig_coll, coll_t new_coll)
+{
+  ObjectStore::Transaction t;
+  t.collection_rename(orig_coll, new_coll);
+  m_store->apply_transaction(t);
+}
index b0e930b3368619ba0698f341afae21e34407c248..9c00983cb7897f58fb3460c80202a0c1f1f9c60b 100644 (file)
@@ -68,6 +68,7 @@ class DeterministicOpSequence : public TestFileStoreState {
       hobject_t& new_obj, uint64_t srcoff, uint64_t srclen, uint64_t dstoff);
   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_rename(coll_t orig_coll, coll_t new_coll);
 
   int _gen_coll_id(rngen_t& gen);
   int _gen_obj_id(rngen_t& gen);