]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
src/*: make Context::finish private and switch all users to use complete
authorSamuel Just <sam.just@inktank.com>
Sat, 20 Jul 2013 00:35:43 +0000 (17:35 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 22 Jul 2013 17:33:40 +0000 (10:33 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
Fixes: Sage Weil <sage@inktank.com>
18 files changed:
src/client/SyntheticClient.cc
src/include/Context.h
src/librbd/LibrbdWriteback.cc
src/mds/AnchorClient.cc
src/mds/CInode.cc
src/mds/MDCache.cc
src/mds/MDLog.cc
src/mds/MDS.cc
src/mds/MDSTable.cc
src/mds/MDSTableClient.cc
src/mds/Mutation.h
src/osdc/Filer.cc
src/osdc/Journaler.cc
src/osdc/Objecter.cc
src/osdc/Objecter.h
src/test/ObjectMap/KeyValueDBMemory.h
src/test/filestore/workload_generator.h
src/test/gather.cc

index 79171da46f1d2fee4dc36049f3ac8b8cc5e9dd2e..cb211f5461bf9ecad07e5773695790d34818dfc5 100644 (file)
@@ -1470,8 +1470,7 @@ int SyntheticClient::play_trace(Trace& t, string& prefix, bool metadata_only)
   dout(10) << "trace finished on line " << t.get_line() << dendl;
 
   // wait for safe after an object trace
-  safegref->finish(0);
-  delete safegref;
+  safegref->complete(0);
   lock.Lock();
   while (!safe) {
     dout(10) << "waiting for safe" << dendl;
index e31fca6a4262766090848d14531999cae90c217f..9ec4414a047c0b4aa8bac7f2b15b74062aa1607e 100644 (file)
@@ -34,10 +34,12 @@ class Context {
   Context(const Context& other);
   const Context& operator=(const Context& other);
 
+ protected:
+  virtual void finish(int r) = 0;
+
  public:
   Context() {}
   virtual ~Context() {}       // we want a virtual destructor!!!
-  virtual void finish(int r) = 0;
   virtual void complete(int r) {
     finish(r);
     delete this;
index a7ab0488dc6e1e983633b17d72eaa05c52a9d6a1..da02a34ed329b68d7e66560636998aafb81a187d 100644 (file)
@@ -32,8 +32,7 @@ namespace librbd {
   void context_cb(rados_completion_t c, void *arg)
   {
     Context *con = reinterpret_cast<Context *>(arg);
-    con->finish(rados_aio_get_return_value(c));
-    delete con;
+    con->complete(rados_aio_get_return_value(c));
   }
 
   /**
index bcc8710e43f090ddf4c0c5ea929bf7d4ac4b9b9e..30cbfd34f748f24f42b17601cfc7c9568734d520 100644 (file)
@@ -51,8 +51,7 @@ void AnchorClient::handle_query_result(class MMDSTableRequest *m)
   for (list<_pending_lookup>::iterator q = ls.begin(); q != ls.end(); ++q) {
     *q->trace = trace;
     if (q->onfinish) {
-      q->onfinish->finish(0);
-      delete q->onfinish;
+      q->onfinish->complete(0);
     }
   }
 }
index 48529948955b5d50ea028f8aed6eaf01218a77bd..d215d18690f67dc2c9da0d1c973a287163ae39fe 100644 (file)
@@ -914,8 +914,7 @@ void CInode::_stored(version_t v, Context *fin)
   if (v == get_projected_version())
     mark_clean();
 
-  fin->finish(0);
-  delete fin;
+  fin->complete(0);
 }
 
 struct C_Inode_Fetched : public Context {
@@ -964,13 +963,12 @@ void CInode::_fetched(bufferlist& bl, bufferlist& bl2, Context *fin)
   if (magic != CEPH_FS_ONDISK_MAGIC) {
     dout(0) << "on disk magic '" << magic << "' != my magic '" << CEPH_FS_ONDISK_MAGIC
            << "'" << dendl;
-    fin->finish(-EINVAL);
+    fin->complete(-EINVAL);
   } else {
     decode_store(p);
     dout(10) << "_fetched " << *this << dendl;
-    fin->finish(0);
+    fin->complete(0);
   }
-  delete fin;
 }
 
 void CInode::build_backtrace(int64_t pool, inode_backtrace_t& bt)
index e592dde96ca1e7001d9c958dbd6e304b616306fd..77d3d8b97b87239f876d9cc2f2f542f6a1707d82 100644 (file)
@@ -510,8 +510,7 @@ void MDCache::_create_system_file_finish(Mutation *mut, CDentry *dn, version_t d
   mut->cleanup();
   delete mut;
 
-  fin->finish(0);
-  delete fin;
+  fin->complete(0);
 
   //if (dir && MDS_INO_IS_MDSDIR(in->ino()))
   //migrator->export_dir(dir, (int)in->ino() - MDS_INO_MDSDIR_OFFSET);
@@ -3093,8 +3092,7 @@ void MDCache::handle_resolve_ack(MMDSResolveAck *ack)
       if (mdr->more()->slave_commit) {
        Context *fin = mdr->more()->slave_commit;
        mdr->more()->slave_commit = 0;
-       fin->finish(-1);
-       delete fin;
+       fin->complete(-1);
       } else {
        if (mdr->slave_request) 
          mdr->aborted = true;
@@ -7675,8 +7673,7 @@ public:
     mdcache(mdc), ino(i), want_xlocked(wx), onfinish(c) {}
   void finish(int r) {
     if (mdcache->get_inode(ino)) {
-      onfinish->finish(0);
-      delete onfinish;
+      onfinish->complete(0);
     } else
       mdcache->open_remote_ino(ino, onfinish, want_xlocked);
   }
@@ -7703,8 +7700,7 @@ public:
     if (r == 0)
       mdcache->open_remote_ino_2(ino, anchortrace, want_xlocked, hadino, hadv, onfinish);
     else {
-      onfinish->finish(r);
-      delete onfinish;
+      onfinish->complete(r);
     }
   }
 };
@@ -7753,8 +7749,7 @@ void MDCache::open_remote_ino_2(inodeno_t ino, vector<Anchor>& anchortrace, bool
   if (in->ino() == ino) {
     // success
     dout(10) << "open_remote_ino_2 have " << *in << dendl;
-    onfinish->finish(0);
-    delete onfinish;
+    onfinish->complete(0);
     return;
   } 
 
@@ -7795,8 +7790,7 @@ void MDCache::open_remote_ino_2(inodeno_t ino, vector<Anchor>& anchortrace, bool
        dout(10) << "expected ino " << anchortrace[i].ino
                 << " in complete dir " << *dir
                 << ", got same anchor " << anchortrace[i] << " 2x in a row" << dendl;
-       onfinish->finish(-ENOENT);
-       delete onfinish;
+       onfinish->complete(-ENOENT);
       } else {
        // hrm.  requery anchor table.
        dout(10) << "expected ino " << anchortrace[i].ino
@@ -8408,8 +8402,7 @@ void MDCache::_do_find_ino_peer(find_ino_peer_info_t& fip)
       dout(10) << "_do_find_ino_peer waiting for more peers to be active" << dendl;
     } else {
       dout(10) << "_do_find_ino_peer failed on " << fip.ino << dendl;
-      fip.fin->finish(-ESTALE);
-      delete fip.fin;
+      fip.fin->complete(-ESTALE);
       find_ino_peer.erase(fip.tid);
     }
   } else {
@@ -8521,8 +8514,7 @@ void MDCache::_find_ino_dir(inodeno_t ino, Context *fin, bufferlist& bl, int r)
 {
   dout(10) << "_find_ino_dir " << ino << " got " << r << " " << bl.length() << " bytes" << dendl;
   if (r < 0) {
-    fin->finish(r);
-    delete fin;
+    fin->complete(r);
     return;
   }
 
@@ -8539,8 +8531,7 @@ void MDCache::_find_ino_dir(inodeno_t ino, Context *fin, bufferlist& bl, int r)
     return;
   delete c;  // path_traverse doesn't clean it up for us for r <= 0
   
-  fin->finish(r);
-  delete fin;
+  fin->complete(r);
 }
 
 
@@ -8619,8 +8610,7 @@ void MDCache::request_finish(MDRequest *mdr)
   if (mdr->more()->slave_commit) {
     Context *fin = mdr->more()->slave_commit;
     mdr->more()->slave_commit = 0;
-    fin->finish(0);   // this must re-call request_finish.
-    delete fin;
+    fin->complete(0);   // this must re-call request_finish.
     return; 
   }
 
index b293c4cc10a6fad91ede3252d2c9fd90b4a41cd6..3dfc00fc221ec470567a4ab6ae0fddca292a38e2 100644 (file)
@@ -173,8 +173,7 @@ void MDLog::submit_entry(LogEvent *le, Context *c)
   if (!g_conf->mds_log) {
     // hack: log is disabled.
     if (c) {
-      c->finish(0);
-      delete c;
+      c->complete(0);
     }
     return;
   }
@@ -245,8 +244,7 @@ void MDLog::wait_for_safe(Context *c)
     journaler->wait_for_flush(c);
   } else {
     // hack: bypass.
-    c->finish(0);
-    delete c;
+    c->complete(0);
   }
 }
 
@@ -442,8 +440,7 @@ void MDLog::replay(Context *c)
   if (journaler->get_read_pos() == journaler->get_write_pos()) {
     dout(10) << "replay - journal empty, done." << dendl;
     if (c) {
-      c->finish(0);
-      delete c;
+      c->complete(0);
     }
     return;
   }
index a867961ccf3aa644700ec2443ff280882a267248..439f33cfc8c192ff6a22423eb5d24278e421cd2f 100644 (file)
@@ -1890,8 +1890,7 @@ bool MDS::_dispatch(Message *m)
     ls.swap(finished_queue);
     while (!ls.empty()) {
       dout(10) << " finish " << ls.front() << dendl;
-      ls.front()->finish(0);
-      delete ls.front();
+      ls.front()->complete(0);
       ls.pop_front();
       
       // give other threads (beacon!) a chance
index 4b21f4feaa5c9ba8389782f9a39c60acbe590b98..ef0326dfbd379c944313bcf134b88244efe3efe0 100644 (file)
@@ -160,7 +160,6 @@ void MDSTable::load_2(int r, bufferlist& bl, Context *onfinish)
   decode_state(p);
 
   if (onfinish) {
-    onfinish->finish(0);
-    delete onfinish;
+    onfinish->complete(0);
   }
 }
index b47814970681b887ed365177d9cbd554fd57cae5..cc3152f1d67bba930a7b66237c3e9989d424cfff 100644 (file)
@@ -61,8 +61,7 @@ void MDSTableClient::handle_request(class MMDSTableRequest *m)
       pending_prepare.erase(reqid);
       prepared_update[tid] = reqid;
       if (onfinish) {
-        onfinish->finish(0);
-        delete onfinish;
+        onfinish->complete(0);
       }
     }
     else if (prepared_update.count(tid)) {
index c0bea19d16e3ad07d3cbac5717bddff6126bb8db..b50a03cefa424a1b25bef8b769f8a62033a78fa8 100644 (file)
@@ -330,8 +330,7 @@ struct MDSlaveUpdate {
   ~MDSlaveUpdate() {
     item.remove_myself();
     if (waiter)
-      waiter->finish(0);
-    delete waiter;
+      waiter->complete(0);
   }
 };
 
index 7eb4ad616db49baa73cbead4756457752f0be6a1..8f94a97d2922ff1d504a3f7d6d725100d48a4106 100644 (file)
@@ -131,8 +131,7 @@ void Filer::_probed(Probe *probe, const object_t& oid, uint64_t size, utime_t mt
     return;  // waiting for more!
 
   if (probe->err) { // we hit an error, propagate back up
-    probe->onfinish->finish(probe->err);
-    delete probe->onfinish;
+    probe->onfinish->complete(probe->err);
     delete probe;
     return;
   }
@@ -216,8 +215,7 @@ void Filer::_probed(Probe *probe, const object_t& oid, uint64_t size, utime_t mt
   }
 
   // done!  finish and clean up.
-  probe->onfinish->finish(probe->err);
-  delete probe->onfinish;
+  probe->onfinish->complete(probe->err);
   delete probe;
 }
 
@@ -285,8 +283,7 @@ void Filer::_do_purge_range(PurgeRange *pr, int fin)
           << " uncommitted " << pr->uncommitted << dendl;
 
   if (pr->num == 0 && pr->uncommitted == 0) {
-    pr->oncommit->finish(0);
-    delete pr->oncommit;
+    pr->oncommit->complete(0);
     delete pr;
     return;
   }
index cd9b9edc4c7b46d85591c48ae8b48b251e318e4b..ba4ca8dc4b92738181922258882799031d7cc651 100644 (file)
@@ -181,8 +181,7 @@ void Journaler::_finish_reread_head(int r, bufferlist& bl, Context *finish)
   trimmed_pos = trimming_pos = h.trimmed_pos;
   init_headers(h);
   state = STATE_ACTIVE;
-  finish->finish(r);
-  delete finish;
+  finish->complete(r);
 }
 
 void Journaler::_finish_read_head(int r, bufferlist& bl)
@@ -261,8 +260,7 @@ void Journaler::_finish_reprobe(int r, uint64_t new_end, Context *onfinish) {
          << dendl;
   prezeroing_pos = prezero_pos = write_pos = flush_pos = safe_pos = new_end;
   state = STATE_ACTIVE;
-  onfinish->finish(r);
-  delete onfinish;
+  onfinish->complete(r);
 }
 
 void Journaler::_finish_probe_end(int r, uint64_t end)
@@ -367,8 +365,7 @@ void Journaler::_finish_write_head(int r, Header &wrote, Context *oncommit)
   ldout(cct, 10) << "_finish_write_head " << wrote << dendl;
   last_committed = wrote;
   if (oncommit) {
-    oncommit->finish(r);
-    delete oncommit;
+    oncommit->complete(r);
   }
 
   trim();  // trim?
@@ -563,8 +560,7 @@ void Journaler::wait_for_flush(Context *onsafe)
     ldout(cct, 10) << "flush nothing to flush, (prezeroing/prezero)/write/flush/safe pointers at " 
             << "(" << prezeroing_pos << "/" << prezero_pos << ")/" << write_pos << "/" << flush_pos << "/" << safe_pos << dendl;
     if (onsafe) {
-      onsafe->finish(0);
-      delete onsafe;
+      onsafe->complete(0);
       onsafe = 0;
     }
     return;
@@ -584,8 +580,7 @@ void Journaler::flush(Context *onsafe)
     ldout(cct, 10) << "flush nothing to flush, (prezeroing/prezero)/write/flush/safe pointers at "
             << "(" << prezeroing_pos << "/" << prezero_pos << ")/" << write_pos << "/" << flush_pos << "/" << safe_pos << dendl;
     if (onsafe) {
-      onsafe->finish(0);
-      delete onsafe;
+      onsafe->complete(0);
     }
   } else {
     if (1) {
@@ -731,8 +726,7 @@ void Journaler::_finish_read(int r, uint64_t offset, bufferlist& bl)
     if (on_readable) {
       Context *f = on_readable;
       on_readable = 0;
-      f->finish(r);
-      delete f;
+      f->complete(r);
     }
     return;
   }
@@ -779,8 +773,7 @@ void Journaler::_assimilate_prefetch()
     if (on_readable) {
       Context *f = on_readable;
       on_readable = 0;
-      f->finish(0);
-      delete f;
+      f->complete(0);
     }
   }
 }
@@ -1060,8 +1053,7 @@ void Journaler::handle_write_error(int r)
 {
   lderr(cct) << "handle_write_error " << cpp_strerror(r) << dendl;
   if (on_write_error) {
-    on_write_error->finish(r);
-    delete on_write_error;
+    on_write_error->complete(r);
     on_write_error = NULL;
   } else {
     assert(0 == "unhandled write error");
index a5a023cb33e66e8628ea66fa7495a9b66df20558..9933f853f8f737c496637e512cd78bc800c5213e 100644 (file)
@@ -321,8 +321,7 @@ void Objecter::_linger_ack(LingerOp *info, int r)
 {
   ldout(cct, 10) << "_linger_ack " << info->linger_id << dendl;
   if (info->on_reg_ack) {
-    info->on_reg_ack->finish(r);
-    delete info->on_reg_ack;
+    info->on_reg_ack->complete(r);
     info->on_reg_ack = NULL;
   }
 }
@@ -331,8 +330,7 @@ void Objecter::_linger_commit(LingerOp *info, int r)
 {
   ldout(cct, 10) << "_linger_commit " << info->linger_id << dendl;
   if (info->on_reg_commit) {
-    info->on_reg_commit->finish(r);
-    delete info->on_reg_commit;
+    info->on_reg_commit->complete(r);
     info->on_reg_commit = NULL;
   }
 
@@ -676,8 +674,7 @@ void Objecter::handle_osd_map(MOSDMap *m)
     //go through the list and call the onfinish methods
     for (list<pair<Context*, int> >::iterator i = p->second.begin();
         i != p->second.end(); ++i) {
-      i->first->finish(i->second);
-      delete i->first;
+      i->first->complete(i->second);
     }
     waiting_for_map.erase(p++);
   }
@@ -1622,12 +1619,10 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m)
 
   // do callbacks
   if (onack) {
-    onack->finish(rc);
-    delete onack;
+    onack->complete(rc);
   }
   if (oncommit) {
-    oncommit->finish(rc);
-    delete oncommit;
+    oncommit->complete(rc);
   }
 
   m->put();
@@ -1646,8 +1641,7 @@ void Objecter::list_objects(ListContext *list_context, Context *onfinish) {
           << "\nlist_context->cookie" << list_context->cookie << dendl;
 
   if (list_context->at_end) {
-    onfinish->finish(0);
-    delete onfinish;
+    onfinish->complete(0);
     return;
   }
 
@@ -1667,8 +1661,7 @@ void Objecter::list_objects(ListContext *list_context, Context *onfinish) {
     list_context->starting_pg_num = pg_num;
   }
   if (list_context->current_pg == pg_num){ //this context got all the way through
-    onfinish->finish(0);
-    delete onfinish;
+    onfinish->complete(0);
     return;
   }
 
@@ -1722,9 +1715,8 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl,
     ldout(cct, 20) << "got a response with objects, proceeding" << dendl;
     list_context->list.merge(response.entries);
     if (response_size >= list_context->max_entries) {
-      final_finish->finish(0);
+      final_finish->complete(0);
       delete bl;
-      delete final_finish;
       return;
     }
 
@@ -1756,8 +1748,7 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl,
   ldout(cct, 20) << "out of pgs, returning to" << final_finish << dendl;
   list_context->at_end = true;
   delete bl;
-  final_finish->finish(0);
-  delete final_finish;
+  final_finish->complete(0);
   return;
 }
 
@@ -1799,8 +1790,7 @@ struct C_SelfmanagedSnap : public Context {
       bufferlist::iterator p = bl.begin();
       ::decode(*psnapid, p);
     }
-    fin->finish(r);
-    delete fin;
+    fin->complete(r);
   }
 };
 
@@ -1975,8 +1965,7 @@ void Objecter::handle_pool_op_reply(MPoolOpReply *m)
       wait_for_new_map(op->onfinish, m->epoch, m->replyCode);
     }
     else {
-      op->onfinish->finish(m->replyCode);
-      delete op->onfinish;
+      op->onfinish->complete(m->replyCode);
     }
     op->onfinish = NULL;
     delete op;
@@ -2033,8 +2022,7 @@ void Objecter::handle_get_pool_stats_reply(MGetPoolStatsReply *m)
     *op->pool_stats = m->pool_stats;
     if (m->version > last_seen_pgmap_version)
       last_seen_pgmap_version = m->version;
-    op->onfinish->finish(0);
-    delete op->onfinish;
+    op->onfinish->complete(0);
     poolstat_ops.erase(tid);
     delete op;
 
@@ -2085,8 +2073,7 @@ void Objecter::handle_fs_stats_reply(MStatfsReply *m)
     *(op->stats) = m->h.st;
     if (m->h.version > last_seen_pgmap_version)
       last_seen_pgmap_version = m->h.version;
-    op->onfinish->finish(0);
-    delete op->onfinish;
+    op->onfinish->complete(0);
     statfs_ops.erase(tid);
     delete op;
 
@@ -2128,8 +2115,7 @@ void Objecter::_sg_read_finish(vector<ObjectExtent>& extents, vector<bufferlist>
   ldout(cct, 7) << "_sg_read_finish " << bytes_read << " bytes" << dendl;
 
   if (onfinish) {
-    onfinish->finish(bytes_read);// > 0 ? bytes_read:m->get_result());
-    delete onfinish;
+    onfinish->complete(bytes_read);// > 0 ? bytes_read:m->get_result());
   }
 }
 
index c1cac88b60e4fd2f54735133b269ceb46c82651e..b593bef69d9743e12168b1bfffcc5a6154fa30e8 100644 (file)
@@ -860,8 +860,7 @@ public:
        if (pmtime)
          *pmtime = m;
       }
-      fin->finish(r);
-      delete fin;
+      fin->complete(r);
     }
   };
 
@@ -875,8 +874,7 @@ public:
        bufferlist::iterator p = bl.begin();
        ::decode(attrset, p);
       }
-      fin->finish(r);
-      delete fin;
+      fin->complete(r);
     }
   };
 
@@ -916,8 +914,7 @@ public:
       if (r >= 0) {
         objecter->_list_reply(list_context, r, bl, final_finish, epoch);
       } else {
-        final_finish->finish(r);
-        delete final_finish;
+        final_finish->complete(r);
       }
     }
   };
index baed9de28e07c4d74b1a59a60220a8dab3ef2513..93d0809d4915198dbb26e9032149d0da5c262a91 100644 (file)
@@ -104,8 +104,7 @@ public:
       for (list<Context *>::iterator i = on_commit.begin();
           i != on_commit.end();
           on_commit.erase(i++)) {
-       (*i)->finish(0);
-       delete *i;
+       (*i)->complete(0);
       }
       return 0;
     }
index 6a63b353c61115ba03751dcec5c4dba2694ee31e..80e95dae6ec80c33154b00e5f9d955aeed0a3777 100644 (file)
@@ -163,7 +163,7 @@ public:
       : stat_state(state), ctx(context) { }
 
     void finish(int r) {
-      ctx->finish(r);
+      ctx->complete(r);
 
       stat_state->wrkldgen->m_stats_lock.Lock();
 
index 92bec7650c617aac25f928ee70b3862168e6a078..e067ceed8f989f228ae90c60c47940d551959a49 100644 (file)
@@ -40,8 +40,7 @@ TEST(ContextGather, OneSub) {
   C_Checker *checker = new C_Checker(&finish_called, &result);
   gather.set_finisher(checker);
   gather.activate();
-  sub->finish(0);
-  delete sub;
+  sub->complete(0);
   EXPECT_TRUE(finish_called);
   EXPECT_EQ(0, result);
 }
@@ -63,14 +62,12 @@ TEST(ContextGather, ManySubs) {
 
   //finish all except one sub
   for (int j = 0; j < sub_count - 1; ++j) {
-    subs[j]->finish(0);
-    delete subs[j];
+    subs[j]->complete(0);
     EXPECT_FALSE(finish_called);
   }
 
   //finish last one and check asserts
-  subs[sub_count-1]->finish(0);
-  delete subs[sub_count-1];
+  subs[sub_count-1]->complete(0);
   EXPECT_TRUE(finish_called);
 }
 
@@ -92,16 +89,14 @@ TEST(ContextGather, AlternatingSubCreateFinish) {
 
   //alternate finishing first half of subs and creating last half of subs
   for (int j = 0; j < sub_count / 2; ++j) {
-    subs[j]->finish(0);
-    delete subs[j];
+    subs[j]->complete(0);
     subs[sub_count / 2 + j] = gather.new_sub();
   }
   gather.activate();
 
   //finish last half of subs
   for (int k = sub_count / 2; k < sub_count; ++k) {
-    subs[k]->finish(0);
-    delete subs[k];
+    subs[k]->complete(0);
   }
 
   EXPECT_TRUE(finish_called);