]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
messages: Clean up of PaxosServiceMessages, and some fixes for their users.
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 25 Jun 2009 21:51:11 +0000 (14:51 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 25 Jun 2009 21:54:06 +0000 (14:54 -0700)
27 files changed:
src/common/LogClient.cc
src/common/LogClient.h
src/mds/SnapServer.cc
src/messages/MClass.h
src/messages/MClientMount.h
src/messages/MClientUnmount.h
src/messages/MGetPoolStats.h
src/messages/MGetPoolStatsReply.h
src/messages/MLog.h
src/messages/MMDSBeacon.h
src/messages/MMDSGetMap.h
src/messages/MMonCommand.h
src/messages/MMonCommandAck.h
src/messages/MMonPaxos.h
src/messages/MOSDAlive.h
src/messages/MOSDBoot.h
src/messages/MOSDFailure.h
src/messages/MOSDGetMap.h
src/messages/MPGStats.h
src/messages/MPoolSnap.h
src/messages/MPoolSnapReply.h
src/messages/MRemoveSnaps.h
src/messages/MStatfs.h
src/mon/MDSMonitor.cc
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/OSDMonitor.cc

index 4ed48723dcdd26ff864c6cb794e8d0946727c5c8..039feb1c60df56c5aeab3b6dc521e9b35311ac01 100644 (file)
@@ -77,7 +77,7 @@ void LogClient::_send_log()
 {
   if (log_queue.empty())
     return;
-  MLog *log = new MLog(monmap->get_fsid(), log_queue, VERSION_T);
+  MLog *log = new MLog(monmap->get_fsid(), log_queue);
 
   int mon;
   if (messenger->get_myname().is_mon())
index 87e39d6f0a01279351ed8f36f61d25e3ec2958a9..caa93114917d08e6633e5082fba937230c07a6c5 100644 (file)
@@ -35,6 +35,7 @@ class LogClient : public Dispatcher {
   bool dispatch_impl(Message *m);
   bool is_synchronous;
   void _send_log();
+
  public:
 
   // -- log --
index da42c911a4ae2f207bf0c230ed86a5a440ee4a90..e4d06cc9d50c66759a285ec2e45ef4e56f448fa3 100644 (file)
@@ -248,7 +248,7 @@ void SnapServer::check_osd_map(bool force)
 
   if (!all_purge.empty()) {
     dout(10) << "requesting removal of " << all_purge << dendl;
-    MRemoveSnaps *m = new MRemoveSnaps(all_purge, VERSION_T);
+    MRemoveSnaps *m = new MRemoveSnaps(all_purge);
     int mon = mds->monmap->pick_mon();
     mds->messenger->send_message(m, mds->monmap->get_inst(mon));
   }
index b969292af17a34c215972034a619489e23c7e76e..0c105fe755572843c6a8d4100170f1f322a8696a 100644 (file)
@@ -35,7 +35,7 @@ public:
   __s32 action;
 
 
-  MClass() : PaxosServiceMessage(MSG_CLASS, 0), {}
+  MClass() : PaxosServiceMessage(MSG_CLASS, 0) {}
 #if 0
   MClass(ceph_fsid_t& f, deque<ClassLibraryIncremental>& e) :
     PaxosServiceMessage(MSG_CLASS, 0),
@@ -69,7 +69,7 @@ public:
       out << info.size() << " entries";
     if (last)
       out << "last " << last;
-    out << "v " << version << ")";
+    out << ")";
   }
 
   void encode_payload() {
index dbd8d40ce99886aecd2ac599968122ba84f4a4bb..ab7a6fe71c43a4376bf78f7fe7653f3ad6667632 100644 (file)
@@ -19,7 +19,7 @@
 
 class MClientMount : public PaxosServiceMessage {
 public:
-  MClientMount() : PaxosServiceMessage(CEPH_MSG_CLIENT_MOUNT, 0) { }
+  MClientMount() : PaxosServiceMessage(CEPH_MSG_CLIENT_MOUNT, VERSION_T) { }
 
   const char *get_type_name() { return "client_mount"; }
 
index 05a853f6dd662c3d0656989774d1828edaa94129..cb54b0d39f7c2832175658ca5140ffc8ab70af2b 100644 (file)
@@ -19,7 +19,7 @@
 
 class MClientUnmount : public PaxosServiceMessage {
 public:
-  MClientUnmount() : PaxosServiceMessage(CEPH_MSG_CLIENT_UNMOUNT, 0) { }
+  MClientUnmount() : PaxosServiceMessage(CEPH_MSG_CLIENT_UNMOUNT, VERSION_T) { }
  
   const char *get_type_name() { return "client_unmount"; }
 
index 5365416b14349339a01a4eed0eb9a7f3752522f5..47529458a611171dbc525a4f71deef7ccce6defa 100644 (file)
@@ -31,7 +31,7 @@ public:
 
   const char *get_type_name() { return "getpoolstats"; }
   void print(ostream& out) {
-    out << "getpoolstats(" << tid << " " << pools << ")";
+    out << "getpoolstats(" << tid << " " << pools << "v " << version << ")";
   }
 
   void encode_payload() {
index 1dbbbebecdcc1fcce741479dc9d3e975b2625a5f..40c38fa011fe08deb9d37f8db31b7fcf3e588167 100644 (file)
@@ -29,7 +29,7 @@ public:
 
   const char *get_type_name() { return "getpoolstats"; }
   void print(ostream& out) {
-    out << "getpoolstatsreply(" << tid << ")";
+    out << "getpoolstatsreply(" << tid << "v " << version <<  ")";
   }
 
   void encode_payload() {
index c47b75fc42e735e727468fb0549d22c74d25f4b4..d7bd6dcaea36b3b82f62298eaecb6866ebe98f97 100644 (file)
@@ -24,15 +24,15 @@ public:
   deque<LogEntry> entries;
   
   MLog() : PaxosServiceMessage(MSG_LOG, 0) {}
-  MLog(ceph_fsid_t& f, deque<LogEntry>& e, version_t v) : PaxosServiceMessage(MSG_LOG, v), fsid(f), entries(e) { }
-  MLog(ceph_fsid_t& f, version_t v) : PaxosServiceMessage(MSG_LOG, v), fsid(f) {}
+  MLog(ceph_fsid_t& f, deque<LogEntry>& e) : PaxosServiceMessage(MSG_LOG, VERSION_T), fsid(f), entries(e) { }
+  MLog(ceph_fsid_t& f) : PaxosServiceMessage(MSG_LOG, VERSION_T), fsid(f) {}
 
   const char *get_type_name() { return "log"; }
   void print(ostream& out) {
     out << "log(";
     if (entries.size())
       out << entries.size() << " entries";
-    out << "v " << version << ")";
+    out << ")";
   }
 
   void encode_payload() {
index 0c10d178a03840b9b7c3026399e8f11ff1e4203b..1025e2b835c8c2131e3939604180876ced2f04ac 100644 (file)
@@ -24,7 +24,7 @@
 class MMDSBeacon : public PaxosServiceMessage {
   ceph_fsid_t fsid;
   string name;
-  epoch_t last_epoch_seen;  // include last mdsmap epoch mds has seen to avoid race with monitor decree
+
   __u32 state;
   version_t seq;
   __s32 standby_for_rank;
@@ -33,13 +33,13 @@ class MMDSBeacon : public PaxosServiceMessage {
  public:
   MMDSBeacon() : PaxosServiceMessage(MSG_MDS_BEACON, 0) {}
   MMDSBeacon(ceph_fsid_t &f, string& n, epoch_t les, int st, version_t se) : 
-    PaxosServiceMessage(MSG_MDS_BEACON, se), 
-    fsid(f), name(n), last_epoch_seen(les), state(st), seq(se),
+    PaxosServiceMessage(MSG_MDS_BEACON, les), 
+    fsid(f), name(n), state(st), seq(se),
     standby_for_rank(-1) { }
 
   ceph_fsid_t& get_fsid() { return fsid; }
   string& get_name() { return name; }
-  epoch_t get_last_epoch_seen() { return last_epoch_seen; }
+  epoch_t get_last_epoch_seen() { return version; }
   int get_state() { return state; }
   version_t get_seq() { return seq; }
   const char *get_type_name() { return "mdsbeacon"; }
@@ -53,11 +53,10 @@ class MMDSBeacon : public PaxosServiceMessage {
     out << "mdsbeacon(" << name << " " << ceph_mds_state_name(state) 
        << " seq " << seq << "v " << version << ")";
   }
-  
+
   void encode_payload() {
     paxos_encode();
     ::encode(fsid, payload);
-    ::encode(last_epoch_seen, payload);
     ::encode(state, payload);
     ::encode(seq, payload);
     ::encode(name, payload);
@@ -68,7 +67,6 @@ class MMDSBeacon : public PaxosServiceMessage {
     bufferlist::iterator p = payload.begin();
     paxos_decode(p);
     ::decode(fsid, p);
-    ::decode(last_epoch_seen, p);
     ::decode(state, p);
     ::decode(seq, p);
     ::decode(name, p);
index 7d4f31ba0033ec298201960340b788ba0a515d75..00da930d12d3627050ff4b26f2ad35a15af627cd 100644 (file)
@@ -23,7 +23,7 @@ class MMDSGetMap : public PaxosServiceMessage {
  public:
   ceph_fsid_t fsid;
 
-  MMDSGetMap() : PaxosServiceMessage(CEPH_MSG_MDS_GETMAP, 0) {}
+  MMDSGetMap() : PaxosServiceMessage(CEPH_MSG_MDS_GETMAP, VERSION_T) {}
   MMDSGetMap(ceph_fsid_t &f, epoch_t have=0) : 
     PaxosServiceMessage(CEPH_MSG_MDS_GETMAP, have), 
     fsid(f) { }
index 2a2fc9660b946a3df2b8629ba83332e8d9d0aff9..1ba698484be1fda68d2167cc81a7e37ac354ae4b 100644 (file)
@@ -25,7 +25,7 @@ class MMonCommand : public PaxosServiceMessage {
   ceph_fsid_t fsid;
   vector<string> cmd;
 
-  MMonCommand() : PaxosServiceMessage(MSG_MON_COMMAND, 0) {}
+  MMonCommand() : PaxosServiceMessage(MSG_MON_COMMAND, VERSION_T) {}
   MMonCommand(ceph_fsid_t &f, version_t version) : 
     PaxosServiceMessage(MSG_MON_COMMAND, version),
     fsid(f) { }
@@ -37,7 +37,7 @@ class MMonCommand : public PaxosServiceMessage {
       if (i) o << ' ';
       o << cmd[i];
     }
-    o << ")";
+    o << " v " << version << ")";
   }
   
   void encode_payload() {
index a534c6de0cc4681a22cee5bb755481ce3e64c337..ff708742ebec813733bc59ed48872b5415dbc911 100644 (file)
@@ -23,14 +23,14 @@ class MMonCommandAck : public PaxosServiceMessage {
   __s32 r;
   string rs;
   
-  MMonCommandAck() : PaxosServiceMessage(MSG_MON_COMMAND_ACK, 0) {}
+  MMonCommandAck() : PaxosServiceMessage(MSG_MON_COMMAND_ACK, VERSION_T) {}
   MMonCommandAck(vector<string>& c, int _r, string s, version_t v) : 
     PaxosServiceMessage(MSG_MON_COMMAND_ACK, v),
     cmd(c), r(_r), rs(s) { }
   
   const char *get_type_name() { return "mon_command"; }
   void print(ostream& o) {
-    o << "mon_command_ack(" << cmd << "=" << r << " " << rs << ")";
+    o << "mon_command_ack(" << cmd << "=" << r << " " << rs << "v " << version << ")";
   }
   
   void encode_payload() {
index 7a06d0492b60dc1957016a76a0478c513743e824..f18083d9d05f78ea4b783ff47e563ec45cf145e0 100644 (file)
@@ -19,7 +19,7 @@
 #include "messages/PaxosServiceMessage.h"
 #include "mon/mon_types.h"
 
-class MMonPaxos : public PaxosServiceMessage {
+class MMonPaxos : public Message {
  public:
   // op types
   const static int OP_COLLECT =   1; // proposer: propose round
@@ -58,9 +58,9 @@ class MMonPaxos : public PaxosServiceMessage {
 
   map<version_t,bufferlist> values;
 
-  MMonPaxos() : PaxosServiceMessage(MSG_MON_PAXOS, 0) {}
+  MMonPaxos() : Message(MSG_MON_PAXOS) {}
   MMonPaxos(epoch_t e, int o, int mid) : 
-    PaxosServiceMessage(MSG_MON_PAXOS, e),
+    Message(MSG_MON_PAXOS),
     epoch(e),
     op(o), machine_id(mid),
     first_committed(0), last_committed(0), pn_from(0), pn(0), uncommitted_pn(0),
@@ -76,11 +76,10 @@ class MMonPaxos : public PaxosServiceMessage {
        << " pn " << pn << " opn " << uncommitted_pn;
     if (latest_version)
       out << " latest " << latest_version << " (" << latest_value.length() << " bytes)";
-    out << "v " << version << ")";
+    out <<  ")";
   }
 
   void encode_payload() {
-    paxos_encode();
     ::encode(epoch, payload);
     ::encode(op, payload);
     ::encode(machine_id, payload);
@@ -96,7 +95,6 @@ class MMonPaxos : public PaxosServiceMessage {
   }
   void decode_payload() {
     bufferlist::iterator p = payload.begin();
-    paxos_decode(p);
     ::decode(epoch, p);
     ::decode(op, p);
     ::decode(machine_id, p);
index b815d9cd5398d88d32dc75e3e798506fcd255a3d..7baaf0a75b4d2d4cedc75aca9efb9ef6916fa5df 100644 (file)
@@ -24,7 +24,7 @@ class MOSDAlive : public PaxosServiceMessage {
   epoch_t map_epoch;
 
   MOSDAlive(epoch_t e) : PaxosServiceMessage(MSG_OSD_ALIVE, e), map_epoch(e) { }
-  MOSDAlive() : PaxosServiceMessage(MSG_OSD_ALIVE, 0) {}
+  MOSDAlive() : PaxosServiceMessage(MSG_OSD_ALIVE, VERSION_T) {}
 
   void encode_payload() {
     paxos_encode();
index 96650b525e43cb01378ac9602f6024d9c0b0a618..f02bdd49c6bbed528527523e07d7b046882a4e75 100644 (file)
@@ -24,7 +24,7 @@ class MOSDBoot : public PaxosServiceMessage {
  public:
   OSDSuperblock sb;
 
-  MOSDBoot() : PaxosServiceMessage(){}
+  MOSDBoot() : PaxosServiceMessage( MSG_OSD_BOOT, VERSION_T){}
   MOSDBoot(OSDSuperblock& s) : 
     PaxosServiceMessage(MSG_OSD_BOOT, s.current_epoch), sb(s) {
   }
index 434613690f727cf52df669afbbe32cc9438204c0..de0b854422308ce512cbf9dc6db0fdd1e4e4073b 100644 (file)
@@ -25,7 +25,7 @@ class MOSDFailure : public PaxosServiceMessage {
   entity_inst_t failed;
   epoch_t       epoch;
 
-  MOSDFailure() : PaxosServiceMessage(MSG_OSD_FAILURE, 0) {}
+  MOSDFailure() : PaxosServiceMessage(MSG_OSD_FAILURE, VERSION_T) {}
   MOSDFailure(ceph_fsid_t &fs, entity_inst_t f, epoch_t e) : 
     PaxosServiceMessage(MSG_OSD_FAILURE, e),
     fsid(fs), failed(f), epoch(e) {}
index 677b49d94b23086f0e95a960ed8fd5cdf64205fa..67c92969ce7bb3a952add0c29782f4e59986f5f6 100644 (file)
@@ -24,9 +24,9 @@ class MOSDGetMap : public PaxosServiceMessage {
   ceph_fsid_t fsid;
   epoch_t start;  // this is the first incremental the sender wants (he has start-1)
 
-  MOSDGetMap() : PaxosServiceMessage(CEPH_MSG_OSD_GETMAP, 0) {}
+  MOSDGetMap() : PaxosServiceMessage(CEPH_MSG_OSD_GETMAP, VERSION_T) {}
   MOSDGetMap(ceph_fsid_t& f, epoch_t s=0) : 
-    PaxosServiceMessage(CEPH_MSG_OSD_GETMAP, s-1),
+    PaxosServiceMessage(CEPH_MSG_OSD_GETMAP, s>0 ? s-1 : 0),
     fsid(f), start(s) { }
 
   epoch_t get_start_epoch() { return start; }
index 397528cb5bea569727e41ff80081ce2b45eb07e6..80f5a9340d6a1307e7a73aef03abdd6377d9b759 100644 (file)
@@ -32,7 +32,7 @@ public:
 
   const char *get_type_name() { return "pg_stats"; }
   void print(ostream& out) {
-    out << "pg_stats(" << pg_stat.size() << "v " << version << " pgs)";
+    out << "pg_stats(" << pg_stat.size() << " pgs v " << version << ")";
   }
 
   void encode_payload() {
index 7bb571596e85b5117be21959da5cf2c5e76325d3..4ff714b0a05e7c10d8a73ca3ef892ea453b1d452 100644 (file)
@@ -26,13 +26,13 @@ public:
   string name;
   bool create;
 
-  MPoolSnap() : PaxosServiceMessage(MSG_POOLSNAP, 0) {}
+  MPoolSnap() : PaxosServiceMessage(MSG_POOLSNAP, VERSION_T) {}
   MPoolSnap( ceph_fsid_t& f, tid_t t, int p, string& n, bool c, version_t v) :
     PaxosServiceMessage(MSG_POOLSNAP, v), fsid(f), tid(t), pool(p), name(n), create(c) {}
 
   const char *get_type_name() { return "poolsnap"; }
   void print(ostream& out) {
-    out << "poolsnap(" << tid << " " << name << ")";
+    out << "poolsnap(" << tid << " " << name << "v " << version << ")";
   }
 
   void encode_payload() {
index 42422f7b01caf30bd2cdfff3cd62219b81d23eba..45e0206ac043e76afd135d72edcfd7056171d391 100644 (file)
@@ -24,14 +24,14 @@ public:
   epoch_t epoch;
 
 
-  MPoolSnapReply() : PaxosServiceMessage(MSG_POOLSNAPREPLY, 0) {}
+  MPoolSnapReply() : PaxosServiceMessage(MSG_POOLSNAPREPLY, VERSION_T) {}
   MPoolSnapReply( ceph_fsid_t& f, tid_t t, int rc, int e, version_t v) :
     PaxosServiceMessage(MSG_POOLSNAPREPLY, v), fsid(f), tid(t), replyCode(rc), epoch(e) {}
 
   const char *get_type_name() { return "poolsnapreply"; }
 
   void print(ostream& out) {
-    out << "poolsnapreply(" << tid <<")";
+    out << "poolsnapreply(" << tid << "v " << version << ")";
   }
 
   void encode_payload() {
index 3edfaca8234aa5475467a29f5b9de5cd9a73ce2f..9d6820b3071d9c705270fb9776435c9c0301b10c 100644 (file)
@@ -21,12 +21,12 @@ struct MRemoveSnaps : public PaxosServiceMessage {
   map<int, vector<snapid_t> > snaps;
   
   MRemoveSnaps() : 
-    PaxosServiceMessage(MSG_REMOVE_SNAPS, 0) { }
-  MRemoveSnaps(map<int, vector<snapid_t> >& s, version_t v) : 
-    PaxosServiceMessage(MSG_REMOVE_SNAPS, v) {
+    PaxosServiceMessage(MSG_REMOVE_SNAPS, VERSION_T) { }
+  MRemoveSnaps(map<int, vector<snapid_t> >& s) : 
+    PaxosServiceMessage(MSG_REMOVE_SNAPS, VERSION_T) {
     snaps.swap(s);
   }
-  
+
   const char *get_type_name() { return "remove_snaps"; }
   void print(ostream& out) {
     out << "remove_snaps(" << snaps << "v " << version << ")";
index 3204cd872dfa99ceec864614d0886b3a19344e5d..4f05c3db96b668612c613d475709621c829a302f 100644 (file)
@@ -24,7 +24,7 @@ public:
   ceph_fsid_t fsid;
   tid_t tid;
 
-  MStatfs() : PaxosServiceMessage(CEPH_MSG_STATFS, 0) {}
+  MStatfs() : PaxosServiceMessage(CEPH_MSG_STATFS, VERSION_T) {}
   MStatfs(ceph_fsid_t& f, tid_t t, version_t v) :
     PaxosServiceMessage(CEPH_MSG_STATFS, v), fsid(f), tid(t) {}
 
index b5d9fa04e3f7887b51df5c1d3d317edb58601122..7e3d5a51ff491e086b3fd63e17230717660b4208 100644 (file)
@@ -420,14 +420,14 @@ bool MDSMonitor::preprocess_command(MMonCommand *m)
       if (m->cmd[2] == "*") {
        for (unsigned i=0; i<mdsmap.get_max_mds(); i++)
          if (mdsmap.is_active(i))
-           mon->inject_args(mdsmap.get_inst(i), m->cmd[3]);
+           mon->inject_args(mdsmap.get_inst(i), m->cmd[3], paxos->get_version());
        r = 0;
        ss << "ok bcast";
       } else {
        errno = 0;
        int who = strtol(m->cmd[2].c_str(), 0, 10);
        if (!errno && who >= 0 && mdsmap.is_active(who)) {
-         mon->inject_args(mdsmap.get_inst(who), m->cmd[3]);
+         mon->inject_args(mdsmap.get_inst(who), m->cmd[3], paxos->get_version());
          r = 0;
          ss << "ok";
        } else 
index 0ebd254df076de911cdcf7c4bfa0e25bdfdb9579..e7019ccc9243ceb4bf48fe8a7f4e715edcb13d0d 100644 (file)
@@ -273,14 +273,14 @@ void Monitor::handle_command(MMonCommand *m)
        args[1] = m->cmd[3];
        if (m->cmd[2] == "*") {
          for (unsigned i=0; i<monmap->size(); i++)
-           inject_args(monmap->get_inst(i), args);
+           inject_args(monmap->get_inst(i), args, VERSION_T);
          r = 0;
          rs = "ok bcast";
        } else {
          errno = 0;
          int who = strtol(m->cmd[2].c_str(), 0, 10);
          if (!errno && who >= 0) {
-           inject_args(monmap->get_inst(who), args);
+           inject_args(monmap->get_inst(who), args, VERSION_T);
            r = 0;
            rs = "ok";
          } else 
@@ -322,10 +322,10 @@ void Monitor::handle_observe(MMonObserve *m)
 }
 
 
-void Monitor::inject_args(const entity_inst_t& inst, vector<string>& args)
+void Monitor::inject_args(const entity_inst_t& inst, vector<string>& args, version_t version)
 {
   dout(10) << "inject_args " << inst << " " << args << dendl;
-  MMonCommand *c = new MMonCommand(monmap->fsid, VERSION_T);
+  MMonCommand *c = new MMonCommand(monmap->fsid, version);
   c->cmd = args;
   messenger->send_message(c, inst);
 }
index 418c45313da6ff7b4ba8325a11806d48692685ae..f209eda30a9696e9f69af12d1abf2ce8abc891c4 100644 (file)
@@ -135,12 +135,12 @@ public:
   void reply_command(MMonCommand *m, int rc, const string &rs, version_t version);
   void reply_command(MMonCommand *m, int rc, const string &rs, bufferlist& rdata, version_t version);
 
-  void inject_args(const entity_inst_t& inst, string& args) {
+  void inject_args(const entity_inst_t& inst, string& args, version_t version) {
     vector<string> a(1);
     a[0] = args;
-    inject_args(inst, a);
+    inject_args(inst, a, version);
   }
-  void inject_args(const entity_inst_t& inst, vector<string>& args);  
+  void inject_args(const entity_inst_t& inst, vector<string>& args, version_t version);  
 
 public:
   struct C_Command : public Context {
index d9b07d5fc4db0d75d7ed977f2d5833e0e6ca15db..5a1941b48a89a735c873b741f27a899724c56b5f 100644 (file)
@@ -955,14 +955,14 @@ bool OSDMonitor::preprocess_command(MMonCommand *m)
       if (m->cmd[2] == "*") {
        for (int i=0; i<osdmap.get_max_osd(); i++)
          if (osdmap.is_up(i))
-           mon->inject_args(osdmap.get_inst(i), m->cmd[3]);
+           mon->inject_args(osdmap.get_inst(i), m->cmd[3], paxos->get_version());
        r = 0;
        ss << "ok bcast";
       } else {
        errno = 0;
        int who = strtol(m->cmd[2].c_str(), 0, 10);
        if (!errno && who >= 0 && osdmap.is_up(who)) {
-         mon->inject_args(osdmap.get_inst(who), m->cmd[3]);
+         mon->inject_args(osdmap.get_inst(who), m->cmd[3], paxos->get_version());
          r = 0;
          ss << "ok";
        } else