From: Dan Mick Date: Tue, 4 Jun 2013 20:12:08 +0000 (-0700) Subject: Merge remote-tracking branch 'origin/master' into wip-ceph-cli X-Git-Tag: v0.65~136^2^2~21 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ee0913c2e6427093a0bf9dbe9cc536968be7667e;p=ceph.git Merge remote-tracking branch 'origin/master' into wip-ceph-cli Conflicts: src/mon/OSDMonitor.cc src/osd/OSD.cc src/osd/ReplicatedPG.cc --- ee0913c2e6427093a0bf9dbe9cc536968be7667e diff --cc src/mon/Monitor.cc index a7f78f5dd32d,72fd3777a8ca..4e849156794d --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@@ -172,12 -170,12 +172,12 @@@ Monitor::Monitor(CephContext* cct_, str paxos_service[PAXOS_LOG] = new LogMonitor(this, paxos, "logm"); paxos_service[PAXOS_AUTH] = new AuthMonitor(this, paxos, "auth"); - health_monitor = QuorumServiceRef(new HealthMonitor(this)); - config_key_service = ConfigKeyServiceRef(new ConfigKeyService(this, paxos)); + health_monitor = new HealthMonitor(this); + config_key_service = new ConfigKeyService(this, paxos); - mon_caps = new MonCaps(); - mon_caps->set_allow_all(true); - mon_caps->text = "allow *"; + mon_caps = new MonCap(); + bool r = mon_caps->parse("allow *", NULL); + assert(r); exited_quorum = ceph_clock_now(g_ceph_context); } diff --cc src/mon/Monitor.h index 992ffa465f87,b9203ae1e615..6830a4eedf9b --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@@ -52,12 -51,9 +52,9 @@@ #include #include #include - #include - // Because intusive_ptr clobbers our assert... - #include "include/assert.h" -#define CEPH_MON_PROTOCOL 10 /* cluster internal */ +#define CEPH_MON_PROTOCOL 11 /* cluster internal */ enum { diff --cc src/osd/OSD.cc index 65e07f1287a1,ef2b58a5de22..205d5a5f64f1 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@@ -3648,77 -3631,72 +3774,79 @@@ void OSD::do_command(Connection *con, t ss << "failed to open file '" << file_name << "'"; r = -EINVAL; goto out; - } + } - std::set keys; - for (hash_map::const_iterator pg_map_e = pg_map.begin(); - pg_map_e != pg_map.end(); ++pg_map_e) { - keys.insert(pg_map_e->first); + std::set keys; + for (hash_map::const_iterator pg_map_e = pg_map.begin(); + pg_map_e != pg_map.end(); ++pg_map_e) { + keys.insert(pg_map_e->first); + } + + fout << "*** osd " << whoami << ": dump_missing ***" << std::endl; + for (std::set ::iterator p = keys.begin(); + p != keys.end(); ++p) { + hash_map::iterator q = pg_map.find(*p); + assert(q != pg_map.end()); + PG *pg = q->second; + pg->lock(); + + fout << *pg << std::endl; - std::map::iterator mend = pg->missing.missing.end(); - std::map::iterator mi = pg->missing.missing.begin(); ++ std::map::const_iterator mend = ++ pg->pg_log.get_missing().missing.end(); ++ std::map::const_iterator mi = ++ pg->pg_log.get_missing().missing.begin(); + for (; mi != mend; ++mi) { + fout << mi->first << " -> " << mi->second << std::endl; + map >::const_iterator mli = + pg->missing_loc.find(mi->first); + if (mli == pg->missing_loc.end()) + continue; + const set &mls(mli->second); + if (mls.empty()) + continue; + fout << "missing_loc: " << mls << std::endl; } - - fout << "*** osd " << whoami << ": dump_missing ***" << std::endl; - for (std::set ::iterator p = keys.begin(); - p != keys.end(); ++p) { - hash_map::iterator q = pg_map.find(*p); - assert(q != pg_map.end()); - PG *pg = q->second; - pg->lock(); - - fout << *pg << std::endl; - std::map::const_iterator mend = - pg->pg_log.get_missing().missing.end(); - std::map::const_iterator mi = - pg->pg_log.get_missing().missing.begin(); - for (; mi != mend; ++mi) { - fout << mi->first << " -> " << mi->second << std::endl; - map >::const_iterator mli = - pg->missing_loc.find(mi->first); - if (mli == pg->missing_loc.end()) - continue; - const set &mls(mli->second); - if (mls.empty()) - continue; - fout << "missing_loc: " << mls << std::endl; - } - pg->unlock(); - fout << std::endl; - } - - fout.close(); + pg->unlock(); + fout << std::endl; } - else if (cmd.size() == 3 && cmd[1] == "kick_recovery_wq") { - r = g_conf->set_val("osd_recovery_delay_start", cmd[2].c_str()); - if (r != 0) { - ss << "kick_recovery_wq: error setting " - << "osd_recovery_delay_start to '" << cmd[2] << "': error " - << r; - goto out; - } - g_conf->apply_changes(NULL); - ss << "kicking recovery queue. set osd_recovery_delay_start " - << "to " << g_conf->osd_recovery_delay_start; - defer_recovery_until = ceph_clock_now(g_ceph_context); - defer_recovery_until += g_conf->osd_recovery_delay_start; - recovery_wq.wake(); + + fout.close(); + } + else if (prefix == "debug kick_recovery_wq") { + int64_t delay; + cmd_getval(g_ceph_context, cmdmap, "delay", delay); + ostringstream oss; + oss << delay; + r = g_conf->set_val("osd_recovery_delay_start", oss.str().c_str()); + if (r != 0) { + ss << "kick_recovery_wq: error setting " + << "osd_recovery_delay_start to '" << delay << "': error " + << r; + goto out; } + g_conf->apply_changes(NULL); + ss << "kicking recovery queue. set osd_recovery_delay_start " + << "to " << g_conf->osd_recovery_delay_start; + defer_recovery_until = ceph_clock_now(g_ceph_context); + defer_recovery_until += g_conf->osd_recovery_delay_start; + recovery_wq.wake(); } - else if (cmd[0] == "cpu_profiler") { - cpu_profiler_handle_command(cmd, ss); + else if (prefix == "cpu_profiler") { + string arg; + cmd_getval(g_ceph_context, cmdmap, "arg", arg); + vector argvec; + get_str_vec(arg, argvec); + cpu_profiler_handle_command(argvec, ds); } - else if (cmd[0] == "dump_pg_recovery_stats") { + else if (prefix == "dump_pg_recovery_stats") { stringstream s; pg_recovery_stats.dump(s); - ss << "dump pg recovery stats: " << s.str(); + ds << "dump pg recovery stats: " << s.str(); } - else if (cmd[0] == "reset_pg_recovery_stats") { + else if (prefix == "reset_pg_recovery_stats") { ss << "reset pg recovery stats"; pg_recovery_stats.reset(); } diff --cc src/osd/ReplicatedPG.cc index fff754a1d76a,91241fa26cbf..aa3dedca9a88 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@@ -264,30 -264,9 +266,30 @@@ int ReplicatedPG::get_pgls_filter(buffe int ReplicatedPG::do_command(vector& cmd, ostream& ss, bufferlist& idata, bufferlist& odata) { - + const pg_missing_t &missing = pg_log.get_missing(); + map cmdmap; + string prefix; - if (cmd.size() && cmd[0] == "query") { + if (cmd.empty()) { + ss << "no command given"; + return -EINVAL; + } + + stringstream ss2; + if (!cmdmap_from_json(cmd, &cmdmap, ss2)) { + ss << ss2.str(); + return -EINVAL; + } + + cmd_getval(g_ceph_context, cmdmap, "prefix", prefix); + if (prefix != "pg") { + ss << "ReplicatedPG::do_command: not pg command"; + return -EINVAL; + } + + string command; + cmd_getval(g_ceph_context, cmdmap, "cmd", command); + if (command == "query") { JSONFormatter jsf(true); jsf.open_object_section("pg"); jsf.dump_string("state", pg_state_string(get_state()));