#include "common/config.h"
#include "common/version.h"
-// ceph stuff
-#include "messages/MClientSession.h"
-#include "messages/MClientReconnect.h"
-#include "messages/MClientRequest.h"
-#include "messages/MClientRequestForward.h"
-#include "messages/MClientReply.h"
-#include "messages/MClientCaps.h"
-#include "messages/MClientLease.h"
-#include "messages/MClientSnap.h"
-#include "messages/MClientReclaim.h"
-#include "messages/MClientReclaimReply.h"
-#include "messages/MCommandReply.h"
-#include "messages/MOSDMap.h"
-#include "messages/MClientQuota.h"
-#include "messages/MMDSMap.h"
-#include "messages/MFSMap.h"
-#include "messages/MFSMapUser.h"
-
#include "mon/MonClient.h"
+#include "messages/MClientReclaim.h"
+#include "messages/MClientReconnect.h"
+
#include "mds/flock.h"
#include "mds/cephfs_features.h"
#include "osd/OSDMap.h"
*/
void Client::insert_readdir_results(MetaRequest *request, MetaSession *session, Inode *diri) {
- MClientReply *reply = request->reply;
+ auto& reply = request->reply;
ConnectionRef con = request->reply->get_connection();
uint64_t features;
if(session->mds_features.test(CEPHFS_FEATURE_REPLY_ENCODING)) {
*/
Inode* Client::insert_trace(MetaRequest *request, MetaSession *session)
{
- MClientReply *reply = request->reply;
+ auto& reply = request->reply;
int op = request->get_op();
ldout(cct, 10) << "insert_trace from " << request->sent_stamp << " mds." << session->mds_num
}
int Client::verify_reply_trace(int r,
- MetaRequest *request, MClientReply *reply,
+ MetaRequest *request, const MClientReply::const_ref& reply,
InodeRef *ptarget, bool *pcreated,
const UserPerm& perms)
{
bool got_created_ino = false;
ceph::unordered_map<vinodeno_t, Inode*>::iterator p;
- extra_bl.claim(reply->get_extra_bl());
+ extra_bl = reply->get_extra_bl();
if (extra_bl.length() >= 8) {
// if the extra bufferlist has a buffer, we assume its the created inode
// and that this request to create succeeded in actually creating
}
// got it!
- MClientReply *reply = request->reply;
- request->reply = NULL;
+ auto reply = std::move(request->reply);
r = reply->get_result();
if (r >= 0)
request->success = true;
r = verify_reply_trace(r, request, reply, ptarget, pcreated, perms);
if (pdirbl)
- pdirbl->claim(reply->get_extra_bl());
+ *pdirbl = reply->get_extra_bl();
// -- log times --
utime_t lat = ceph_clock_now();
logger->tinc(l_c_reply, lat);
put_request(request);
-
- reply->put();
return r;
}
mds, drop, unless, 1);
if (released && dn->lease_mds == mds) {
ldout(cct, 25) << "preemptively releasing dn to mds" << dendl;
- MClientRequest::Release& rel = req->cap_releases.back();
+ auto& rel = req->cap_releases.back();
rel.item.dname_len = dn->name.length();
rel.item.dname_seq = dn->lease_seq;
rel.dname = dn->name;
auto m = MClientSession::create(CEPH_SESSION_REQUEST_OPEN);
m->metadata = metadata;
m->supported_features = feature_bitset_t(CEPHFS_FEATURES_CLIENT_SUPPORTED);
- session->con->send_message2(m);
+ session->con->send_message2(std::move(m));
return session;
}
mds_sessions.erase(s->mds_num);
}
-void Client::handle_client_session(MClientSession *m)
+void Client::handle_client_session(const MClientSession::const_ref& m)
{
mds_rank_t from = mds_rank_t(m->get_source().num());
ldout(cct, 10) << __func__ << " " << *m << " from mds." << from << dendl;
MetaSession *session = _get_mds_session(from, m->get_connection().get());
if (!session) {
ldout(cct, 10) << " discarding session message from sessionless mds " << m->get_source_inst() << dendl;
- m->put();
return;
}
default:
ceph_abort();
}
-
- m->put();
}
bool Client::_any_stale_sessions() const
mds_rank_t mds = session->mds_num;
ldout(cct, 10) << __func__ << " rebuilding request " << request->get_tid()
<< " for mds." << mds << dendl;
- MClientRequest *r = build_client_request(request);
+ auto r = build_client_request(request);
if (request->dentry()) {
r->set_dentry_wanted();
}
session->requests.push_back(&request->item);
ldout(cct, 10) << __func__ << " " << *r << " to mds." << mds << dendl;
- session->con->send_message(r);
+ session->con->send_message2(std::move(r));
}
-MClientRequest* Client::build_client_request(MetaRequest *request)
+MClientRequest::ref Client::build_client_request(MetaRequest *request)
{
auto req = MClientRequest::create(request->get_op());
req->set_tid(request->tid);
const gid_t *_gids;
int gid_count = request->perms.get_gids(&_gids);
req->set_gid_list(gid_count, _gids);
- return req.detach();
+ return req;
}
-void Client::handle_client_request_forward(MClientRequestForward *fwd)
+void Client::handle_client_request_forward(const MClientRequestForward::const_ref& fwd)
{
mds_rank_t mds = mds_rank_t(fwd->get_source().num());
MetaSession *session = _get_mds_session(mds, fwd->get_connection().get());
if (!session) {
- fwd->put();
return;
}
ceph_tid_t tid = fwd->get_tid();
if (mds_requests.count(tid) == 0) {
ldout(cct, 10) << __func__ << " no pending request on tid " << tid << dendl;
- fwd->put();
return;
}
request->num_fwd = fwd->get_num_fwd();
request->resend_mds = fwd->get_dest_mds();
request->caller_cond->Signal();
-
- fwd->put();
}
bool Client::is_dir_operation(MetaRequest *req)
return false;
}
-void Client::handle_client_reply(MClientReply *reply)
+void Client::handle_client_reply(const MClientReply::const_ref& reply)
{
mds_rank_t mds_num = mds_rank_t(reply->get_source().num());
MetaSession *session = _get_mds_session(mds_num, reply->get_connection().get());
if (!session) {
- reply->put();
return;
}
if (mds_requests.count(tid) == 0) {
lderr(cct) << __func__ << " no pending request on tid " << tid
<< " safe is:" << is_safe << dendl;
- reply->put();
return;
}
MetaRequest *request = mds_requests.at(tid);
//duplicate response
ldout(cct, 0) << "got a duplicate reply on tid " << tid << " from mds "
<< mds_num << " safe:" << is_safe << dendl;
- reply->put();
return;
}
ldout(cct, 20) << "have to return ESTALE" << dendl;
} else {
request->caller_cond->Signal();
- reply->put();
return;
}
}
- ceph_assert(request->reply == NULL);
+ ceph_assert(!request->reply);
request->reply = reply;
insert_trace(request, session);
}
}
-void Client::handle_osd_map(MOSDMap *m)
+void Client::handle_osd_map(const MOSDMap::const_ref& m)
{
std::set<entity_addr_t> new_blacklists;
objecter->consume_blacklist_events(&new_blacklists);
objecter->maybe_request_map();
}
}
-
- m->put();
}
// incoming messages
-bool Client::ms_dispatch(Message *m)
+bool Client::ms_dispatch2(const Message::ref &m)
{
std::lock_guard l(client_lock);
if (!initialized) {
ldout(cct, 10) << "inactive, discarding " << *m << dendl;
- m->put();
return true;
}
switch (m->get_type()) {
// mounting and mds sessions
case CEPH_MSG_MDS_MAP:
- handle_mds_map(static_cast<MMDSMap*>(m));
+ handle_mds_map(MMDSMap::msgref_cast(m));
break;
case CEPH_MSG_FS_MAP:
- handle_fs_map(static_cast<MFSMap*>(m));
+ handle_fs_map(MFSMap::msgref_cast(m));
break;
case CEPH_MSG_FS_MAP_USER:
- handle_fs_map_user(static_cast<MFSMapUser*>(m));
+ handle_fs_map_user(MFSMapUser::msgref_cast(m));
break;
case CEPH_MSG_CLIENT_SESSION:
- handle_client_session(static_cast<MClientSession*>(m));
+ handle_client_session(MClientSession::msgref_cast(m));
break;
case CEPH_MSG_OSD_MAP:
- handle_osd_map(static_cast<MOSDMap*>(m));
+ handle_osd_map(MOSDMap::msgref_cast(m));
break;
// requests
case CEPH_MSG_CLIENT_REQUEST_FORWARD:
- handle_client_request_forward(static_cast<MClientRequestForward*>(m));
+ handle_client_request_forward(MClientRequestForward::msgref_cast(m));
break;
case CEPH_MSG_CLIENT_REPLY:
- handle_client_reply(static_cast<MClientReply*>(m));
+ handle_client_reply(MClientReply::msgref_cast(m));
break;
// reclaim reply
case CEPH_MSG_CLIENT_RECLAIM_REPLY:
- handle_client_reclaim_reply(static_cast<MClientReclaimReply*>(m));
+ handle_client_reclaim_reply(MClientReclaimReply::msgref_cast(m));
break;
case CEPH_MSG_CLIENT_SNAP:
- handle_snap(static_cast<MClientSnap*>(m));
+ handle_snap(MClientSnap::msgref_cast(m));
break;
case CEPH_MSG_CLIENT_CAPS:
- handle_caps(static_cast<MClientCaps*>(m));
+ handle_caps(MClientCaps::msgref_cast(m));
break;
case CEPH_MSG_CLIENT_LEASE:
- handle_lease(static_cast<MClientLease*>(m));
+ handle_lease(MClientLease::msgref_cast(m));
break;
case MSG_COMMAND_REPLY:
if (m->get_source().type() == CEPH_ENTITY_TYPE_MDS) {
- handle_command_reply(static_cast<MCommandReply*>(m));
+ handle_command_reply(MCommandReply::msgref_cast(m));
} else {
return false;
}
break;
case CEPH_MSG_CLIENT_QUOTA:
- handle_quota(static_cast<MClientQuota*>(m));
+ handle_quota(MClientQuota::msgref_cast(m));
break;
default:
return true;
}
-void Client::handle_fs_map(MFSMap *m)
+void Client::handle_fs_map(const MFSMap::const_ref& m)
{
fsmap.reset(new FSMap(m->get_fsmap()));
- m->put();
signal_cond_list(waiting_for_fsmap);
monclient->sub_got("fsmap", fsmap->get_epoch());
}
-void Client::handle_fs_map_user(MFSMapUser *m)
+void Client::handle_fs_map_user(const MFSMapUser::const_ref& m)
{
fsmap_user.reset(new FSMapUser);
*fsmap_user = m->get_fsmap();
- m->put();
monclient->sub_got("fsmap.user", fsmap_user->get_epoch());
signal_cond_list(waiting_for_fsmap);
}
-void Client::handle_mds_map(MMDSMap* m)
+void Client::handle_mds_map(const MMDSMap::const_ref& m)
{
mds_gid_t old_inc, new_inc;
if (m->get_epoch() <= mdsmap->get_epoch()) {
ldout(cct, 1) << __func__ << " epoch " << m->get_epoch()
<< " is identical to or older than our "
<< mdsmap->get_epoch() << dendl;
- m->put();
return;
}
// kick any waiting threads
signal_cond_list(waiting_for_mdsmap);
- m->put();
-
monclient->sub_got("mdsmap", mdsmap->get_epoch());
}
//make sure unsafe requests get saved
resend_unsafe_requests(session);
- MClientReconnect *m = new MClientReconnect;
+ auto m = MClientReconnect::create();
// i have an open session.
ceph::unordered_set<inodeno_t> did_snaprealm;
early_kick_flushing_caps(session);
- session->con->send_message(m);
+ session->con->send_message2(std::move(m));
mount_cond.Signal();
}
}
-void Client::handle_lease(MClientLease *m)
+void Client::handle_lease(const MClientLease::const_ref& m)
{
ldout(cct, 10) << __func__ << " " << *m << dendl;
mds_rank_t mds = mds_rank_t(m->get_source().num());
MetaSession *session = _get_mds_session(mds, m->get_connection().get());
if (!session) {
- m->put();
return;
}
revoke:
{
auto reply = MClientLease::create(CEPH_MDS_LEASE_RELEASE, seq, m->get_mask(), m->get_ino(), m->get_first(), m->get_last(), m->dname);
- m->get_connection()->send_message2(reply);
+ m->get_connection()->send_message2(std::move(reply));
}
- m->put();
}
void Client::put_inode(Inode *in, int n)
if (!session->flushing_caps_tids.empty())
m->set_oldest_flush_tid(*session->flushing_caps_tids.begin());
- session->con->send_message2(m);
+ session->con->send_message2(std::move(m));
}
static bool is_max_size_approaching(Inode *in)
ceph_assert(!session->flushing_caps_tids.empty());
m->set_oldest_flush_tid(*session->flushing_caps_tids.begin());
- session->con->send_message2(m);
+ session->con->send_message2(std::move(m));
}
}
}
-void Client::update_snap_trace(bufferlist& bl, SnapRealm **realm_ret, bool flush)
+void Client::update_snap_trace(const bufferlist& bl, SnapRealm **realm_ret, bool flush)
{
SnapRealm *first_realm = NULL;
ldout(cct, 10) << __func__ << " len " << bl.length() << dendl;
put_snap_realm(first_realm);
}
-void Client::handle_snap(MClientSnap *m)
+void Client::handle_snap(const MClientSnap::const_ref& m)
{
ldout(cct, 10) << __func__ << " " << *m << dendl;
mds_rank_t mds = mds_rank_t(m->get_source().num());
MetaSession *session = _get_mds_session(mds, m->get_connection().get());
if (!session) {
- m->put();
return;
}
// flush, then move, ino's.
realm = get_snap_realm(info.ino());
ldout(cct, 10) << " splitting off " << *realm << dendl;
- for (vector<inodeno_t>::iterator p = m->split_inos.begin();
- p != m->split_inos.end();
- ++p) {
- vinodeno_t vino(*p, CEPH_NOSNAP);
+ for (auto& ino : m->split_inos) {
+ vinodeno_t vino(ino, CEPH_NOSNAP);
if (inode_map.count(vino)) {
Inode *in = inode_map[vino];
if (!in->snaprealm || in->snaprealm == realm)
}
// move child snaprealms, too
- for (vector<inodeno_t>::iterator p = m->split_realms.begin();
- p != m->split_realms.end();
- ++p) {
- ldout(cct, 10) << "adjusting snaprealm " << *p << " parent" << dendl;
- SnapRealm *child = get_snap_realm_maybe(*p);
+ for (auto& child_realm : m->split_realms) {
+ ldout(cct, 10) << "adjusting snaprealm " << child_realm << " parent" << dendl;
+ SnapRealm *child = get_snap_realm_maybe(child_realm);
if (!child)
continue;
adjust_realm_parent(child, realm->ino);
}
put_snap_realm(realm);
}
-
- m->put();
}
-void Client::handle_quota(MClientQuota *m)
+void Client::handle_quota(const MClientQuota::const_ref& m)
{
mds_rank_t mds = mds_rank_t(m->get_source().num());
MetaSession *session = _get_mds_session(mds, m->get_connection().get());
if (!session) {
- m->put();
return;
}
in->rstat = m->rstat;
}
}
-
- m->put();
}
-void Client::handle_caps(MClientCaps *m)
+void Client::handle_caps(const MClientCaps::const_ref& m)
{
mds_rank_t mds = mds_rank_t(m->get_source().num());
MetaSession *session = _get_mds_session(mds, m->get_connection().get());
if (!session) {
- m->put();
return;
}
} else {
ldout(cct, 5) << __func__ << " don't have vino " << vino << ", dropping" << dendl;
}
- m->put();
// in case the mds is waiting on e.g. a revocation
flush_cap_releases();
case CEPH_CAP_OP_REVOKE:
case CEPH_CAP_OP_GRANT: return handle_cap_grant(session, in, &cap, m);
case CEPH_CAP_OP_FLUSH_ACK: return handle_cap_flush_ack(session, in, &cap, m);
- default:
- m->put();
}
} else {
ldout(cct, 5) << __func__ << " don't have " << *in << " cap on mds." << mds << dendl;
- m->put();
return;
}
}
-void Client::handle_cap_import(MetaSession *session, Inode *in, MClientCaps *m)
+void Client::handle_cap_import(MetaSession *session, Inode *in, const MClientCaps::const_ref& m)
{
mds_rank_t mds = session->mds_num;
}
}
-void Client::handle_cap_export(MetaSession *session, Inode *in, MClientCaps *m)
+void Client::handle_cap_export(MetaSession *session, Inode *in, const MClientCaps::const_ref& m)
{
mds_rank_t mds = session->mds_num;
remove_cap(&cap, false);
}
}
-
- m->put();
}
-void Client::handle_cap_trunc(MetaSession *session, Inode *in, MClientCaps *m)
+void Client::handle_cap_trunc(MetaSession *session, Inode *in, const MClientCaps::const_ref& m)
{
mds_rank_t mds = session->mds_num;
ceph_assert(in->caps.count(mds));
issued |= in->caps_dirty();
update_inode_file_size(in, issued, m->get_size(),
m->get_truncate_seq(), m->get_truncate_size());
- m->put();
}
-void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, MClientCaps *m)
+void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m)
{
ceph_tid_t flush_ack_tid = m->get_client_tid();
int dirty = m->get_dirty();
put_inode(in);
}
}
-
- m->put();
}
-void Client::handle_cap_flushsnap_ack(MetaSession *session, Inode *in, MClientCaps *m)
+void Client::handle_cap_flushsnap_ack(MetaSession *session, Inode *in, const MClientCaps::const_ref& m)
{
mds_rank_t mds = session->mds_num;
ceph_assert(in->caps.count(mds));
<< " on " << *in << dendl;
// we may not have it if we send multiple FLUSHSNAP requests and (got multiple FLUSHEDSNAPs back)
}
-
- m->put();
}
class C_Client_DentryInvalidate : public Context {
}
}
-void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, MClientCaps *m)
+void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const MClientCaps::const_ref& m)
{
mds_rank_t mds = session->mds_num;
int used = get_caps_used(in);
// may drop inode's last ref
if (deleted_inode)
_try_to_trim_inode(in, true);
-
- m->put();
}
int Client::inode_permission(Inode *in, const UserPerm& perms, unsigned want)
<< " tid=" << op.tid << cmd << dendl;
// Construct and send MCommand
- MCommand *m = op.get_message(monclient->get_fsid());
- conn->send_message(m);
+ auto m = op.get_message(monclient->get_fsid());
+ conn->send_message2(std::move(m));
}
gather.activate();
return 0;
}
-void Client::handle_command_reply(MCommandReply *m)
+void Client::handle_command_reply(const MCommandReply::const_ref& m)
{
ceph_tid_t const tid = m->get_tid();
if (!command_table.exists(tid)) {
ldout(cct, 1) << __func__ << ": unknown tid " << tid << ", dropping" << dendl;
- m->put();
return;
}
auto &op = command_table.get_command(tid);
if (op.outbl) {
- op.outbl->claim(m->get_data());
+ *op.outbl = m->get_data();
}
if (op.outs) {
*op.outs = m->rs;
}
command_table.erase(tid);
-
- m->put();
}
// -------------------
const uint64_t features = session->con->get_features();
if (HAVE_FEATURE(features, SERVER_LUMINOUS)) {
auto m = MClientSession::create(CEPH_SESSION_REQUEST_FLUSH_MDLOG);
- session->con->send_message2(m);
+ session->con->send_message2(std::move(m));
}
}
if (cct->_conf->client_inject_release_failure) {
ldout(cct, 20) << __func__ << " injecting failure to send cap release message" << dendl;
} else {
- session.con->send_message2(session.release);
+ session.con->send_message2(std::move(session.release));
}
session.release.reset();
}
session->reclaim_state == MetaSession::RECLAIMING) {
session->reclaim_state = MetaSession::RECLAIMING;
auto m = MClientReclaim::create(uuid, flags);
- session->con->send_message2(m);
+ session->con->send_message2(std::move(m));
wait_on_list(waiting_for_reclaim);
} else if (session->reclaim_state == MetaSession::RECLAIM_FAIL) {
return reclaim_errno ? : -ENOTRECOVERABLE;
for (auto &p : mds_sessions) {
p.second.reclaim_state = MetaSession::RECLAIM_NULL;
auto m = MClientReclaim::create("", MClientReclaim::FLAG_FINISH);
- p.second.con->send_message2(m);
+ p.second.con->send_message2(std::move(m));
}
metadata["uuid"] = it->second;
metadata.erase(it);
}
-void Client::handle_client_reclaim_reply(MClientReclaimReply *reply)
+void Client::handle_client_reclaim_reply(const MClientReclaimReply::const_ref& reply)
{
mds_rank_t from = mds_rank_t(reply->get_source().num());
ldout(cct, 10) << __func__ << " " << *reply << " from mds." << from << dendl;
MetaSession *session = _get_mds_session(from, reply->get_connection().get());
if (!session) {
ldout(cct, 10) << " discarding reclaim reply from sessionless mds." << from << dendl;
- reply->put();
return;
}
}
signal_cond_list(waiting_for_reclaim);
- reply->put();
}
/**
#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"
class MonClient;
class CephContext;
-class MClientReply;
-class MClientRequest;
-class MClientSession;
-class MClientRequest;
-class MClientRequestForward;
-class MClientLease;
-class MClientCaps;
-class MClientReclaimReply;
struct DirStat;
struct LeaseStat;
virtual void shutdown();
// messaging
- void handle_mds_map(class MMDSMap *m);
- void handle_fs_map(class MFSMap *m);
- void handle_fs_map_user(class MFSMapUser *m);
- void handle_osd_map(class MOSDMap *m);
+ 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_lease(MClientLease *m);
+ void handle_lease(const MClientLease::const_ref& m);
// inline data
int uninline_data(Inode *in, Context *onfinish);
void maybe_update_snaprealm(SnapRealm *realm, snapid_t snap_created, snapid_t snap_highwater,
vector<snapid_t>& snaps);
- void handle_quota(struct MClientQuota *m);
- void handle_snap(struct MClientSnap *m);
- void handle_caps(class MClientCaps *m);
- void handle_cap_import(MetaSession *session, Inode *in, class MClientCaps *m);
- void handle_cap_export(MetaSession *session, Inode *in, class MClientCaps *m);
- void handle_cap_trunc(MetaSession *session, Inode *in, class MClientCaps *m);
- void handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, class MClientCaps *m);
- void handle_cap_flushsnap_ack(MetaSession *session, Inode *in, class MClientCaps *m);
- void handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, class MClientCaps *m);
+ 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 cap_delay_requeue(Inode *in);
void send_cap(Inode *in, MetaSession *session, Cap *cap, bool sync,
int used, int want, int retain, int flush,
void set_cap_epoch_barrier(epoch_t e);
- void handle_command_reply(MCommandReply *m);
+ void handle_command_reply(const MCommandReply::const_ref& m);
int fetch_fsmap(bool user);
int resolve_mds(
const std::string &mds_spec,
void _closed_mds_session(MetaSession *s);
bool _any_stale_sessions() const;
void _kick_stale_sessions();
- void handle_client_session(MClientSession *m);
+ void handle_client_session(const MClientSession::const_ref& m);
void send_reconnect(MetaSession *s);
void resend_unsafe_requests(MetaSession *s);
void wait_unsafe_requests();
void put_request(MetaRequest *request);
void unregister_request(MetaRequest *request);
- int verify_reply_trace(int r, MetaRequest *request, MClientReply *reply,
+ int verify_reply_trace(int r, MetaRequest *request, const MClientReply::const_ref& reply,
InodeRef *ptarget, bool *pcreated,
const UserPerm& perms);
void encode_cap_releases(MetaRequest *request, mds_rank_t mds);
void connect_mds_targets(mds_rank_t mds);
void send_request(MetaRequest *request, MetaSession *session,
bool drop_cap_releases=false);
- MClientRequest *build_client_request(MetaRequest *request);
+ MClientRequest::ref build_client_request(MetaRequest *request);
void kick_requests(MetaSession *session);
void kick_requests_closed(MetaSession *session);
- void handle_client_request_forward(MClientRequestForward *reply);
- void handle_client_reply(MClientReply *reply);
+ void handle_client_request_forward(const MClientRequestForward::const_ref& reply);
+ void handle_client_reply(const MClientReply::const_ref& reply);
bool is_dir_operation(MetaRequest *request);
// fake inode number for 32-bits ino_t
SnapRealm *get_snap_realm_maybe(inodeno_t r);
void put_snap_realm(SnapRealm *realm);
bool adjust_realm_parent(SnapRealm *realm, inodeno_t parent);
- void update_snap_trace(bufferlist& bl, SnapRealm **realm_ret, bool must_flush=true);
+ void update_snap_trace(const bufferlist& bl, SnapRealm **realm_ret, bool must_flush=true);
void invalidate_snaprealm_and_children(SnapRealm *realm);
Inode *open_snapdir(Inode *diri);
void dump_status(Formatter *f); // debug
- bool ms_dispatch(Message *m) override;
+ bool ms_dispatch2(const Message::ref &m) override;
void ms_handle_connect(Connection *con) override;
bool ms_handle_reset(Connection *con) override;
int check_pool_perm(Inode *in, int need);
- void handle_client_reclaim_reply(MClientReclaimReply *reply);
+ void handle_client_reclaim_reply(const MClientReclaimReply::const_ref& reply);
/**
* Call this when an OSDMap is seen with a full flag (global or per pool)