From: Yan, Zheng Date: Thu, 20 Jun 2019 02:27:43 +0000 (+0800) Subject: client: define helper function that sends flushsnap message X-Git-Tag: v15.1.0~2060^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=45b4c09855e72f997e422fb582feda56981c7aee;p=ceph.git client: define helper function that sends flushsnap message Signed-off-by: "Yan, Zheng" --- diff --git a/src/client/Client.cc b/src/client/Client.cc index ba1feca29b0..0519c4766b3 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3694,6 +3694,49 @@ void Client::_flushed_cap_snap(Inode *in, snapid_t seq) flush_snaps(in); } +void Client::send_flush_snap(Inode *in, MetaSession *session, + snapid_t follows, CapSnap& capsnap) +{ + auto m = make_message(CEPH_CAP_OP_FLUSHSNAP, + in->ino, in->snaprealm->ino, 0, + in->auth_cap->mseq, cap_epoch_barrier); + m->caller_uid = capsnap.cap_dirtier_uid; + m->caller_gid = capsnap.cap_dirtier_gid; + + m->set_client_tid(capsnap.flush_tid); + m->head.snap_follows = follows; + + m->head.caps = capsnap.issued; + m->head.dirty = capsnap.dirty; + + m->head.uid = capsnap.uid; + m->head.gid = capsnap.gid; + m->head.mode = capsnap.mode; + m->btime = capsnap.btime; + + m->size = capsnap.size; + + m->head.xattr_version = capsnap.xattr_version; + encode(capsnap.xattrs, m->xattrbl); + + m->ctime = capsnap.ctime; + m->btime = capsnap.btime; + m->mtime = capsnap.mtime; + m->atime = capsnap.atime; + m->time_warp_seq = capsnap.time_warp_seq; + m->change_attr = capsnap.change_attr; + + if (capsnap.dirty & CEPH_CAP_FILE_WR) { + m->inline_version = in->inline_version; + m->inline_data = in->inline_data; + } + + ceph_assert(!session->flushing_caps_tids.empty()); + m->set_oldest_flush_tid(*session->flushing_caps_tids.begin()); + + session->con->send_message2(std::move(m)); +} + void Client::flush_snaps(Inode *in, bool all_again) { ldout(cct, 10) << "flush_snaps on " << *in << " all_again " << all_again << dendl; @@ -3702,7 +3745,6 @@ void Client::flush_snaps(Inode *in, bool all_again) // pick auth mds ceph_assert(in->auth_cap); MetaSession *session = in->auth_cap->session; - int mseq = in->auth_cap->mseq; for (auto &p : in->cap_snaps) { CapSnap &capsnap = p.second; @@ -3729,48 +3771,10 @@ void Client::flush_snaps(Inode *in, bool all_again) session->flushing_caps_tids.insert(capsnap.flush_tid); } - auto m = make_message(CEPH_CAP_OP_FLUSHSNAP, in->ino, in->snaprealm->ino, 0, mseq, - cap_epoch_barrier); - m->caller_uid = capsnap.cap_dirtier_uid; - m->caller_gid = capsnap.cap_dirtier_gid; - - m->set_client_tid(capsnap.flush_tid); - m->head.snap_follows = p.first; - - m->head.caps = capsnap.issued; - m->head.dirty = capsnap.dirty; - - m->head.uid = capsnap.uid; - m->head.gid = capsnap.gid; - m->head.mode = capsnap.mode; - m->btime = capsnap.btime; - - m->size = capsnap.size; - - m->head.xattr_version = capsnap.xattr_version; - encode(capsnap.xattrs, m->xattrbl); - - m->ctime = capsnap.ctime; - m->btime = capsnap.btime; - m->mtime = capsnap.mtime; - m->atime = capsnap.atime; - m->time_warp_seq = capsnap.time_warp_seq; - m->change_attr = capsnap.change_attr; - - if (capsnap.dirty & CEPH_CAP_FILE_WR) { - m->inline_version = in->inline_version; - m->inline_data = in->inline_data; - } - - ceph_assert(!session->flushing_caps_tids.empty()); - m->set_oldest_flush_tid(*session->flushing_caps_tids.begin()); - - session->con->send_message2(std::move(m)); + send_flush_snap(in, session, p.first, capsnap); } } - - void Client::wait_on_list(list& ls) { Cond cond; diff --git a/src/client/Client.h b/src/client/Client.h index 69325b0209e..7d384fdc1bb 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -670,13 +670,16 @@ public: void handle_cap_flushsnap_ack(MetaSession *session, Inode *in, const MConstRef& m); void handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const MConstRef& m); void cap_delay_requeue(Inode *in); + void send_cap(Inode *in, MetaSession *session, Cap *cap, bool sync, int used, int want, int retain, int flush, ceph_tid_t flush_tid); + void send_flush_snap(Inode *in, MetaSession *session, snapid_t follows, CapSnap& capsnap); + + void flush_snaps(Inode *in, bool all_again=false); void get_cap_ref(Inode *in, int cap); void put_cap_ref(Inode *in, int cap); - void flush_snaps(Inode *in, bool all_again=false); void wait_sync_caps(Inode *in, ceph_tid_t want); void wait_sync_caps(ceph_tid_t want); void queue_cap_snap(Inode *in, SnapContext &old_snapc);