using ceph::parse_timespan;
using ceph::timespan_str;
-static ostream& _prefix(std::ostream *_dout, const Monitor *mon,
+static ostream& _prefix(std::ostream *_dout, const Monitor &mon,
const ConfigKeyService *service) {
- return *_dout << "mon." << mon->name << "@" << mon->rank
- << "(" << mon->get_state_name() << ")." << service->get_name()
+ return *_dout << "mon." << mon.name << "@" << mon.rank
+ << "(" << mon.get_state_name() << ")." << service->get_name()
<< "(" << service->get_epoch() << ") ";
}
const string CONFIG_PREFIX = "mon_config_key";
-ConfigKeyService::ConfigKeyService(Monitor *m, Paxos *p)
+ConfigKeyService::ConfigKeyService(Monitor &m, Paxos &p)
: mon(m),
paxos(p),
tick_period(g_conf()->mon_tick_interval)
bool ConfigKeyService::in_quorum() const
{
- return (mon->is_leader() || mon->is_peon());
+ return (mon.is_leader() || mon.is_peon());
}
void ConfigKeyService::start_tick()
if (tick_period <= 0)
return;
- tick_event = new C_MonContext{mon, [this](int r) {
+ tick_event = new C_MonContext{&mon, [this](int r) {
if (r < 0) {
return;
}
tick();
}};
- mon->timer.add_event_after(tick_period, tick_event);
+ mon.timer.add_event_after(tick_period, tick_event);
}
void ConfigKeyService::set_update_period(double t)
void ConfigKeyService::cancel_tick()
{
if (tick_event)
- mon->timer.cancel_event(tick_event);
+ mon.timer.cancel_event(tick_event);
tick_event = nullptr;
}
int ConfigKeyService::store_get(const string &key, bufferlist &bl)
{
- return mon->store->get(CONFIG_PREFIX, key, bl);
+ return mon.store->get(CONFIG_PREFIX, key, bl);
}
void ConfigKeyService::get_store_prefixes(set<string>& s) const
void ConfigKeyService::store_put(const string &key, bufferlist &bl, Context *cb)
{
- MonitorDBStore::TransactionRef t = paxos->get_pending_transaction();
+ MonitorDBStore::TransactionRef t = paxos.get_pending_transaction();
t->put(CONFIG_PREFIX, key, bl);
if (cb)
- paxos->queue_pending_finisher(cb);
- paxos->trigger_propose();
+ paxos.queue_pending_finisher(cb);
+ paxos.trigger_propose();
}
void ConfigKeyService::store_delete(const string &key, Context *cb)
{
- MonitorDBStore::TransactionRef t = paxos->get_pending_transaction();
+ MonitorDBStore::TransactionRef t = paxos.get_pending_transaction();
store_delete(t, key);
if (cb)
- paxos->queue_pending_finisher(cb);
- paxos->trigger_propose();
+ paxos.queue_pending_finisher(cb);
+ paxos.trigger_propose();
}
void ConfigKeyService::store_delete(
bool ConfigKeyService::store_exists(const string &key)
{
- return mon->store->exists(CONFIG_PREFIX, key);
+ return mon.store->exists(CONFIG_PREFIX, key);
}
void ConfigKeyService::store_list(stringstream &ss)
{
KeyValueDB::Iterator iter =
- mon->store->get_iterator(CONFIG_PREFIX);
+ mon.store->get_iterator(CONFIG_PREFIX);
JSONFormatter f(true);
f.open_array_section("keys");
bool ConfigKeyService::store_has_prefix(const string &prefix)
{
KeyValueDB::Iterator iter =
- mon->store->get_iterator(CONFIG_PREFIX);
+ mon.store->get_iterator(CONFIG_PREFIX);
while (iter->valid()) {
string key(iter->key());
void ConfigKeyService::store_dump(stringstream &ss, const string& prefix)
{
KeyValueDB::Iterator iter =
- mon->store->get_iterator(CONFIG_PREFIX);
+ mon.store->get_iterator(CONFIG_PREFIX);
dout(10) << __func__ << " prefix '" << prefix << "'" << dendl;
if (prefix.size()) {
const string &prefix)
{
KeyValueDB::Iterator iter =
- mon->store->get_iterator(CONFIG_PREFIX);
+ mon.store->get_iterator(CONFIG_PREFIX);
while (iter->valid()) {
string key(iter->key());
if (!in_quorum()) {
dout(1) << __func__ << " not in quorum -- waiting" << dendl;
- paxos->wait_for_readable(op, new Monitor::C_RetryMessage(mon, op));
+ paxos.wait_for_readable(op, new Monitor::C_RetryMessage(&mon, op));
return false;
}
} else if (prefix == "config-key put" ||
prefix == "config-key set") {
- if (!mon->is_leader()) {
- mon->forward_request_leader(op);
+ if (!mon.is_leader()) {
+ mon.forward_request_leader(op);
// we forward the message; so return now.
return true;
}
// we'll reply to the message once the proposal has been handled
store_put(key, data,
- new Monitor::C_Command(*mon, op, 0, ss.str(), 0));
+ new Monitor::C_Command(mon, op, 0, ss.str(), 0));
// return for now; we'll put the message once it's done.
return true;
} else if (prefix == "config-key del" ||
prefix == "config-key rm") {
- if (!mon->is_leader()) {
- mon->forward_request_leader(op);
+ if (!mon.is_leader()) {
+ mon.forward_request_leader(op);
return true;
}
ss << "no such key '" << key << "'";
goto out;
}
- store_delete(key, new Monitor::C_Command(*mon, op, 0, "key deleted", 0));
+ store_delete(key, new Monitor::C_Command(mon, op, 0, "key deleted", 0));
// return for now; we'll put the message once it's done
return true;
out:
if (!cmd->get_source().is_mon()) {
string rs = ss.str();
- mon->reply_command(op, ret, rs, rdata, 0);
+ mon.reply_command(op, ret, rs, rdata, 0);
}
return (ret == 0);
string daemon_prefix =
"daemon-private/osd." + stringify(id) + "/";
- MonitorDBStore::TransactionRef t = paxos->get_pending_transaction();
+ MonitorDBStore::TransactionRef t = paxos.get_pending_transaction();
for (auto p : { dmcrypt_prefix, daemon_prefix }) {
store_delete_prefix(t, p);
}
- paxos->trigger_propose();
+ paxos.trigger_propose();
}
int ConfigKeyService::validate_osd_new(
const uuid_d& uuid,
const string& dmcrypt_key)
{
- ceph_assert(paxos->is_plugged());
+ ceph_assert(paxos.is_plugged());
string dmcrypt_key_prefix = _get_dmcrypt_prefix(uuid, "luks");
bufferlist dmcrypt_key_value;