From 2d6ab6e53b8cc9e4ea88f9d5cd6eb3e5fdaa8edf Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 3 Jun 2015 18:57:52 +0800 Subject: [PATCH] mds: record cap flush tid in log event Signed-off-by: Yan, Zheng --- src/mds/events/EMetaBlob.h | 4 ++++ src/mds/journal.cc | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 16171404523c..7d219e936391 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -314,6 +314,7 @@ private: // idempotent op(s) list > client_reqs; + list > client_flushes; public: void encode(bufferlist& bl) const; @@ -346,6 +347,9 @@ private: void add_client_req(metareqid_t r, uint64_t tid=0) { client_reqs.push_back(pair(r, tid)); } + void add_client_flush(metareqid_t r, uint64_t tid=0) { + client_flushes.push_back(pair(r, tid)); + } void add_table_transaction(int table, version_t tid) { table_tids.push_back(pair<__u8, version_t>(table, tid)); diff --git a/src/mds/journal.cc b/src/mds/journal.cc index ee94dd392cc4..406a929ac544 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -753,7 +753,7 @@ void EMetaBlob::dirlump::generate_test_instances(list& ls) */ void EMetaBlob::encode(bufferlist& bl) const { - ENCODE_START(7, 5, bl); + ENCODE_START(8, 5, bl); ::encode(lump_order, bl); ::encode(lump_map, bl); ::encode(roots, bl); @@ -778,6 +778,7 @@ void EMetaBlob::encode(bufferlist& bl) const ::encode(i, bl); ::encode(b, bl); } + ::encode(client_flushes, bl); ENCODE_FINISH(bl); } void EMetaBlob::decode(bufferlist::iterator &bl) @@ -827,6 +828,9 @@ void EMetaBlob::decode(bufferlist::iterator &bl) ::decode(i, bl); ::decode(b, bl); } + if (struct_v >= 8) { + ::decode(client_flushes, bl); + } DECODE_FINISH(bl); } @@ -1607,6 +1611,21 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) } } + // client flushes + for (list >::iterator p = client_flushes.begin(); + p != client_flushes.end(); + ++p) { + if (p->first.name.is_client()) { + dout(10) << "EMetaBlob.replay flush " << p->first << " trim_to " << p->second << dendl; + Session *session = mds->sessionmap.get_session(p->first.name); + if (session) { + session->add_completed_flush(p->first.tid); + if (p->second) + session->trim_completed_flushes(p->second); + } + } + } + // update segment update_segment(logseg); -- 2.47.3