]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/,messages/: add MOSDPGUpdateLogMissing[Reply]
authorSamuel Just <sjust@redhat.com>
Fri, 22 Jan 2016 02:26:45 +0000 (18:26 -0800)
committerSamuel Just <sjust@redhat.com>
Thu, 25 Feb 2016 19:13:59 +0000 (11:13 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/messages/MOSDPGUpdateLogMissing.h [new file with mode: 0644]
src/messages/MOSDPGUpdateLogMissingReply.h [new file with mode: 0644]
src/messages/Makefile.am
src/msg/Message.cc
src/msg/Message.h
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

diff --git a/src/messages/MOSDPGUpdateLogMissing.h b/src/messages/MOSDPGUpdateLogMissing.h
new file mode 100644 (file)
index 0000000..35f3311
--- /dev/null
@@ -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 <sage@newdream.net>
+ *
+ * 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<pg_log_entry_t> 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<pg_log_entry_t> &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 (file)
index 0000000..d6ff140
--- /dev/null
@@ -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 <sage@newdream.net>
+ *
+ * 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
index d3f0251a81b0f5ecaae740d8467ef20564ea08c2..b6ad12fcaf062b9404019a6932a522950f92e224 100644 (file)
@@ -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 \
index c29ecefdf51329aa7a4a8e75b07c4a88a8b8a430..a8ecafcb6d009eb226e9587bb6c7d96eca34725f 100644 (file)
@@ -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;
index a79dbaa23bb31af6d4d7ced5e896594369a997d3..25b03722bcfd154d9b0279109079fb77d8c84658 100644 (file)
 
 #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 ***
index 9b05b2a7db2e4eba3116a383339bba4dd743dcc2..fc945fec2d9ebaab07ecfbbdfb36a6a073236c62 100644 (file)
@@ -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<MOSDECSubOpReadReply, MSG_OSD_EC_READ_REPLY>(op);
   case MSG_OSD_REP_SCRUB:
     return replica_op_required_epoch<MOSDRepScrub, MSG_OSD_REP_SCRUB>(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<MOSDRepScrub, MSG_OSD_REP_SCRUB>(op, osdmap);
     break;
+  case MSG_OSD_PG_UPDATE_LOG_MISSING:
+    handle_replica_op<MOSDPGUpdateLogMissing, MSG_OSD_PG_UPDATE_LOG_MISSING>(
+      op, osdmap);
+    break;
+  case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
+    handle_replica_op<MOSDPGUpdateLogMissingReply,
+                     MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY>(
+      op, osdmap);
+    break;
   default:
     assert(0);
   }
index e53fc6b640ca40339c08040a7a1e41bb7392757e..c2788d3b4511ad13cc312f05d485780eeeadd695 100644 (file)
@@ -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;
index ced7a2caf22e0256d3c99738c874536eaa234c78..0b32703037f31104c5a5083bbb1167a03a6c887a 100644 (file)
@@ -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<MOSDECSubOpReadReply, MSG_OSD_EC_READ_REPLY>(op);
   case MSG_OSD_REP_SCRUB:
     return can_discard_replica_op<MOSDRepScrub, MSG_OSD_REP_SCRUB>(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<MOSDRepScrub*>(op->get_req())->map_epoch);
+
+  case MSG_OSD_PG_UPDATE_LOG_MISSING:
+    return !have_same_or_newer_map(
+      cur_epoch,
+      static_cast<MOSDPGUpdateLogMissing*>(op->get_req())->map_epoch);
+
+  case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
+    return !have_same_or_newer_map(
+      cur_epoch,
+      static_cast<MOSDPGUpdateLogMissingReply*>(op->get_req())->map_epoch);
   }
   assert(0);
   return false;
index 394a07ce0e7bfd25fe3cd4a63b486c0153f994f8..064c7726e69737bccb4b47edd1d8cfea4d844aab 100644 (file)
@@ -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)
index b04ec26262f4facfd1bfbc1d7c713214b65b9859..53cb12ecfc3931755fdc68cfbfea3f349001709e 100644 (file)
@@ -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<ObjectContextRef>& obcs);
 
   void on_role_change();