From: Patrick Donnelly Date: Wed, 26 Jun 2024 16:50:32 +0000 (-0400) Subject: mds: add issue_seq to all cap messages X-Git-Tag: testing/wip-pdonnell-testing-20241019.005706-debug~5^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=cb4ff28af09f0afd5546d87a59cdfc64e64a2b15;p=ceph-ci.git mds: add issue_seq to all cap messages Right now only the clients tell the MDS what they believe the issue_seq to be. The clients are expected to figure out issue_seq updates at Fixes: https://tracker.ceph.com/issues/68515 Signed-off-by: Patrick Donnelly --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 43c74046745..6a00e7debce 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3840,6 +3840,7 @@ void Client::send_cap(Inode *in, MetaSession *session, Cap *cap, want, flush, cap->mseq, + cap->issue_seq, cap_epoch_barrier); /* * Since the setattr will check the cephx mds auth access before @@ -3853,7 +3854,6 @@ void Client::send_cap(Inode *in, MetaSession *session, Cap *cap, m->caller_uid = -1; m->caller_gid = -1; - m->head.issue_seq = cap->issue_seq; m->set_tid(flush_tid); m->head.uid = in->uid; diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index f65704a0176..d64f176acb6 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -2599,6 +2599,7 @@ int Locker::issue_caps(CInode *in, Capability *only_cap) in->find_snaprealm()->inode->ino(), cap->get_cap_id(), cap->get_last_seq(), pending, wanted, 0, cap->get_mseq(), + cap->get_last_issue(), mds->get_osd_epoch_barrier()); in->encode_cap_message(m, cap); @@ -2649,6 +2650,7 @@ int Locker::issue_caps(CInode *in, Capability *only_cap) in->find_snaprealm()->inode->ino(), cap->get_cap_id(), cap->get_last_seq(), after, wanted, 0, cap->get_mseq(), + cap->get_last_issue(), mds->get_osd_epoch_barrier()); in->encode_cap_message(m, cap); @@ -2675,6 +2677,7 @@ void Locker::issue_truncate(CInode *in) cap->get_cap_id(), cap->get_last_seq(), cap->pending(), cap->wanted(), 0, cap->get_mseq(), + cap->get_last_issue(), mds->get_osd_epoch_barrier()); in->encode_cap_message(m, cap); mds->send_message_client_counted(m, cap->get_session()); @@ -3165,6 +3168,7 @@ void Locker::share_inode_max_size(CInode *in, Capability *only_cap) cap->pending(), cap->wanted(), 0, cap->get_mseq(), + cap->get_last_issue(), mds->get_osd_epoch_barrier()); in->encode_cap_message(m, cap); mds->send_message_client_counted(m, cap->get_session()); @@ -3375,10 +3379,10 @@ void Locker::handle_client_caps(const cref_t &m) ref_t ack; if (op == CEPH_CAP_OP_FLUSHSNAP) { if (mds->logger) mds->logger->inc(l_mdss_ceph_cap_op_flushsnap_ack); - ack = make_message(CEPH_CAP_OP_FLUSHSNAP_ACK, m->get_ino(), 0, 0, 0, 0, 0, dirty, 0, mds->get_osd_epoch_barrier()); + ack = make_message(CEPH_CAP_OP_FLUSHSNAP_ACK, m->get_ino(), 0, 0, 0, 0, 0, dirty, 0, 0, mds->get_osd_epoch_barrier()); } else { if (mds->logger) mds->logger->inc(l_mdss_ceph_cap_op_flush_ack); - ack = make_message(CEPH_CAP_OP_FLUSH_ACK, m->get_ino(), 0, m->get_cap_id(), m->get_seq(), m->get_caps(), 0, dirty, 0, mds->get_osd_epoch_barrier()); + ack = make_message(CEPH_CAP_OP_FLUSH_ACK, m->get_ino(), 0, m->get_cap_id(), m->get_seq(), m->get_caps(), 0, dirty, 0, 0, mds->get_osd_epoch_barrier()); } ack->set_snap_follows(follows); ack->set_client_tid(m->get_client_tid()); @@ -3500,7 +3504,7 @@ void Locker::handle_client_caps(const cref_t &m) // case we get a dup response, so whatever.) ref_t ack; if (dirty) { - ack = make_message(CEPH_CAP_OP_FLUSHSNAP_ACK, in->ino(), 0, 0, 0, 0, 0, dirty, 0, mds->get_osd_epoch_barrier()); + ack = make_message(CEPH_CAP_OP_FLUSHSNAP_ACK, in->ino(), 0, 0, 0, 0, 0, dirty, 0, 0, mds->get_osd_epoch_barrier()); ack->set_snap_follows(follows); ack->set_client_tid(m->get_client_tid()); ack->set_oldest_flush_tid(m->get_oldest_flush_tid()); @@ -3589,7 +3593,7 @@ void Locker::handle_client_caps(const cref_t &m) dout(7) << " flush client." << client << " dirty " << ccap_string(dirty) << " seq " << m->get_seq() << " on " << *in << dendl; ack = make_message(CEPH_CAP_OP_FLUSH_ACK, in->ino(), 0, cap->get_cap_id(), m->get_seq(), - m->get_caps(), 0, dirty, 0, mds->get_osd_epoch_barrier()); + m->get_caps(), 0, dirty, 0, cap->get_last_issue(), mds->get_osd_epoch_barrier()); ack->set_client_tid(m->get_client_tid()); ack->set_oldest_flush_tid(m->get_oldest_flush_tid()); } diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index c433c77b453..d5d4215ce2c 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -5898,7 +5898,7 @@ void MDCache::do_cap_import(Session *session, CInode *in, Capability *cap, auto reap = make_message(CEPH_CAP_OP_IMPORT, in->ino(), realm->inode->ino(), cap->get_cap_id(), cap->get_last_seq(), cap->pending(), cap->wanted(), - 0, cap->get_mseq(), mds->get_osd_epoch_barrier()); + 0, cap->get_mseq(), cap->get_last_issue(), mds->get_osd_epoch_barrier()); in->encode_cap_message(reap, cap); reap->snapbl = mds->server->get_snap_trace(session, realm); reap->set_cap_peer(p_cap_id, p_seq, p_mseq, peer, p_flags); diff --git a/src/messages/MClientCaps.h b/src/messages/MClientCaps.h index fc2b85bd63a..b001032225e 100644 --- a/src/messages/MClientCaps.h +++ b/src/messages/MClientCaps.h @@ -142,6 +142,7 @@ protected: int wanted, int dirty, ceph_seq_t mseq, + ceph_seq_t issue_seq, epoch_t oeb) : SafeMessage{CEPH_MSG_CLIENT_CAPS, HEAD_VERSION, COMPAT_VERSION}, osd_epoch_barrier(oeb) { @@ -155,6 +156,7 @@ protected: head.wanted = wanted; head.dirty = dirty; head.migrate_seq = mseq; + head.issue_seq = issue_seq; memset(&peer, 0, sizeof(peer)); } MClientCaps(int op,