From d2c6d44b27c32e5c63222e75abc4161b833cc10c Mon Sep 17 00:00:00 2001 From: Mike Ryan Date: Tue, 2 Oct 2012 15:19:04 -0700 Subject: [PATCH] message: add MRecoveryReserve This message will be used to reserve and release recovery slots on replica PGs. Signed-off-by: Mike Ryan --- src/Makefile.am | 1 + src/messages/MRecoveryReserve.h | 78 +++++++++++++++++++++++++++++++++ src/msg/Message.cc | 4 ++ src/msg/Message.h | 3 ++ 4 files changed, 86 insertions(+) create mode 100644 src/messages/MRecoveryReserve.h diff --git a/src/Makefile.am b/src/Makefile.am index 36a4d971f98c5..e24df4bdcfd73 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1720,6 +1720,7 @@ noinst_HEADERS = \ messages/MOSDPGRemove.h\ messages/MOSDPGScan.h\ messages/MBackfillReserve.h\ + messages/MRecoveryReserve.h\ messages/MOSDPGTemp.h\ messages/MOSDPGTrim.h\ messages/MOSDPing.h\ diff --git a/src/messages/MRecoveryReserve.h b/src/messages/MRecoveryReserve.h new file mode 100644 index 0000000000000..e87d8afc87114 --- /dev/null +++ b/src/messages/MRecoveryReserve.h @@ -0,0 +1,78 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2004-2006 Sage Weil + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#ifndef CEPH_MRECOVERY_H +#define CEPH_MRECOVERY_H + +#include "msg/Message.h" + +class MRecoveryReserve : public Message { + static const int HEAD_VERSION = 1; + static const int COMPAT_VERSION = 1; +public: + pg_t pgid; + epoch_t query_epoch; + enum { + REQUEST = 0, + GRANT = 1, + RELEASE = 2, + }; + int type; + + MRecoveryReserve() + : Message(MSG_OSD_RECOVERY_RESERVE, HEAD_VERSION, COMPAT_VERSION), + query_epoch(0), type(-1) {} + MRecoveryReserve(int type, + pg_t pgid, + epoch_t query_epoch) + : Message(MSG_OSD_RECOVERY_RESERVE, HEAD_VERSION, COMPAT_VERSION), + pgid(pgid), query_epoch(query_epoch), + type(type) {} + + const char *get_type_name() const { + return "MRecoveryReserve"; + } + + void print(ostream& out) const { + out << "MRecoveryReserve "; + switch (type) { + case REQUEST: + out << "REQUEST "; + break; + case GRANT: + out << "GRANT "; + break; + case RELEASE: + out << "RELEASE "; + break; + } + out << " pgid: " << pgid << ", query_epoch: " << query_epoch; + return; + } + + void decode_payload() { + bufferlist::iterator p = payload.begin(); + ::decode(pgid, p); + ::decode(query_epoch, p); + ::decode(type, p); + } + + void encode_payload(uint64_t features) { + ::encode(pgid, payload); + ::encode(query_epoch, payload); + ::encode(type, payload); + } +}; + +#endif diff --git a/src/msg/Message.cc b/src/msg/Message.cc index 070fbac7c9882..ce1f060c09364 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -48,6 +48,7 @@ using namespace std; #include "messages/MCommand.h" #include "messages/MCommandReply.h" #include "messages/MBackfillReserve.h" +#include "messages/MRecoveryReserve.h" #include "messages/MRoute.h" #include "messages/MForward.h" @@ -330,6 +331,9 @@ Message *decode_message(CephContext *cct, ceph_msg_header& header, ceph_msg_foot case MSG_OSD_BACKFILL_RESERVE: m = new MBackfillReserve; break; + case MSG_OSD_RECOVERY_RESERVE: + m = new MRecoveryReserve; + break; case MSG_ROUTE: m = new MRoute; diff --git a/src/msg/Message.h b/src/msg/Message.h index 560ca0ca06d82..11c2cacf73c0b 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -94,6 +94,7 @@ #define MSG_COMMAND_REPLY 98 #define MSG_OSD_BACKFILL_RESERVE 99 +#define MSG_OSD_RECOVERY_RESERVE 150 // *** MDS *** @@ -101,6 +102,8 @@ #define MSG_MDS_SLAVE_REQUEST 101 #define MSG_MDS_TABLE_REQUEST 102 + // 150 already in use (MSG_OSD_RECOVERY_RESERVE) + #define MSG_MDS_RESOLVE 0x200 #define MSG_MDS_RESOLVEACK 0x201 #define MSG_MDS_CACHEREJOIN 0x202 -- 2.39.5