From ffddb349d8c5008207c29a86fc042e71c4250269 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 18 Feb 2012 15:18:13 -0800 Subject: [PATCH] osd: dispatch 'pg ...' commands to PG::do_command() Signed-off-by: Sage Weil --- src/osd/OSD.cc | 22 ++++++++++++++++++++++ src/osd/PG.h | 2 ++ src/osd/ReplicatedPG.cc | 10 ++++++++++ src/osd/ReplicatedPG.h | 1 + 4 files changed, 35 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 402e11724a303..ce65ccdda78c8 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2358,6 +2358,28 @@ void OSD::do_command(Connection *con, tid_t tid, vector& 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; diff --git a/src/osd/PG.h b/src/osd/PG.h index 8e50c44093b56..d75b1ecf2397f 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1399,6 +1399,8 @@ public: virtual void do_backfill(OpRequest *op) = 0; virtual bool snap_trimmer() = 0; + virtual int do_command(vector& 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; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 89950d1f8308c..87bf5503cfc4e 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -250,6 +250,15 @@ int ReplicatedPG::get_pgls_filter(bufferlist::iterator& iter, PGLSFilter **pfilt // ========================================================== + +int ReplicatedPG::do_command(vector& 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 >(); } + diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index cc711c4921282..93f749c905875 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -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& cmd, ostream& ss, bufferlist& data); void do_op(OpRequest *op); bool pg_op_must_wait(MOSDOp *op); -- 2.39.5