]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: dispatch 'pg <pgid> ...' commands to PG::do_command()
authorSage Weil <sage.weil@dreamhost.com>
Sat, 18 Feb 2012 23:18:13 +0000 (15:18 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Sun, 19 Feb 2012 06:49:45 +0000 (22:49 -0800)
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/osd/OSD.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 402e11724a3038efe2225635da57985c381be18c..ce65ccdda78c861d28a1a18eeb753c641d6b6c4e 100644 (file)
@@ -2358,6 +2358,28 @@ void OSD::do_command(Connection *con, tid_t tid, vector<string>& cmd, bufferlist
     shutdown();
   }
 
+  else if (cmd[0] == "pg") {
+    pg_t pgid;
+
+    if (cmd.size() < 2) {
+      ss << "no pgid specified";
+      r = -EINVAL;
+    } else if (!pgid.parse(cmd[1].c_str())) {
+      ss << "couldn't parse pgid '" << cmd[1] << "'";
+      r = -EINVAL;
+    } else {
+      PG *pg = _lookup_lock_pg(pgid);
+      if (!pg) {
+       ss << "i don't have pgid " << pgid;
+       r = -ENOENT;
+      } else {
+       cmd.erase(cmd.begin(), cmd.begin() + 2);
+       r = pg->do_command(cmd, ss, odata);
+      }
+      pg->unlock();
+    }
+  }
+
   else if (cmd[0] == "bench") {
     uint64_t count = 1 << 30;  // 1gb
     uint64_t bsize = 4 << 20;
index 8e50c44093b56747a88da370bddc02761a579f29..d75b1ecf2397fcf06c27f8ffc99e7acba9d161e4 100644 (file)
@@ -1399,6 +1399,8 @@ public:
   virtual void do_backfill(OpRequest *op) = 0;
   virtual bool snap_trimmer() = 0;
 
+  virtual int do_command(vector<string>& cmd, ostream& ss, bufferlist& data) = 0;
+
   virtual bool same_for_read_since(epoch_t e) = 0;
   virtual bool same_for_modify_since(epoch_t e) = 0;
   virtual bool same_for_rep_modify_since(epoch_t e) = 0;
index 89950d1f8308cf1ca65ae0de4848ea06220faad0..87bf5503cfc4eb0796d711f7ff91e203eea0150f 100644 (file)
@@ -250,6 +250,15 @@ int ReplicatedPG::get_pgls_filter(bufferlist::iterator& iter, PGLSFilter **pfilt
 
 
 // ==========================================================
+
+int ReplicatedPG::do_command(vector<string>& cmd, ostream& ss, bufferlist& data)
+{
+  ss << "unknown command " << cmd;
+  return -EINVAL;
+}
+
+// ==========================================================
+
 bool ReplicatedPG::pg_op_must_wait(MOSDOp *op)
 {
   if (missing.missing.empty())
@@ -6259,3 +6268,4 @@ boost::statechart::result ReplicatedPG::WaitingOnReplicas::react(const SnapTrim&
   return transit< NotTrimming >();
 }
 
+
index cc711c492128277952a8c72a67762ad0858ba6f6..93f749c9058752525a19ae6905afac5430150309 100644 (file)
@@ -789,6 +789,7 @@ public:
   ReplicatedPG(OSD *o, PGPool *_pool, pg_t p, const hobject_t& oid, const hobject_t& ioid);
   ~ReplicatedPG() {}
 
+  int do_command(vector<string>& cmd, ostream& ss, bufferlist& data);
 
   void do_op(OpRequest *op);
   bool pg_op_must_wait(MOSDOp *op);