From 66a5b27a7659e16c38d02de7ad93f9416d08424b Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Wed, 9 Jan 2019 16:33:42 -0800 Subject: [PATCH] client: define template to declare ref To avoid including message headers in Client.h. Signed-off-by: Patrick Donnelly --- src/client/Client.cc | 56 ++++++++----- src/client/Client.h | 60 +++++-------- src/messages/MClientCaps.h | 1 + src/msg/MessageRef.h | 167 ++++++++++++++++++++++++++++++++++++- 4 files changed, 223 insertions(+), 61 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index bb9ef28c9858f..0536ba1aed802 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -47,8 +47,22 @@ #include "mon/MonClient.h" +#include "messages/MClientCaps.h" +#include "messages/MClientLease.h" +#include "messages/MClientQuota.h" #include "messages/MClientReclaim.h" +#include "messages/MClientReclaimReply.h" #include "messages/MClientReconnect.h" +#include "messages/MClientReply.h" +#include "messages/MClientRequest.h" +#include "messages/MClientRequestForward.h" +#include "messages/MClientSession.h" +#include "messages/MClientSnap.h" +#include "messages/MCommandReply.h" +#include "messages/MFSMap.h" +#include "messages/MFSMapUser.h" +#include "messages/MMDSMap.h" +#include "messages/MOSDMap.h" #include "mds/flock.h" #include "mds/cephfs_features.h" @@ -1557,7 +1571,7 @@ void Client::dump_mds_requests(Formatter *f) } int Client::verify_reply_trace(int r, - MetaRequest *request, const MClientReply::const_ref& reply, + MetaRequest *request, const MConstRef& reply, InodeRef *ptarget, bool *pcreated, const UserPerm& perms) { @@ -2067,7 +2081,7 @@ void Client::_closed_mds_session(MetaSession *s) mds_sessions.erase(s->mds_num); } -void Client::handle_client_session(const MClientSession::const_ref& m) +void Client::handle_client_session(const MConstRef& m) { mds_rank_t from = mds_rank_t(m->get_source().num()); ldout(cct, 10) << __func__ << " " << *m << " from mds." << from << dendl; @@ -2269,7 +2283,7 @@ MClientRequest::ref Client::build_client_request(MetaRequest *request) -void Client::handle_client_request_forward(const MClientRequestForward::const_ref& fwd) +void Client::handle_client_request_forward(const MConstRef& fwd) { mds_rank_t mds = mds_rank_t(fwd->get_source().num()); MetaSession *session = _get_mds_session(mds, fwd->get_connection().get()); @@ -2315,7 +2329,7 @@ bool Client::is_dir_operation(MetaRequest *req) return false; } -void Client::handle_client_reply(const MClientReply::const_ref& reply) +void Client::handle_client_reply(const MConstRef& reply) { mds_rank_t mds_num = mds_rank_t(reply->get_source().num()); MetaSession *session = _get_mds_session(mds_num, reply->get_connection().get()); @@ -2453,7 +2467,7 @@ void Client::_handle_full_flag(int64_t pool) } } -void Client::handle_osd_map(const MOSDMap::const_ref& m) +void Client::handle_osd_map(const MConstRef& m) { std::set new_blacklists; objecter->consume_blacklist_events(&new_blacklists); @@ -2542,7 +2556,7 @@ void Client::handle_osd_map(const MOSDMap::const_ref& m) // incoming messages -bool Client::ms_dispatch2(const Message::ref &m) +bool Client::ms_dispatch2(const MessageRef &m) { std::lock_guard l(client_lock); if (!initialized) { @@ -2624,7 +2638,7 @@ bool Client::ms_dispatch2(const Message::ref &m) return true; } -void Client::handle_fs_map(const MFSMap::const_ref& m) +void Client::handle_fs_map(const MConstRef& m) { fsmap.reset(new FSMap(m->get_fsmap())); @@ -2633,7 +2647,7 @@ void Client::handle_fs_map(const MFSMap::const_ref& m) monclient->sub_got("fsmap", fsmap->get_epoch()); } -void Client::handle_fs_map_user(const MFSMapUser::const_ref& m) +void Client::handle_fs_map_user(const MConstRef& m) { fsmap_user.reset(new FSMapUser); *fsmap_user = m->get_fsmap(); @@ -2642,7 +2656,7 @@ void Client::handle_fs_map_user(const MFSMapUser::const_ref& m) signal_cond_list(waiting_for_fsmap); } -void Client::handle_mds_map(const MMDSMap::const_ref& m) +void Client::handle_mds_map(const MConstRef& m) { mds_gid_t old_inc, new_inc; if (m->get_epoch() <= mdsmap->get_epoch()) { @@ -2939,7 +2953,7 @@ void Client::got_mds_push(MetaSession *s) } } -void Client::handle_lease(const MClientLease::const_ref& m) +void Client::handle_lease(const MConstRef& m) { ldout(cct, 10) << __func__ << " " << *m << dendl; @@ -4652,7 +4666,7 @@ void Client::update_snap_trace(const bufferlist& bl, SnapRealm **realm_ret, bool put_snap_realm(first_realm); } -void Client::handle_snap(const MClientSnap::const_ref& m) +void Client::handle_snap(const MConstRef& m) { ldout(cct, 10) << __func__ << " " << *m << dendl; mds_rank_t mds = mds_rank_t(m->get_source().num()); @@ -4723,7 +4737,7 @@ void Client::handle_snap(const MClientSnap::const_ref& m) } } -void Client::handle_quota(const MClientQuota::const_ref& m) +void Client::handle_quota(const MConstRef& m) { mds_rank_t mds = mds_rank_t(m->get_source().num()); MetaSession *session = _get_mds_session(mds, m->get_connection().get()); @@ -4747,7 +4761,7 @@ void Client::handle_quota(const MClientQuota::const_ref& m) } } -void Client::handle_caps(const MClientCaps::const_ref& m) +void Client::handle_caps(const MConstRef& m) { mds_rank_t mds = mds_rank_t(m->get_source().num()); MetaSession *session = _get_mds_session(mds, m->get_connection().get()); @@ -4811,7 +4825,7 @@ void Client::handle_caps(const MClientCaps::const_ref& m) } } -void Client::handle_cap_import(MetaSession *session, Inode *in, const MClientCaps::const_ref& m) +void Client::handle_cap_import(MetaSession *session, Inode *in, const MConstRef& m) { mds_rank_t mds = session->mds_num; @@ -4850,7 +4864,7 @@ void Client::handle_cap_import(MetaSession *session, Inode *in, const MClientCap } } -void Client::handle_cap_export(MetaSession *session, Inode *in, const MClientCaps::const_ref& m) +void Client::handle_cap_export(MetaSession *session, Inode *in, const MConstRef& m) { mds_rank_t mds = session->mds_num; @@ -4896,7 +4910,7 @@ void Client::handle_cap_export(MetaSession *session, Inode *in, const MClientCap } } -void Client::handle_cap_trunc(MetaSession *session, Inode *in, const MClientCaps::const_ref& m) +void Client::handle_cap_trunc(MetaSession *session, Inode *in, const MConstRef& m) { mds_rank_t mds = session->mds_num; ceph_assert(in->caps.count(mds)); @@ -4912,7 +4926,7 @@ void Client::handle_cap_trunc(MetaSession *session, Inode *in, const MClientCaps m->get_truncate_seq(), m->get_truncate_size()); } -void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m) +void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, const MConstRef& m) { ceph_tid_t flush_ack_tid = m->get_client_tid(); int dirty = m->get_dirty(); @@ -4976,7 +4990,7 @@ void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, con } -void Client::handle_cap_flushsnap_ack(MetaSession *session, Inode *in, const MClientCaps::const_ref& m) +void Client::handle_cap_flushsnap_ack(MetaSession *session, Inode *in, const MConstRef& m) { mds_rank_t mds = session->mds_num; ceph_assert(in->caps.count(mds)); @@ -5091,7 +5105,7 @@ void Client::_try_to_trim_inode(Inode *in, bool sched_inval) } } -void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m) +void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const MConstRef& m) { mds_rank_t mds = session->mds_num; int used = get_caps_used(in); @@ -5692,7 +5706,7 @@ int Client::mds_command( return 0; } -void Client::handle_command_reply(const MCommandReply::const_ref& m) +void Client::handle_command_reply(const MConstRef& m) { ceph_tid_t const tid = m->get_tid(); @@ -14363,7 +14377,7 @@ void Client::finish_reclaim() metadata.erase(it); } -void Client::handle_client_reclaim_reply(const MClientReclaimReply::const_ref& reply) +void Client::handle_client_reclaim_reply(const MConstRef& reply) { mds_rank_t from = mds_rank_t(reply->get_source().num()); ldout(cct, 10) << __func__ << " " << *reply << " from mds." << from << dendl; diff --git a/src/client/Client.h b/src/client/Client.h index 4baa931c9cc82..6c4b8b3876a9c 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -31,24 +31,10 @@ #include "include/unordered_set.h" #include "mds/mdstypes.h" #include "msg/Dispatcher.h" +#include "msg/MessageRef.h" #include "msg/Messenger.h" #include "osdc/ObjectCacher.h" -#include "messages/MClientCaps.h" -#include "messages/MClientLease.h" -#include "messages/MClientQuota.h" -#include "messages/MClientReclaimReply.h" -#include "messages/MClientReply.h" -#include "messages/MClientRequest.h" -#include "messages/MClientRequestForward.h" -#include "messages/MClientSession.h" -#include "messages/MClientSnap.h" -#include "messages/MCommandReply.h" -#include "messages/MFSMap.h" -#include "messages/MFSMapUser.h" -#include "messages/MMDSMap.h" -#include "messages/MOSDMap.h" - #include "InodeRef.h" #include "MetaSession.h" #include "UserPerm.h" @@ -645,12 +631,12 @@ public: virtual void shutdown(); // messaging - void handle_mds_map(const MMDSMap::const_ref& m); - void handle_fs_map(const MFSMap::const_ref& m); - void handle_fs_map_user(const MFSMapUser::const_ref& m); - void handle_osd_map(const MOSDMap::const_ref& m); + void handle_mds_map(const MConstRef& m); + void handle_fs_map(const MConstRef& m); + void handle_fs_map_user(const MConstRef& m); + void handle_osd_map(const MConstRef& m); - void handle_lease(const MClientLease::const_ref& m); + void handle_lease(const MConstRef& m); // inline data int uninline_data(Inode *in, Context *onfinish); @@ -676,15 +662,15 @@ public: void maybe_update_snaprealm(SnapRealm *realm, snapid_t snap_created, snapid_t snap_highwater, vector& snaps); - void handle_quota(const MClientQuota::const_ref& m); - void handle_snap(const MClientSnap::const_ref& m); - void handle_caps(const MClientCaps::const_ref& m); - void handle_cap_import(MetaSession *session, Inode *in, const MClientCaps::const_ref& m); - void handle_cap_export(MetaSession *session, Inode *in, const MClientCaps::const_ref& m); - void handle_cap_trunc(MetaSession *session, Inode *in, const MClientCaps::const_ref& m); - void handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m); - void handle_cap_flushsnap_ack(MetaSession *session, Inode *in, const MClientCaps::const_ref& m); - void handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m); + void handle_quota(const MConstRef& m); + void handle_snap(const MConstRef& m); + void handle_caps(const MConstRef& m); + void handle_cap_import(MetaSession *session, Inode *in, const MConstRef& m); + void handle_cap_export(MetaSession *session, Inode *in, const MConstRef& m); + void handle_cap_trunc(MetaSession *session, Inode *in, const MConstRef& m); + void handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, const MConstRef& m); + 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, @@ -781,7 +767,7 @@ protected: void set_cap_epoch_barrier(epoch_t e); - void handle_command_reply(const MCommandReply::const_ref& m); + void handle_command_reply(const MConstRef& m); int fetch_fsmap(bool user); int resolve_mds( const std::string &mds_spec, @@ -797,7 +783,7 @@ protected: void _closed_mds_session(MetaSession *s); bool _any_stale_sessions() const; void _kick_stale_sessions(); - void handle_client_session(const MClientSession::const_ref& m); + void handle_client_session(const MConstRef& m); void send_reconnect(MetaSession *s); void resend_unsafe_requests(MetaSession *s); void wait_unsafe_requests(); @@ -813,7 +799,7 @@ protected: void put_request(MetaRequest *request); void unregister_request(MetaRequest *request); - int verify_reply_trace(int r, MetaRequest *request, const MClientReply::const_ref& reply, + int verify_reply_trace(int r, MetaRequest *request, const MConstRef& reply, InodeRef *ptarget, bool *pcreated, const UserPerm& perms); void encode_cap_releases(MetaRequest *request, mds_rank_t mds); @@ -826,11 +812,11 @@ protected: void connect_mds_targets(mds_rank_t mds); void send_request(MetaRequest *request, MetaSession *session, bool drop_cap_releases=false); - MClientRequest::ref build_client_request(MetaRequest *request); + MRef build_client_request(MetaRequest *request); void kick_requests(MetaSession *session); void kick_requests_closed(MetaSession *session); - void handle_client_request_forward(const MClientRequestForward::const_ref& reply); - void handle_client_reply(const MClientReply::const_ref& reply); + void handle_client_request_forward(const MConstRef& reply); + void handle_client_reply(const MConstRef& reply); bool is_dir_operation(MetaRequest *request); // fake inode number for 32-bits ino_t @@ -932,7 +918,7 @@ protected: void dump_status(Formatter *f); // debug - bool ms_dispatch2(const Message::ref &m) override; + bool ms_dispatch2(const MessageRef& m) override; void ms_handle_connect(Connection *con) override; bool ms_handle_reset(Connection *con) override; @@ -952,7 +938,7 @@ protected: int check_pool_perm(Inode *in, int need); - void handle_client_reclaim_reply(const MClientReclaimReply::const_ref& reply); + void handle_client_reclaim_reply(const MConstRef& reply); /** * Call this when an OSDMap is seen with a full flag (global or per pool) diff --git a/src/messages/MClientCaps.h b/src/messages/MClientCaps.h index f9c528c97ecfc..fa069f1889431 100644 --- a/src/messages/MClientCaps.h +++ b/src/messages/MClientCaps.h @@ -16,6 +16,7 @@ #define CEPH_MCLIENTCAPS_H #include "msg/Message.h" +#include "mds/mdstypes.h" #include "include/ceph_features.h" class MClientCaps : public MessageInstance { diff --git a/src/msg/MessageRef.h b/src/msg/MessageRef.h index 6dac3b8657e7d..c2bd3152ddfc3 100644 --- a/src/msg/MessageRef.h +++ b/src/msg/MessageRef.h @@ -17,9 +17,170 @@ #include -class Message; +template +using MRef = boost::intrusive_ptr; +template +using MConstRef = boost::intrusive_ptr; -typedef boost::intrusive_ptr MessageRef; -typedef boost::intrusive_ptr MessageConstRef; +using MessageRef = MRef; +using MessageConstRef = MConstRef; + +/* cd src/messages/ && for f in *; do printf 'class '; basename "$f" .h | tr -d '\n'; printf ';\n'; done >> ../msg/MessageRef.h */ + +class MAuth; +class MAuthReply; +class MBackfillReserve; +class MCacheExpire; +class MClientCapRelease; +class MClientCaps; +class MClientLease; +class MClientQuota; +class MClientReclaim; +class MClientReclaimReply; +class MClientReconnect; +class MClientReply; +class MClientRequestForward; +class MClientRequest; +class MClientSession; +class MClientSnap; +class MCommand; +class MCommandReply; +class MConfig; +class MDataPing; +class MDentryLink; +class MDentryUnlink; +class MDirUpdate; +class MDiscover; +class MDiscoverReply; +class MExportCapsAck; +class MExportCaps; +class MExportDirAck; +class MExportDirCancel; +class MExportDirDiscoverAck; +class MExportDirDiscover; +class MExportDirFinish; +class MExportDir; +class MExportDirNotifyAck; +class MExportDirNotify; +class MExportDirPrepAck; +class MExportDirPrep; +class MForward; +class MFSMap; +class MFSMapUser; +class MGatherCaps; +class MGenericMessage; +class MGetConfig; +class MGetPoolStats; +class MGetPoolStatsReply; +class MHeartbeat; +class MInodeFileCaps; +class MLock; +class MLogAck; +class MLog; +class MMDSBeacon; +class MMDSCacheRejoin; +class MMDSFindIno; +class MMDSFindInoReply; +class MMDSFragmentNotifyAck; +class MMDSFragmentNotify; +class MMDSLoadTargets; +class MMDSMap; +class MMDSOpenIno; +class MMDSOpenInoReply; +class MMDSResolveAck; +class MMDSResolve; +class MMDSSlaveRequest; +class MMDSSnapUpdate; +class MMDSTableRequest; +class MMgrBeacon; +class MMgrClose; +class MMgrConfigure; +class MMgrDigest; +class MMgrMap; +class MMgrOpen; +class MMgrReport; +class MMonCommandAck; +class MMonCommand; +class MMonElection; +class MMonGetMap; +class MMonGetOSDMap; +class MMonGetVersion; +class MMonGetVersionReply; +class MMonGlobalID; +class MMonHealthChecks; +class MMonHealth; +class MMonJoin; +class MMonMap; +class MMonMetadata; +class MMonMgrReport; +class MMonPaxos; +class MMonProbe; +class MMonQuorumService; +class MMonScrub; +class MMonSubscribeAck; +class MMonSubscribe; +class MMonSync; +class MNop; +class MOSDAlive; +class MOSDBackoff; +class MOSDBeacon; +class MOSDBoot; +class MOSDECSubOpRead; +class MOSDECSubOpReadReply; +class MOSDECSubOpWrite; +class MOSDECSubOpWriteReply; +class MOSDFailure; +class MOSDFastDispatchOp; +class MOSDForceRecovery; +class MOSDFull; +class MOSDMap; +class MOSDMarkMeDown; +class MOSDOp; +class MOSDOpReply; +class MOSDPeeringOp; +class MOSDPGBackfill; +class MOSDPGBackfillRemove; +class MOSDPGCreate2; +class MOSDPGCreated; +class MOSDPGCreate; +class MOSDPGInfo; +class MOSDPGLog; +class MOSDPGNotify; +class MOSDPGPull; +class MOSDPGPush; +class MOSDPGPushReply; +class MOSDPGQuery; +class MOSDPGReadyToMerge; +class MOSDPGRecoveryDelete; +class MOSDPGRecoveryDeleteReply; +class MOSDPGRemove; +class MOSDPGScan; +class MOSDPGTemp; +class MOSDPGTrim; +class MOSDPGUpdateLogMissing; +class MOSDPGUpdateLogMissingReply; +class MOSDPing; +class MOSDRepOp; +class MOSDRepOpReply; +class MOSDRepScrub; +class MOSDRepScrubMap; +class MOSDScrub2; +class MOSDScrub; +class MOSDScrubReserve; +class MPGStatsAck; +class MPGStats; +class MPing; +class MPoolOp; +class MPoolOpReply; +class MRecoveryReserve; +class MRemoveSnaps; +class MRoute; +class MServiceMap; +class MStatfs; +class MStatfsReply; +class MTimeCheck2; +class MTimeCheck; +class MWatchNotify; +class PaxosServiceMessage; #endif -- 2.39.5