From: Samuel Just Date: Fri, 22 Jan 2016 02:26:45 +0000 (-0800) Subject: osd/,messages/: add MOSDPGUpdateLogMissing[Reply] X-Git-Tag: v10.1.0~277^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=88ee4e7548c29c090e539b2cb6a6378014111a31;p=ceph.git osd/,messages/: add MOSDPGUpdateLogMissing[Reply] Signed-off-by: Samuel Just --- diff --git a/src/messages/MOSDPGUpdateLogMissing.h b/src/messages/MOSDPGUpdateLogMissing.h new file mode 100644 index 000000000000..35f33116e903 --- /dev/null +++ b/src/messages/MOSDPGUpdateLogMissing.h @@ -0,0 +1,82 @@ +// -*- 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_MOSDPGUPDATELOGMISSING_H +#define CEPH_MOSDPGUPDATELOGMISSING_H + +#include "msg/Message.h" + +class MOSDPGUpdateLogMissing : public Message { + + static const int HEAD_VERSION = 1; + static const int COMPAT_VERSION = 1; + + +public: + epoch_t map_epoch; + spg_t pgid; + shard_id_t from; + ceph_tid_t rep_tid; + list entries; + + epoch_t get_epoch() const { return map_epoch; } + spg_t get_pgid() const { return pgid; } + epoch_t get_query_epoch() const { return map_epoch; } + ceph_tid_t get_tid() const { return rep_tid; } + + MOSDPGUpdateLogMissing() : + Message(MSG_OSD_PG_UPDATE_LOG_MISSING, HEAD_VERSION, COMPAT_VERSION) { } + MOSDPGUpdateLogMissing( + const list &entries, + spg_t pgid, + shard_id_t from, + epoch_t epoch, + ceph_tid_t rep_tid) + : Message(MSG_OSD_PG_UPDATE_LOG_MISSING, HEAD_VERSION, COMPAT_VERSION), + map_epoch(epoch), + pgid(pgid), + from(from), + rep_tid(rep_tid), + entries(entries) {} + +private: + ~MOSDPGUpdateLogMissing() {} + +public: + const char *get_type_name() const { return "PGUpdateLogMissing"; } + void print(ostream& out) const { + out << "pg_update_log_missing(" << pgid << " epoch " << map_epoch + << " rep_tid " << rep_tid + << " entries " << entries << ")"; + } + + void encode_payload(uint64_t features) { + ::encode(map_epoch, payload); + ::encode(pgid, payload); + ::encode(from, payload); + ::encode(rep_tid, payload); + ::encode(entries, payload); + } + void decode_payload() { + bufferlist::iterator p = payload.begin(); + ::decode(map_epoch, p); + ::decode(pgid, p); + ::decode(from, p); + ::decode(rep_tid, p); + ::decode(entries, p); + } +}; + +#endif diff --git a/src/messages/MOSDPGUpdateLogMissingReply.h b/src/messages/MOSDPGUpdateLogMissingReply.h new file mode 100644 index 000000000000..d6ff1407147a --- /dev/null +++ b/src/messages/MOSDPGUpdateLogMissingReply.h @@ -0,0 +1,87 @@ +// -*- 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_MOSDPGUPDATELOGMISSINGREPLY_H +#define CEPH_MOSDPGUPDATELOGMISSINGREPLY_H + +#include "msg/Message.h" + +class MOSDPGUpdateLogMissingReply : public Message { + + static const int HEAD_VERSION = 1; + static const int COMPAT_VERSION = 1; + + +public: + epoch_t map_epoch; + spg_t pgid; + shard_id_t from; + ceph_tid_t rep_tid; + + epoch_t get_epoch() const { return map_epoch; } + spg_t get_pgid() const { return pgid; } + epoch_t get_query_epoch() const { return map_epoch; } + ceph_tid_t get_tid() const { return rep_tid; } + pg_shard_t get_from() const { + return pg_shard_t(get_source().num(), from); + } + + MOSDPGUpdateLogMissingReply() : + Message( + MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY, + HEAD_VERSION, + COMPAT_VERSION) + {} + MOSDPGUpdateLogMissingReply( + spg_t pgid, + shard_id_t from, + epoch_t epoch, + ceph_tid_t rep_tid) + : Message( + MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY, + HEAD_VERSION, + COMPAT_VERSION), + map_epoch(epoch), + pgid(pgid), + from(from), + rep_tid(rep_tid) + {} + +private: + ~MOSDPGUpdateLogMissingReply() {} + +public: + const char *get_type_name() const { return "PGUpdateLogMissingReply"; } + void print(ostream& out) const { + out << "pg_update_log_missing_reply(" << pgid << " epoch " << map_epoch + << " rep_tid " << rep_tid << ")"; + } + + void encode_payload(uint64_t features) { + ::encode(map_epoch, payload); + ::encode(pgid, payload); + ::encode(from, payload); + ::encode(rep_tid, payload); + } + void decode_payload() { + bufferlist::iterator p = payload.begin(); + ::decode(map_epoch, p); + ::decode(pgid, p); + ::decode(from, p); + ::decode(rep_tid, p); + } +}; + +#endif diff --git a/src/messages/Makefile.am b/src/messages/Makefile.am index d3f0251a81b0..b6ad12fcaf06 100644 --- a/src/messages/Makefile.am +++ b/src/messages/Makefile.am @@ -91,6 +91,8 @@ noinst_HEADERS += \ messages/MOSDPGQuery.h \ messages/MOSDPGRemove.h \ messages/MOSDPGScan.h \ + messages/MOSDPGUpdateLogMissing.h \ + messages/MOSDPGUpdateLogMissingReply.h \ messages/MOSDECSubOpWrite.h \ messages/MOSDECSubOpWriteReply.h \ messages/MOSDECSubOpRead.h \ diff --git a/src/msg/Message.cc b/src/msg/Message.cc index c29ecefdf513..a8ecafcb6d00 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -170,6 +170,9 @@ using namespace std; #include "messages/MOSDECSubOpRead.h" #include "messages/MOSDECSubOpReadReply.h" +#include "messages/MOSDPGUpdateLogMissing.h" +#include "messages/MOSDPGUpdateLogMissingReply.h" + #define DEBUGLVL 10 // debug level of output #define dout_subsys ceph_subsys_ms @@ -437,6 +440,12 @@ Message *decode_message(CephContext *cct, int crcflags, case MSG_OSD_REPOPREPLY: m = new MOSDRepOpReply(); break; + case MSG_OSD_PG_UPDATE_LOG_MISSING: + m = new MOSDPGUpdateLogMissing(); + break; + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + m = new MOSDPGUpdateLogMissingReply(); + break; case CEPH_MSG_OSD_MAP: m = new MOSDMap; diff --git a/src/msg/Message.h b/src/msg/Message.h index a79dbaa23bb3..25b03722bcfd 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -116,6 +116,8 @@ #define MSG_OSD_REPOP 112 #define MSG_OSD_REPOPREPLY 113 +#define MSG_OSD_PG_UPDATE_LOG_MISSING 114 +#define MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY 115 // *** MDS *** diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 9b05b2a7db2e..fc945fec2d9e 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -90,6 +90,8 @@ #include "messages/MOSDECSubOpWriteReply.h" #include "messages/MOSDECSubOpRead.h" #include "messages/MOSDECSubOpReadReply.h" +#include "messages/MOSDPGUpdateLogMissing.h" +#include "messages/MOSDPGUpdateLogMissingReply.h" #include "messages/MOSDAlive.h" @@ -5948,6 +5950,14 @@ epoch_t op_required_epoch(OpRequestRef op) return replica_op_required_epoch(op); case MSG_OSD_REP_SCRUB: return replica_op_required_epoch(op); + case MSG_OSD_PG_UPDATE_LOG_MISSING: + return replica_op_required_epoch< + MOSDPGUpdateLogMissing, MSG_OSD_PG_UPDATE_LOG_MISSING>( + op); + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + return replica_op_required_epoch< + MOSDPGUpdateLogMissingReply, MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY>( + op); default: assert(0); return 0; @@ -6064,6 +6074,15 @@ bool OSD::dispatch_op_fast(OpRequestRef& op, OSDMapRef& osdmap) case MSG_OSD_REP_SCRUB: handle_replica_op(op, osdmap); break; + case MSG_OSD_PG_UPDATE_LOG_MISSING: + handle_replica_op( + op, osdmap); + break; + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + handle_replica_op( + op, osdmap); + break; default: assert(0); } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index e53fc6b640ca..c2788d3b4511 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -2300,6 +2300,8 @@ protected: case MSG_OSD_EC_READ: case MSG_OSD_EC_READ_REPLY: case MSG_OSD_REP_SCRUB: + case MSG_OSD_PG_UPDATE_LOG_MISSING: + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: return true; default: return false; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index ced7a2caf22e..0b32703037f3 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -38,6 +38,8 @@ #include "messages/MOSDECSubOpWriteReply.h" #include "messages/MOSDECSubOpRead.h" #include "messages/MOSDECSubOpReadReply.h" +#include "messages/MOSDPGUpdateLogMissing.h" +#include "messages/MOSDPGUpdateLogMissingReply.h" #include "messages/MOSDSubOp.h" #include "messages/MOSDRepOp.h" @@ -5314,6 +5316,12 @@ bool PG::can_discard_request(OpRequestRef& op) return can_discard_replica_op(op); case MSG_OSD_REP_SCRUB: return can_discard_replica_op(op); + case MSG_OSD_PG_UPDATE_LOG_MISSING: + return can_discard_replica_op< + MOSDPGUpdateLogMissing, MSG_OSD_PG_UPDATE_LOG_MISSING>(op); + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + return can_discard_replica_op< + MOSDPGUpdateLogMissingReply, MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY>(op); case MSG_OSD_PG_SCAN: return can_discard_scan(op); @@ -5400,6 +5408,16 @@ bool PG::op_must_wait_for_map(epoch_t cur_epoch, OpRequestRef& op) return !have_same_or_newer_map( cur_epoch, static_cast(op->get_req())->map_epoch); + + case MSG_OSD_PG_UPDATE_LOG_MISSING: + return !have_same_or_newer_map( + cur_epoch, + static_cast(op->get_req())->map_epoch); + + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + return !have_same_or_newer_map( + cur_epoch, + static_cast(op->get_req())->map_epoch); } assert(0); return false; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 394a07ce0e7b..064c7726e697 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -47,6 +47,8 @@ #include "messages/MOSDPGPush.h" #include "messages/MOSDPGPull.h" #include "messages/MOSDPGPushReply.h" +#include "messages/MOSDPGUpdateLogMissing.h" +#include "messages/MOSDPGUpdateLogMissingReply.h" #include "Watch.h" @@ -1490,6 +1492,14 @@ void ReplicatedPG::do_request( replica_scrub(op, handle); break; + case MSG_OSD_PG_UPDATE_LOG_MISSING: + do_update_log_missing(op); + break; + + case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: + do_update_log_missing_reply(op); + break; + default: assert(0 == "bad message type in do_request"); } @@ -9464,6 +9474,14 @@ struct C_PG_MarkUnfoundLost : public Context { } }; +void ReplicatedPG::do_update_log_missing(OpRequestRef &op) +{ +} + +void ReplicatedPG::do_update_log_missing_reply(OpRequestRef &op) +{ +} + /* Mark all unfound objects as lost. */ void ReplicatedPG::mark_all_unfound_lost(int what) diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index b04ec26262f4..53cb12ecfc39 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -1588,6 +1588,12 @@ public: ObjectContextRef mark_object_lost(ObjectStore::Transaction *t, const hobject_t& oid, eversion_t version, utime_t mtime, int what); + + void do_update_log_missing( + OpRequestRef &op); + + void do_update_log_missing_reply( + OpRequestRef &op); void _finish_mark_all_unfound_lost(list& obcs); void on_role_change();