From: Sage Weil Date: Fri, 30 Jan 2009 19:22:40 +0000 (-0800) Subject: mds: rip out old purge_inode crap X-Git-Tag: v0.7~241 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=57d8ba999067e17ff08a89c556bf651945f54e54;p=ceph.git mds: rip out old purge_inode crap --- diff --git a/src/Makefile.am b/src/Makefile.am index 714a06006060..26818e7c1c23 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -414,7 +414,6 @@ noinst_HEADERS = \ mds/events/EImportStart.h\ mds/events/EMetaBlob.h\ mds/events/EOpen.h\ - mds/events/EPurgeFinish.h\ mds/events/ESession.h\ mds/events/ESessions.h\ mds/events/ESlaveUpdate.h\ diff --git a/src/mds/LogEvent.cc b/src/mds/LogEvent.cc index f0fb9e4c87de..444fe7d86775 100644 --- a/src/mds/LogEvent.cc +++ b/src/mds/LogEvent.cc @@ -34,8 +34,6 @@ #include "events/EOpen.h" #include "events/ECommitted.h" -#include "events/EPurgeFinish.h" - #include "events/ETableClient.h" #include "events/ETableServer.h" @@ -71,8 +69,6 @@ LogEvent *LogEvent::decode(bufferlist& bl) case EVENT_OPEN: le = new EOpen; break; case EVENT_COMMITTED: le = new ECommitted; break; - case EVENT_PURGEFINISH: le = new EPurgeFinish; break; - case EVENT_TABLECLIENT: le = new ETableClient; break; case EVENT_TABLESERVER: le = new ETableServer; break; diff --git a/src/mds/LogEvent.h b/src/mds/LogEvent.h index 151ae5df90b4..64e7e4fad9dc 100644 --- a/src/mds/LogEvent.h +++ b/src/mds/LogEvent.h @@ -31,8 +31,6 @@ #define EVENT_OPEN 22 #define EVENT_COMMITTED 23 -#define EVENT_PURGEFINISH 30 - #define EVENT_TABLECLIENT 42 #define EVENT_TABLESERVER 43 diff --git a/src/mds/LogSegment.h b/src/mds/LogSegment.h index 7ad78df59f6b..61841d450ade 100644 --- a/src/mds/LogSegment.h +++ b/src/mds/LogSegment.h @@ -49,7 +49,6 @@ class LogSegment { //xlist purging_inodes; set truncating_inodes; - map > purging_inodes; map > pending_commit_tids; // mdstable set uncommitted_masters; diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index b8c6a942f9e9..a57833abe696 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -43,7 +43,6 @@ #include "events/EUpdate.h" #include "events/ESlaveUpdate.h" #include "events/EString.h" -#include "events/EPurgeFinish.h" #include "events/EImportFinish.h" #include "events/EFragment.h" #include "events/ECommitted.h" @@ -4201,154 +4200,6 @@ void MDCache::start_recovered_truncates() -// ---------------------------- -// purge - -class C_MDC_PurgeFinish : public Context { - MDCache *mdc; - CInode *in; - loff_t newsize, oldsize; -public: - C_MDC_PurgeFinish(MDCache *c, CInode *i, loff_t ns, loff_t os) : - mdc(c), in(i), newsize(ns), oldsize(os) {} - void finish(int r) { - mdc->purge_inode_finish(in, newsize, oldsize); - } -}; -class C_MDC_PurgeFinish2 : public Context { - MDCache *mdc; - CInode *in; - loff_t newsize, oldsize; -public: - C_MDC_PurgeFinish2(MDCache *c, CInode *i, loff_t ns, loff_t os) : - mdc(c), in(i), newsize(ns), oldsize(os) {} - void finish(int r) { - mdc->purge_inode_finish_2(in, newsize, oldsize); - } -}; - -/* purge_inode in - * will be called by on unlink or rmdir or purge - * caller responsible for journaling a matching EUpdate - */ -void MDCache::purge_inode(CInode *in, loff_t newsize, loff_t oldsize, LogSegment *ls) -{ - dout(10) << "purge_inode " << oldsize << " -> " << newsize - << " on " << *in - << dendl; - - assert(oldsize >= newsize); - - purging[in][newsize] = oldsize; - purging_ls[in][newsize] = ls; - ls->purging_inodes[in][newsize] = oldsize; - - _do_purge_inode(in, newsize, oldsize); -} - -void MDCache::_do_purge_inode(CInode *in, loff_t newsize, loff_t oldsize) -{ - SnapContext nullsnap; - in->get(CInode::PIN_PURGING); - - // remove - if (newsize < oldsize) { - SnapRealm *realm = in->find_snaprealm(); - const SnapContext *snapc; - if (realm) { - dout(10) << "_do_purge_inode realm " << *realm << dendl; - snapc = &realm->get_snap_context(); - } else { - dout(10) << "_do_purge_inode NO realm, using null context" << dendl; - snapc = &nullsnap; - assert(in->last == CEPH_NOSNAP); - } - dout(10) << "_do_purge_inode snapc " << snapc << " on " << *in << dendl; - mds->filer->remove(in->inode.ino, &in->inode.layout, *snapc, - newsize, oldsize-newsize, 0, - 0, new C_MDC_PurgeFinish(this, in, newsize, oldsize)); - } else { - // no need, empty file, just log it - purge_inode_finish(in, newsize, oldsize); - } -} - -void MDCache::purge_inode_finish(CInode *in, loff_t newsize, loff_t oldsize) -{ - dout(10) << "purge_inode_finish " << oldsize << " -> " << newsize - << " on " << *in << dendl; - - // log completion - mds->mdlog->submit_entry(new EPurgeFinish(in->ino(), newsize, oldsize), - new C_MDC_PurgeFinish2(this, in, newsize, oldsize)); -} - -void MDCache::purge_inode_finish_2(CInode *in, loff_t newsize, loff_t oldsize) -{ - dout(10) << "purge_inode_finish_2 " << oldsize << " -> " << newsize - << " on " << *in << dendl; - - // remove from purging list - LogSegment *ls = purging_ls[in][newsize]; - purging[in].erase(newsize); - purging_ls[in].erase(newsize); - if (purging[in].empty()) { - purging.erase(in); - purging_ls.erase(in); - } - - assert(ls->purging_inodes.count(in)); - assert(ls->purging_inodes[in].count(newsize)); - assert(ls->purging_inodes[in][newsize] == oldsize); - ls->purging_inodes[in].erase(newsize); - if (ls->purging_inodes[in].empty()) - ls->purging_inodes.erase(in); - - in->put(CInode::PIN_PURGING); - - // tell anyone who cares (log flusher?) - if (purging.count(in) == 0 || - purging[in].rbegin()->first < newsize) { - list ls; - ls.swap(waiting_for_purge[in][newsize]); - waiting_for_purge[in].erase(newsize); - if (waiting_for_purge[in].empty()) - waiting_for_purge.erase(in); - finish_contexts(ls, 0); - } -} - -void MDCache::add_recovered_purge(CInode *in, loff_t newsize, loff_t oldsize, LogSegment *ls) -{ - assert(purging[in].count(newsize) == 0); - purging[in][newsize] = oldsize; - purging_ls[in][newsize] = ls; - ls->purging_inodes[in][newsize] = oldsize; -} - -void MDCache::remove_recovered_purge(CInode *in, loff_t newsize, loff_t oldsize) -{ - purging[in].erase(newsize); -} - -void MDCache::start_recovered_purges() -{ - dout(10) << "start_recovered_purges (" << purging.size() << " purges)" << dendl; - - for (map >::iterator p = purging.begin(); - p != purging.end(); - ++p) { - for (map::iterator q = p->second.begin(); - q != p->second.end(); - ++q) { - dout(10) << "start_recovered_purges " - << q->second << " -> " << q->first - << " on " << *p->first - << dendl; - _do_purge_inode(p->first, q->first, q->second); - } - } -} diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index d572bc954b65..a50b44fde9d7 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -833,22 +833,6 @@ public: void remove_recovered_truncate(CInode *in); void start_recovered_truncates(); - // inode purging - void purge_inode(CInode *in, loff_t newsize, loff_t oldsize, LogSegment *ls); - void _do_purge_inode(CInode *in, loff_t newsize, loff_t oldsize); - void purge_inode_finish(CInode *in, loff_t newsize, loff_t oldsize); - void purge_inode_finish_2(CInode *in, loff_t newsize, loff_t oldsize); - bool is_purging(CInode *in, loff_t newsize, loff_t oldsize) { - return purging.count(in) && purging[in].count(newsize); - } - void wait_for_purge(CInode *in, loff_t newsize, Context *c) { - waiting_for_purge[in][newsize].push_back(c); - } - - void add_recovered_purge(CInode *in, loff_t newsize, loff_t oldsize, LogSegment *ls); - void remove_recovered_purge(CInode *in, loff_t newsize, loff_t oldsize); - void start_recovered_purges(); - public: CDir *get_auth_container(CDir *in); diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index d07c013ed814..f161799b8526 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -1031,7 +1031,6 @@ void MDS::recovery_done() snapclient->finish_recovery(); mdcache->start_recovered_truncates(); - mdcache->start_recovered_purges(); mdcache->do_file_recover(); // tell connected clients diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 0d269b870678..dbd8ab51c376 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -336,7 +336,6 @@ private: list truncate_start; // start truncate map truncate_finish; // finished truncate (started in segment blah) - list< triple > purging_inodes; vector destroyed_inodes; // idempotent op(s) @@ -356,7 +355,6 @@ private: ::encode(sessionmapv, bl); ::encode(truncate_start, bl); ::encode(truncate_finish, bl); - ::encode(purging_inodes, bl); ::encode(destroyed_inodes, bl); ::encode(client_reqs, bl); } @@ -373,7 +371,6 @@ private: ::decode(sessionmapv, bl); ::decode(truncate_start, bl); ::decode(truncate_finish, bl); - ::decode(purging_inodes, bl); ::decode(destroyed_inodes, bl); ::decode(client_reqs, bl); } @@ -429,9 +426,6 @@ private: truncate_finish[ino] = segoff; } - void add_inode_purge(inodeno_t ino, uint64_t newsize, uint64_t oldsize) { - purging_inodes.push_back(triple(ino, newsize, oldsize)); - } void add_destroyed_inode(inodeno_t ino) { destroyed_inodes.push_back(ino); } diff --git a/src/mds/events/EPurgeFinish.h b/src/mds/events/EPurgeFinish.h deleted file mode 100644 index f6e8c44b069d..000000000000 --- a/src/mds/events/EPurgeFinish.h +++ /dev/null @@ -1,51 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2004-2006 Sage Weil - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - -#ifndef __EPURGE_H -#define __EPURGE_H - -#include "config.h" -#include "include/types.h" - -class EPurgeFinish : public LogEvent { - protected: - inodeno_t ino; - off_t newsize, oldsize; - - public: - EPurgeFinish(inodeno_t i, off_t ns, off_t os) : - LogEvent(EVENT_PURGEFINISH), - ino(i), newsize(ns), oldsize(os) { } - EPurgeFinish() : LogEvent(EVENT_PURGEFINISH) { } - - void print(ostream& out) { - out << "purgefinish " << ino << " " << oldsize << " ->" << newsize; - } - - void encode(bufferlist &bl) const { - ::encode(ino, bl); - ::encode(newsize, bl); - ::encode(oldsize, bl); - } - void decode(bufferlist::iterator &bl) { - ::decode(ino, bl); - ::decode(newsize, bl); - ::decode(oldsize, bl); - } - - void update_segment(); - void replay(MDS *mds); -}; - -#endif diff --git a/src/mds/journal.cc b/src/mds/journal.cc index e583008b25de..8cde8cb94c0c 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -25,8 +25,6 @@ #include "events/EOpen.h" #include "events/ECommitted.h" -#include "events/EPurgeFinish.h" - #include "events/EExport.h" #include "events/EImportStart.h" #include "events/EImportFinish.h" @@ -239,16 +237,6 @@ C_Gather *LogSegment::try_to_expire(MDS *mds) (*p)->add_waiter(CInode::WAIT_TRUNC, gather->new_sub()); } - // purging - for (map >::iterator p = purging_inodes.begin(); - p != purging_inodes.end(); - ++p) { - CInode *in = p->first; - dout(10) << "try_to_expire waiting for purge of " << *in << dendl; - if (!gather) gather = new C_Gather; - mds->mdcache->wait_for_purge(in, p->second.begin()->first, gather->new_sub()); - } - // FIXME client requests...? // audit handling of anchor transactions? @@ -586,18 +574,6 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) } } - // purging inodes - for (list< triple >::iterator p = purging_inodes.begin(); - p != purging_inodes.end(); - ++p) { - CInode *in = mds->mdcache->get_inode(p->first); - assert(in); - dout(10) << "EMetaBlob.replay will purging " - << p->third << " -> " << p->second - << " on " << *in << dendl; - mds->mdcache->add_recovered_purge(in, p->second, p->third, logseg); - } - // destroyed inodes for (vector::iterator p = destroyed_inodes.begin(); p != destroyed_inodes.end(); @@ -945,30 +921,6 @@ void EFragment::replay(MDS *mds) -// ----------------------- -// EPurgeFinish - - -void EPurgeFinish::update_segment() -{ - // ** update purge lists? -} - -void EPurgeFinish::replay(MDS *mds) -{ - dout(10) << "EPurgeFinish.replay " << ino << " " << oldsize << " -> " << newsize << dendl; - CInode *in = mds->mdcache->get_inode(ino); - - // if we don't have *in at this point, it's because purge_stray is lazy and - // doesn't jouranl it's intent to purge. no worries, if *in isn't in the cache, - // it's not in the purge table either. we'll eval_stray when we finish - // recovery. - //assert(in); - if (in) - mds->mdcache->remove_recovered_purge(in, newsize, oldsize); -} - -