From c959b6fd3c55c1ca95b24970c78daec2ad518764 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 26 Mar 2008 09:19:27 -0700 Subject: [PATCH] mds: some lease packaging cleanup --- src/client/Client.cc | 2 +- src/mds/Locker.cc | 44 +++++++++++++++++++++++-------------- src/mds/Locker.h | 7 +++--- src/mds/Server.cc | 18 +++++---------- src/messages/MClientReply.h | 8 ++++++- 5 files changed, 44 insertions(+), 35 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 8b3131e98f2cb..8e71e96cb6ad6 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -317,7 +317,7 @@ void Client::trim_cache() } -void Client::update_inode(Inode *in, InodeStat *st, utime_t ttl) +void Client::update_inode(Inode *in, InodeStat *st, ceph_mds_reply_lease *l, utime_t ttl) { dout(12) << "update_inode stat mask is " << st->mask << dendl; if (st->mask & CEPH_STAT_MASK_INODE) { diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 6c8a327c45330..1bb2c0f4d3868 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1018,24 +1018,9 @@ void Locker::handle_client_lease(MClientLease *m) } -void Locker::decide_client_lease(CInode *in, int mask, int pool, int client) -{ - mask = CEPH_LOCK_INO; - pool = 1; // fixme.. do something smart! - if (in->authlock.can_rdlock(0)) mask |= CEPH_LOCK_IAUTH; - if (in->linklock.can_rdlock(0)) mask |= CEPH_LOCK_ILINK; - if (in->filelock.can_rdlock(0)) mask |= CEPH_LOCK_IFILE; -} -void Locker::decide_client_lease(CDentry *dn, int mask, int pool, int client) -{ - pool = 1; // fixme.. do something smart! - mask = 0; - if (dn->lock.can_rdlock(0)) mask |= CEPH_LOCK_DN; -} - -void Locker::issue_client_lease(MDSCacheObject *p, int mask, int pool, int client, - bufferlist &bl, utime_t now, Session *session) +void Locker::_issue_client_lease(MDSCacheObject *p, int mask, int pool, int client, + bufferlist &bl, utime_t now, Session *session) { if (mask) { ClientLease *l = p->add_client_lease(client, mask); @@ -1053,6 +1038,31 @@ void Locker::issue_client_lease(MDSCacheObject *p, int mask, int pool, int clien +int Locker::issue_client_lease(CInode *in, int client, + bufferlist &bl, utime_t now, Session *session) +{ + int mask = CEPH_LOCK_INO; + int pool = 1; // fixme.. do something smart! + if (in->authlock.can_rdlock(0)) mask |= CEPH_LOCK_IAUTH; + if (in->linklock.can_rdlock(0)) mask |= CEPH_LOCK_ILINK; + if (in->filelock.can_rdlock(0)) mask |= CEPH_LOCK_IFILE; + + _issue_client_lease(in, mask, pool, client, bl, now, session); + return mask; +} + +int Locker::issue_client_lease(CDentry *dn, int client, + bufferlist &bl, utime_t now, Session *session) +{ + int pool = 1; // fixme.. do something smart! + int mask = 0; + if (dn->lock.can_rdlock(0)) mask |= CEPH_LOCK_DN; + + _issue_client_lease(dn, mask, pool, client, bl, now, session); + return mask; +} + + diff --git a/src/mds/Locker.h b/src/mds/Locker.h index 894b7c5d15cef..996c5712a5f5c 100644 --- a/src/mds/Locker.h +++ b/src/mds/Locker.h @@ -205,10 +205,9 @@ protected: public: void handle_client_lease(class MClientLease *m); - void decide_client_lease(CInode *in, int mask, int pool, int client); - void decide_client_lease(CDentry *dn, int mask, int pool, int client); - void issue_client_lease(MDSCacheObject *p, int mask, int pool, int client, - bufferlist &bl, utime_t now, Session *session); + void _issue_client_lease(MDSCacheObject *p, int mask, int pool, int client, bufferlist &bl, utime_t now, Session *session); + int issue_client_lease(CInode *in, int client, bufferlist &bl, utime_t now, Session *session); + int issue_client_lease(CDentry *dn, int client, bufferlist &bl, utime_t now, Session *session); }; diff --git a/src/mds/Server.cc b/src/mds/Server.cc index c096f48347f31..d5c2869aec242 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -583,8 +583,7 @@ void Server::set_trace_dist(Session *session, MClientReply *reply, CInode *in, C // choose lease duration utime_t now = g_clock.now(); - - int lmask, lpool; + int lmask; // start with dentry or inode? if (!in) { @@ -595,8 +594,7 @@ void Server::set_trace_dist(Session *session, MClientReply *reply, CInode *in, C inode: InodeStat::_encode(bl, in); - mds->locker->decide_client_lease(in, lmask, lpool, client); - mds->locker->issue_client_lease(in, lmask, lpool, client, bl, now, session); + lmask = mds->locker->issue_client_lease(in, client, bl, now, session); numi++; dout(20) << " trace added " << lmask << " " << *in << dendl; @@ -607,10 +605,9 @@ void Server::set_trace_dist(Session *session, MClientReply *reply, CInode *in, C dentry: ::_encode_simple(dn->get_name(), bl); - mds->locker->decide_client_lease(dn, lmask, lpool, client); - mds->locker->issue_client_lease(dn, lmask, lpool, client, bl, now, session); + lmask = mds->locker->issue_client_lease(dn, client, bl, now, session); numdn++; - dout(20) << " trace added " << (int)lmask << " " << *dn << dendl; + dout(20) << " trace added " << lmask << " " << *dn << dendl; // dir DirStat::_encode(bl, dn->get_dir(), whoami); @@ -1779,15 +1776,12 @@ void Server::handle_client_readdir(MDRequest *mdr) dout(12) << "including inode " << *in << dendl; // dentry - int lmask, lpool; ::_encode(it->first, dnbl); - mds->locker->decide_client_lease(dn, lmask, lpool, client); - mds->locker->issue_client_lease(dn, lmask, lpool, client, dnbl, mdr->now, mdr->session); + mds->locker->issue_client_lease(dn, client, dnbl, mdr->now, mdr->session); // inode InodeStat::_encode(dnbl, in); - mds->locker->decide_client_lease(in, lmask, lpool, client); - mds->locker->issue_client_lease(in, lmask, lpool, client, dnbl, mdr->now, mdr->session); + mds->locker->issue_client_lease(in, client, dnbl, mdr->now, mdr->session); numfiles++; // touch dn diff --git a/src/messages/MClientReply.h b/src/messages/MClientReply.h index bb0900ad953c1..669ce96a4b20c 100644 --- a/src/messages/MClientReply.h +++ b/src/messages/MClientReply.h @@ -164,10 +164,12 @@ class MClientReply : public Message { // reply data struct ceph_mds_reply_head st; + /* list trace_in; list trace_dir; list trace_dn; list trace_dn_mask; + */ bufferlist trace_bl; DirStat *dir_dir; @@ -273,6 +275,10 @@ class MClientReply : public Message { ::_encode_simple(numdn, trace_bl); trace_bl.claim_append(bl); } + bufferlist& get_trace_bl() { + return trace_bl; + } + /* void _decode_trace() { bufferlist::iterator p = trace_bl.begin(); __u16 numi, numdn; @@ -323,7 +329,7 @@ class MClientReply : public Message { if (trace_in.empty() && trace_bl.length()) _decode_trace(); return trace_dn_mask; } - + */ }; -- 2.39.5