From 4ca584e691cb0d48ab024ca7e67f78cad9790ca3 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 16 Jul 2008 09:49:05 -0700 Subject: [PATCH] mds: EUpdate in mksnap; fix ESnap --- src/mds/Server.cc | 9 +++++---- src/mds/events/EMetaBlob.h | 13 ++++++++++--- src/mds/events/ESnap.h | 6 +----- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index e031375ecea94..367ae30fea68e 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -4896,9 +4896,9 @@ void Server::handle_client_mksnap(MDRequest *mdr) // allocate a snapid // HACK - version_t snapv; - snapid_t snapid = mds->snaptable->create(diri->ino(), snapname, mdr->now, &snapv); - dout(10) << " snapid is " << snapid << dendl; + version_t stid; + snapid_t snapid = mds->snaptable->create(diri->ino(), snapname, mdr->now, &stid); + dout(10) << " snapid is " << snapid << " stid " << &stid << dendl; // journal SnapInfo info; @@ -4912,8 +4912,9 @@ void Server::handle_client_mksnap(MDRequest *mdr) pi->version = diri->pre_dirty(); mdr->ls = mdlog->get_current_segment(); - ESnap *le = new ESnap(mdlog, true, info, snapv); + EUpdate *le = new EUpdate(mdlog, "mksnap"); le->metablob.add_client_req(req->get_reqid()); + le->metablob.add_snap_transaction(stid); mds->locker->predirty_nested(mdr, &le->metablob, diri, 0, PREDIRTY_PRIMARY, false); mdcache->journal_dirty_inode(&le->metablob, diri, diri->find_snaprealm()->get_latest_snap()); diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 945ecdf3f52f5..fe53d3d377e72 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -268,8 +268,8 @@ private: list lump_order; map lump_map; - // anchor transactions included in this update. - list atids; + list atids; // anchor table transactions + list stids; // snap table transactions // ino's i've allocated list allocated_inos; @@ -286,6 +286,7 @@ private: ::encode(lump_order, bl); ::encode(lump_map, bl); ::encode(atids, bl); + ::encode(stids, bl); ::encode(allocated_inos, bl); if (!allocated_inos.empty()) ::encode(alloc_tablev, bl); @@ -296,6 +297,7 @@ private: ::decode(lump_order, bl); ::decode(lump_map, bl); ::decode(atids, bl); + ::decode(stids, bl); ::decode(allocated_inos, bl); if (!allocated_inos.empty()) ::decode(alloc_tablev, bl); @@ -304,7 +306,7 @@ private: } - // soft state + // soft stateadd off_t last_subtree_map; off_t my_offset; @@ -329,6 +331,9 @@ private: void add_anchor_transaction(version_t atid) { atids.push_back(atid); } + void add_snap_transaction(version_t stid) { + stids.push_back(stid); + } void add_allocated_ino(inodeno_t ino, version_t tablev) { allocated_inos.push_back(ino); @@ -508,6 +513,8 @@ private: out << " " << lump_order.front() << ", " << lump_map.size() << " dirs"; if (!atids.empty()) out << " atids=" << atids; + if (!stids.empty()) + out << " stids=" << stids; if (!allocated_inos.empty()) out << " inos=" << allocated_inos << " v" << alloc_tablev; out << "]"; diff --git a/src/mds/events/ESnap.h b/src/mds/events/ESnap.h index 8e1bfff3657a5..a08f8d0176814 100644 --- a/src/mds/events/ESnap.h +++ b/src/mds/events/ESnap.h @@ -24,29 +24,25 @@ class ESnap : public LogEvent { public: - EMetaBlob metablob; bool create; SnapInfo snap; version_t version; // table version public: ESnap() : LogEvent(EVENT_SNAP) { } - ESnap(MDLog *mdl, bool c, SnapInfo &sn, version_t v) : + ESnap(bool c, SnapInfo &sn, version_t v) : LogEvent(EVENT_SNAP), - metablob(mdl), create(c), snap(sn), version(v) { } void encode(bufferlist& bl) const { ::encode(create, bl); ::encode(snap, bl); ::encode(version, bl); - ::encode(metablob, bl); } void decode(bufferlist::iterator &bl) { ::decode(create, bl); ::decode(snap, bl); ::decode(version, bl); - ::decode(metablob, bl); } void print(ostream& out) { -- 2.39.5