mirror of
https://github.com/ceph/ceph
synced 2025-02-09 03:49:38 +00:00
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@2100 29311d96-e01e-0410-9327-a35deaab8ce9
375 lines
7.4 KiB
C++
375 lines
7.4 KiB
C++
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
|
|
// vim: ts=8 sw=2 smarttab
|
|
|
|
#include <cassert>
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
#include "include/types.h"
|
|
|
|
#include "Message.h"
|
|
|
|
#include "messages/MGenericMessage.h"
|
|
|
|
#include "messages/MPGStats.h"
|
|
|
|
#include "messages/MStatfs.h"
|
|
#include "messages/MStatfsReply.h"
|
|
|
|
#include "messages/MMonCommand.h"
|
|
#include "messages/MMonCommandAck.h"
|
|
#include "messages/MMonPaxos.h"
|
|
|
|
#include "messages/MMonElection.h"
|
|
|
|
#include "messages/MPing.h"
|
|
#include "messages/MPingAck.h"
|
|
|
|
#include "messages/MOSDBoot.h"
|
|
#include "messages/MOSDIn.h"
|
|
#include "messages/MOSDOut.h"
|
|
#include "messages/MOSDFailure.h"
|
|
#include "messages/MOSDPing.h"
|
|
#include "messages/MOSDOp.h"
|
|
#include "messages/MOSDOpReply.h"
|
|
#include "messages/MOSDMap.h"
|
|
#include "messages/MOSDGetMap.h"
|
|
|
|
#include "messages/MOSDPGNotify.h"
|
|
#include "messages/MOSDPGQuery.h"
|
|
#include "messages/MOSDPGLog.h"
|
|
#include "messages/MOSDPGRemove.h"
|
|
#include "messages/MOSDPGActivateSet.h"
|
|
|
|
#include "messages/MMonMap.h"
|
|
|
|
#include "messages/MClientMount.h"
|
|
#include "messages/MClientUnmount.h"
|
|
#include "messages/MClientSession.h"
|
|
#include "messages/MClientReconnect.h"
|
|
#include "messages/MClientRequest.h"
|
|
#include "messages/MClientRequestForward.h"
|
|
#include "messages/MClientReply.h"
|
|
#include "messages/MClientFileCaps.h"
|
|
|
|
#include "messages/MMDSSlaveRequest.h"
|
|
|
|
#include "messages/MMDSGetMap.h"
|
|
#include "messages/MMDSMap.h"
|
|
#include "messages/MMDSBeacon.h"
|
|
#include "messages/MMDSResolve.h"
|
|
#include "messages/MMDSResolveAck.h"
|
|
#include "messages/MMDSCacheRejoin.h"
|
|
|
|
#include "messages/MDirUpdate.h"
|
|
#include "messages/MDiscover.h"
|
|
#include "messages/MDiscoverReply.h"
|
|
|
|
#include "messages/MMDSFragmentNotify.h"
|
|
|
|
#include "messages/MExportDirDiscover.h"
|
|
#include "messages/MExportDirDiscoverAck.h"
|
|
#include "messages/MExportDirCancel.h"
|
|
#include "messages/MExportDirPrep.h"
|
|
#include "messages/MExportDirPrepAck.h"
|
|
#include "messages/MExportDirWarning.h"
|
|
#include "messages/MExportDirWarningAck.h"
|
|
#include "messages/MExportDir.h"
|
|
#include "messages/MExportDirAck.h"
|
|
#include "messages/MExportDirNotify.h"
|
|
#include "messages/MExportDirNotifyAck.h"
|
|
#include "messages/MExportDirFinish.h"
|
|
|
|
#include "messages/MExportCaps.h"
|
|
#include "messages/MExportCapsAck.h"
|
|
|
|
|
|
#include "messages/MDentryUnlink.h"
|
|
|
|
#include "messages/MHeartbeat.h"
|
|
|
|
#include "messages/MAnchor.h"
|
|
|
|
//#include "messages/MInodeUpdate.h"
|
|
#include "messages/MCacheExpire.h"
|
|
#include "messages/MInodeFileCaps.h"
|
|
|
|
#include "messages/MLock.h"
|
|
|
|
#include "config.h"
|
|
|
|
#define dout(l) if (l<=g_conf.debug) *_dout << dbeginl << g_clock.now() << " MESSENGER: "
|
|
#define DEBUGLVL 10 // debug level of output
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Message *
|
|
decode_message(ceph_msg_header& env, bufferlist& front, bufferlist& data)
|
|
{
|
|
// make message
|
|
Message *m = 0;
|
|
switch(env.type) {
|
|
|
|
// -- with payload --
|
|
|
|
case MSG_PGSTATS:
|
|
m = new MPGStats;
|
|
break;
|
|
|
|
case CEPH_MSG_STATFS:
|
|
m = new MStatfs;
|
|
break;
|
|
case CEPH_MSG_STATFS_REPLY:
|
|
m = new MStatfsReply;
|
|
break;
|
|
|
|
case MSG_MON_COMMAND:
|
|
m = new MMonCommand;
|
|
break;
|
|
case MSG_MON_COMMAND_ACK:
|
|
m = new MMonCommandAck;
|
|
break;
|
|
case MSG_MON_PAXOS:
|
|
m = new MMonPaxos;
|
|
break;
|
|
|
|
case MSG_MON_ELECTION:
|
|
m = new MMonElection;
|
|
break;
|
|
|
|
case CEPH_MSG_PING:
|
|
m = new MPing();
|
|
break;
|
|
case CEPH_MSG_PING_ACK:
|
|
m = new MPingAck();
|
|
break;
|
|
|
|
case CEPH_MSG_MON_MAP:
|
|
m = new MMonMap;
|
|
break;
|
|
|
|
case MSG_OSD_BOOT:
|
|
m = new MOSDBoot();
|
|
break;
|
|
case MSG_OSD_IN:
|
|
m = new MOSDIn();
|
|
break;
|
|
case MSG_OSD_OUT:
|
|
m = new MOSDOut();
|
|
break;
|
|
case MSG_OSD_FAILURE:
|
|
m = new MOSDFailure();
|
|
break;
|
|
case MSG_OSD_PING:
|
|
m = new MOSDPing();
|
|
break;
|
|
case CEPH_MSG_OSD_OP:
|
|
m = new MOSDOp();
|
|
break;
|
|
case CEPH_MSG_OSD_OPREPLY:
|
|
m = new MOSDOpReply();
|
|
break;
|
|
|
|
case CEPH_MSG_OSD_MAP:
|
|
m = new MOSDMap();
|
|
break;
|
|
case CEPH_MSG_OSD_GETMAP:
|
|
m = new MOSDGetMap();
|
|
break;
|
|
|
|
case MSG_OSD_PG_NOTIFY:
|
|
m = new MOSDPGNotify();
|
|
break;
|
|
case MSG_OSD_PG_QUERY:
|
|
m = new MOSDPGQuery();
|
|
break;
|
|
case MSG_OSD_PG_LOG:
|
|
m = new MOSDPGLog();
|
|
break;
|
|
case MSG_OSD_PG_REMOVE:
|
|
m = new MOSDPGRemove();
|
|
break;
|
|
case MSG_OSD_PG_ACTIVATE_SET:
|
|
m = new MOSDPGActivateSet();
|
|
break;
|
|
|
|
|
|
// clients
|
|
case CEPH_MSG_CLIENT_MOUNT:
|
|
m = new MClientMount;
|
|
break;
|
|
case CEPH_MSG_CLIENT_UNMOUNT:
|
|
m = new MClientUnmount;
|
|
break;
|
|
case CEPH_MSG_CLIENT_SESSION:
|
|
m = new MClientSession;
|
|
break;
|
|
case CEPH_MSG_CLIENT_RECONNECT:
|
|
m = new MClientReconnect;
|
|
break;
|
|
case CEPH_MSG_CLIENT_REQUEST:
|
|
m = new MClientRequest;
|
|
break;
|
|
case CEPH_MSG_CLIENT_REQUEST_FORWARD:
|
|
m = new MClientRequestForward;
|
|
break;
|
|
case CEPH_MSG_CLIENT_REPLY:
|
|
m = new MClientReply;
|
|
break;
|
|
case CEPH_MSG_CLIENT_FILECAPS:
|
|
m = new MClientFileCaps;
|
|
break;
|
|
|
|
// mds
|
|
case MSG_MDS_SLAVE_REQUEST:
|
|
m = new MMDSSlaveRequest;
|
|
break;
|
|
|
|
case CEPH_MSG_MDS_GETMAP:
|
|
m = new MMDSGetMap();
|
|
break;
|
|
case CEPH_MSG_MDS_MAP:
|
|
m = new MMDSMap();
|
|
break;
|
|
case MSG_MDS_BEACON:
|
|
m = new MMDSBeacon;
|
|
break;
|
|
case MSG_MDS_RESOLVE:
|
|
m = new MMDSResolve;
|
|
break;
|
|
case MSG_MDS_RESOLVEACK:
|
|
m = new MMDSResolveAck;
|
|
break;
|
|
case MSG_MDS_CACHEREJOIN:
|
|
m = new MMDSCacheRejoin;
|
|
break;
|
|
/*
|
|
case MSG_MDS_CACHEREJOINACK:
|
|
m = new MMDSCacheRejoinAck;
|
|
break;
|
|
*/
|
|
|
|
case MSG_MDS_DIRUPDATE:
|
|
m = new MDirUpdate();
|
|
break;
|
|
|
|
case MSG_MDS_DISCOVER:
|
|
m = new MDiscover();
|
|
break;
|
|
case MSG_MDS_DISCOVERREPLY:
|
|
m = new MDiscoverReply();
|
|
break;
|
|
|
|
case MSG_MDS_FRAGMENTNOTIFY:
|
|
m = new MMDSFragmentNotify;
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRDISCOVER:
|
|
m = new MExportDirDiscover();
|
|
break;
|
|
case MSG_MDS_EXPORTDIRDISCOVERACK:
|
|
m = new MExportDirDiscoverAck();
|
|
break;
|
|
case MSG_MDS_EXPORTDIRCANCEL:
|
|
m = new MExportDirCancel();
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIR:
|
|
m = new MExportDir;
|
|
break;
|
|
case MSG_MDS_EXPORTDIRACK:
|
|
m = new MExportDirAck;
|
|
break;
|
|
case MSG_MDS_EXPORTDIRFINISH:
|
|
m = new MExportDirFinish;
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRNOTIFY:
|
|
m = new MExportDirNotify();
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRNOTIFYACK:
|
|
m = new MExportDirNotifyAck();
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRPREP:
|
|
m = new MExportDirPrep();
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRPREPACK:
|
|
m = new MExportDirPrepAck();
|
|
break;
|
|
|
|
case MSG_MDS_EXPORTDIRWARNING:
|
|
m = new MExportDirWarning;
|
|
break;
|
|
case MSG_MDS_EXPORTDIRWARNINGACK:
|
|
m = new MExportDirWarningAck;
|
|
break;
|
|
|
|
|
|
case MSG_MDS_EXPORTCAPS:
|
|
m = new MExportCaps;
|
|
break;
|
|
case MSG_MDS_EXPORTCAPSACK:
|
|
m = new MExportCapsAck;
|
|
break;
|
|
|
|
|
|
case MSG_MDS_DENTRYUNLINK:
|
|
m = new MDentryUnlink();
|
|
break;
|
|
|
|
case MSG_MDS_HEARTBEAT:
|
|
m = new MHeartbeat();
|
|
break;
|
|
|
|
case MSG_MDS_CACHEEXPIRE:
|
|
m = new MCacheExpire();
|
|
break;
|
|
|
|
case MSG_MDS_ANCHOR:
|
|
m = new MAnchor();
|
|
break;
|
|
|
|
/* case MSG_MDS_INODEUPDATE:
|
|
m = new MInodeUpdate();
|
|
break;
|
|
*/
|
|
|
|
case MSG_MDS_INODEFILECAPS:
|
|
m = new MInodeFileCaps();
|
|
break;
|
|
|
|
case MSG_MDS_LOCK:
|
|
m = new MLock();
|
|
break;
|
|
|
|
|
|
// -- simple messages without payload --
|
|
|
|
case CEPH_MSG_SHUTDOWN:
|
|
m = new MGenericMessage(env.type);
|
|
break;
|
|
|
|
default:
|
|
dout(0) << "can't decode unknown message type " << env.type << dendl;
|
|
assert(0);
|
|
}
|
|
|
|
m->set_env(env);
|
|
m->set_payload(front);
|
|
m->set_data(data);
|
|
|
|
m->decode_payload();
|
|
|
|
// done!
|
|
return m;
|
|
}
|
|
|
|
|