From 9e51c639502eff048d0606fd5aa49cae7619822d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 1 Dec 2011 20:55:05 -0800 Subject: [PATCH] osd: MOSDPGScan Message to query hash ranges of a PG. Signed-off-by: Sage Weil --- src/Makefile.am | 1 + src/messages/MOSDPGScan.h | 81 +++++++++++++++++++++++++++++++++++++++ src/msg/Message.cc | 4 ++ src/msg/Message.h | 1 + 4 files changed, 87 insertions(+) create mode 100644 src/messages/MOSDPGScan.h diff --git a/src/Makefile.am b/src/Makefile.am index 255c1f87626c0..b604fa365986c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1321,6 +1321,7 @@ noinst_HEADERS = \ messages/MOSDPGNotify.h\ messages/MOSDPGQuery.h\ messages/MOSDPGRemove.h\ + messages/MOSDPGScan.h\ messages/MOSDPGTemp.h\ messages/MOSDPGTrim.h\ messages/MOSDPing.h\ diff --git a/src/messages/MOSDPGScan.h b/src/messages/MOSDPGScan.h new file mode 100644 index 0000000000000..cc8df296d9dfa --- /dev/null +++ b/src/messages/MOSDPGScan.h @@ -0,0 +1,81 @@ +// -*- 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_MOSDPGSCAN_H +#define CEPH_MOSDPGSCAN_H + +#include "msg/Message.h" +#include "osd/osd_types.h" + +class MOSDPGScan : public Message { +public: + enum { + OP_SCAN_GET_DIGEST = 1, // just objects and versions + OP_SCAN_DIGEST = 2, // result + }; + const char *get_op_name(int o) { + switch (o) { + case OP_SCAN_GET_DIGEST: return "get_digest"; + case OP_SCAN_DIGEST: return "digest"; + default: return "???"; + } + } + + __u32 op; + epoch_t map_epoch, query_epoch; + pg_t pgid; + hobject_t begin, end; + + virtual void decode_payload(CephContext *cct) { + bufferlist::iterator p = payload.begin(); + ::decode(op, p); + ::decode(map_epoch, p); + ::decode(query_epoch, p); + ::decode(pgid, p); + ::decode(begin, p); + ::decode(end, p); + } + + virtual void encode_payload(CephContext *cct) { + ::encode(op, payload); + ::encode(map_epoch, payload); + ::encode(query_epoch, payload); + ::encode(pgid, payload); + ::encode(begin, payload); + ::encode(end, payload); + } + + MOSDPGScan() : Message(MSG_OSD_PG_SCAN) {} + MOSDPGScan(__u32 o, epoch_t e, epoch_t qe, pg_t p, hobject_t be, hobject_t en) + : Message(MSG_OSD_PG_SCAN), + op(o), + map_epoch(e), query_epoch(e), + pgid(p), + begin(be), end(en) { + } +private: + ~MOSDPGScan() {} + +public: + const char *get_type_name() { return "pg_scan"; } + void print(ostream& out) { + out << "pg_scan(" << get_op_name(op) + << " " << pgid + << " " << begin << "-" << end + << " e " << map_epoch << "/" << query_epoch + << ")"; + } +}; + +#endif diff --git a/src/msg/Message.cc b/src/msg/Message.cc index 284f7529a8102..cfdafdffc4058 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -65,6 +65,7 @@ using namespace std; #include "messages/MOSDPGMissing.h" #include "messages/MOSDScrub.h" #include "messages/MOSDRepScrub.h" +#include "messages/MOSDPGScan.h" #include "messages/MRemoveSnaps.h" @@ -353,6 +354,9 @@ Message *decode_message(CephContext *cct, ceph_msg_header& header, ceph_msg_foot case MSG_OSD_REP_SCRUB: m = new MOSDRepScrub; break; + case MSG_OSD_PG_SCAN: + m = new MOSDPGScan; + break; // auth case CEPH_MSG_AUTH: m = new MAuth; diff --git a/src/msg/Message.h b/src/msg/Message.h index 389220e98cfa0..ac31e4bf915b9 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -78,6 +78,7 @@ #define MSG_OSD_PG_MISSING 92 #define MSG_OSD_REP_SCRUB 93 +#define MSG_OSD_PG_SCAN 94 #define MSG_COMMAND 97 #define MSG_COMMAND_REPLY 98 -- 2.39.5