diff options
author | Samuel Just <sam.just@inktank.com> | 2013-07-19 17:35:43 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-07-19 17:40:48 -0700 |
commit | 6d386bda93099dc2e450cde7139487b5983f8889 (patch) | |
tree | 0679910683ccc87bc6669692c2c6d085a3e50877 | |
parent | b7456791799c906c5a7c7e96da82313b6c7ae3c9 (diff) | |
download | ceph-6d386bda93099dc2e450cde7139487b5983f8889.tar.gz |
src/*: make Context::finish private and switch all users to use complete
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/client/SyntheticClient.cc | 3 | ||||
-rw-r--r-- | src/include/Context.h | 4 | ||||
-rw-r--r-- | src/librbd/LibrbdWriteback.cc | 3 | ||||
-rw-r--r-- | src/mds/AnchorClient.cc | 3 | ||||
-rw-r--r-- | src/mds/CInode.cc | 8 | ||||
-rw-r--r-- | src/mds/MDCache.cc | 30 | ||||
-rw-r--r-- | src/mds/MDLog.cc | 9 | ||||
-rw-r--r-- | src/mds/MDS.cc | 3 | ||||
-rw-r--r-- | src/mds/MDSTable.cc | 3 | ||||
-rw-r--r-- | src/mds/MDSTableClient.cc | 3 | ||||
-rw-r--r-- | src/mds/Mutation.h | 3 | ||||
-rw-r--r-- | src/osdc/Filer.cc | 9 | ||||
-rw-r--r-- | src/osdc/Journaler.cc | 24 | ||||
-rw-r--r-- | src/osdc/Objecter.cc | 42 | ||||
-rw-r--r-- | src/osdc/Objecter.h | 9 | ||||
-rw-r--r-- | src/test/ObjectMap/KeyValueDBMemory.h | 3 | ||||
-rw-r--r-- | src/test/filestore/workload_generator.h | 2 | ||||
-rw-r--r-- | src/test/gather.cc | 15 |
18 files changed, 61 insertions, 115 deletions
diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index 79171da46f1..cb211f5461b 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -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; diff --git a/src/include/Context.h b/src/include/Context.h index e31fca6a426..9ec4414a047 100644 --- a/src/include/Context.h +++ b/src/include/Context.h @@ -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; diff --git a/src/librbd/LibrbdWriteback.cc b/src/librbd/LibrbdWriteback.cc index a7ab0488dc6..da02a34ed32 100644 --- a/src/librbd/LibrbdWriteback.cc +++ b/src/librbd/LibrbdWriteback.cc @@ -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)); } /** diff --git a/src/mds/AnchorClient.cc b/src/mds/AnchorClient.cc index bcc8710e43f..30cbfd34f74 100644 --- a/src/mds/AnchorClient.cc +++ b/src/mds/AnchorClient.cc @@ -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); } } } diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 48529948955..d215d18690f 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -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) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index e592dde96ca..77d3d8b97b8 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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; } diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index b293c4cc10a..3dfc00fc221 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -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; } diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index a867961ccf3..439f33cfc8c 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -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 diff --git a/src/mds/MDSTable.cc b/src/mds/MDSTable.cc index 4b21f4feaa5..ef0326dfbd3 100644 --- a/src/mds/MDSTable.cc +++ b/src/mds/MDSTable.cc @@ -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); } } diff --git a/src/mds/MDSTableClient.cc b/src/mds/MDSTableClient.cc index b4781497068..cc3152f1d67 100644 --- a/src/mds/MDSTableClient.cc +++ b/src/mds/MDSTableClient.cc @@ -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)) { diff --git a/src/mds/Mutation.h b/src/mds/Mutation.h index c0bea19d16e..b50a03cefa4 100644 --- a/src/mds/Mutation.h +++ b/src/mds/Mutation.h @@ -330,8 +330,7 @@ struct MDSlaveUpdate { ~MDSlaveUpdate() { item.remove_myself(); if (waiter) - waiter->finish(0); - delete waiter; + waiter->complete(0); } }; diff --git a/src/osdc/Filer.cc b/src/osdc/Filer.cc index 7eb4ad616db..8f94a97d292 100644 --- a/src/osdc/Filer.cc +++ b/src/osdc/Filer.cc @@ -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; } diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index cd9b9edc4c7..ba4ca8dc4b9 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -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"); diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index a5a023cb33e..9933f853f8f 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -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()); } } diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index c1cac88b60e..b593bef69d9 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -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); } } }; diff --git a/src/test/ObjectMap/KeyValueDBMemory.h b/src/test/ObjectMap/KeyValueDBMemory.h index baed9de28e0..93d0809d491 100644 --- a/src/test/ObjectMap/KeyValueDBMemory.h +++ b/src/test/ObjectMap/KeyValueDBMemory.h @@ -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; } diff --git a/src/test/filestore/workload_generator.h b/src/test/filestore/workload_generator.h index 6a63b353c61..80e95dae6ec 100644 --- a/src/test/filestore/workload_generator.h +++ b/src/test/filestore/workload_generator.h @@ -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(); diff --git a/src/test/gather.cc b/src/test/gather.cc index 92bec7650c6..e067ceed8f9 100644 --- a/src/test/gather.cc +++ b/src/test/gather.cc @@ -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); |