}
void PGLog::write_log(
- ObjectStore::Transaction& t, const coll_t& coll, const ghobject_t &log_oid)
+ ObjectStore::Transaction& t,
+ map<string,bufferlist> *km,
+ const coll_t& coll, const ghobject_t &log_oid)
{
if (is_dirty()) {
dout(10) << "write_log with: "
<< ", trimmed: " << trimmed
<< dendl;
_write_log(
- t, log, coll, log_oid, divergent_priors,
+ t, km, log, coll, log_oid, divergent_priors,
dirty_to,
dirty_from,
writeout_from,
}
}
-void PGLog::write_log(ObjectStore::Transaction& t, pg_log_t &log,
+void PGLog::write_log(
+ ObjectStore::Transaction& t,
+ map<string,bufferlist> *km,
+ pg_log_t &log,
const coll_t& coll, const ghobject_t &log_oid,
map<eversion_t, hobject_t> &divergent_priors)
{
_write_log(
- t, log, coll, log_oid,
+ t, km, log, coll, log_oid,
divergent_priors, eversion_t::max(), eversion_t(), eversion_t(),
set<eversion_t>(),
true, true, 0);
}
void PGLog::_write_log(
- ObjectStore::Transaction& t, pg_log_t &log,
+ ObjectStore::Transaction& t,
+ map<string,bufferlist> *km,
+ pg_log_t &log,
const coll_t& coll, const ghobject_t &log_oid,
map<eversion_t, hobject_t> &divergent_priors,
eversion_t dirty_to,
clear_after(log_keys_debug, dirty_from.get_key_name());
}
- map<string,bufferlist> keys;
for (list<pg_log_entry_t>::iterator p = log.log.begin();
p != log.log.end() && p->version < dirty_to;
++p) {
bufferlist bl(sizeof(*p) * 2);
p->encode_with_checksum(bl);
- keys[p->get_key_name()].claim(bl);
+ (*km)[p->get_key_name()].claim(bl);
}
for (list<pg_log_entry_t>::reverse_iterator p = log.log.rbegin();
++p) {
bufferlist bl(sizeof(*p) * 2);
p->encode_with_checksum(bl);
- keys[p->get_key_name()].claim(bl);
+ (*km)[p->get_key_name()].claim(bl);
}
if (log_keys_debug) {
- for (map<string, bufferlist>::iterator i = keys.begin();
- i != keys.end();
+ for (map<string, bufferlist>::iterator i = (*km).begin();
+ i != (*km).end();
++i) {
+ if (i->first[0] == '_')
+ continue;
assert(!log_keys_debug->count(i->first));
log_keys_debug->insert(i->first);
}
if (dirty_divergent_priors) {
//dout(10) << "write_log: writing divergent_priors" << dendl;
- ::encode(divergent_priors, keys["divergent_priors"]);
+ ::encode(divergent_priors, (*km)["divergent_priors"]);
}
- ::encode(log.can_rollback_to, keys["can_rollback_to"]);
- ::encode(log.rollback_info_trimmed_to, keys["rollback_info_trimmed_to"]);
+ ::encode(log.can_rollback_to, (*km)["can_rollback_to"]);
+ ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]);
if (!to_remove.empty())
t.omap_rmkeys(coll, log_oid, to_remove);
- t.omap_setkeys(coll, log_oid, keys);
}
void PGLog::read_log(ObjectStore *store, coll_t pg_coll,
pg_info_t &info, LogEntryHandler *rollbacker,
bool &dirty_info, bool &dirty_big_info);
- void write_log(ObjectStore::Transaction& t, const coll_t& coll,
+ void write_log(ObjectStore::Transaction& t,
+ map<string,bufferlist> *km,
+ const coll_t& coll,
const ghobject_t &log_oid);
- static void write_log(ObjectStore::Transaction& t, pg_log_t &log,
+ static void write_log(
+ ObjectStore::Transaction& t,
+ map<string,bufferlist>* km,
+ pg_log_t &log,
const coll_t& coll,
const ghobject_t &log_oid, map<eversion_t, hobject_t> &divergent_priors);
static void _write_log(
- ObjectStore::Transaction& t, pg_log_t &log,
+ ObjectStore::Transaction& t,
+ map<string,bufferlist>* km,
+ pg_log_t &log,
const coll_t& coll, const ghobject_t &log_oid,
map<eversion_t, hobject_t> &divergent_priors,
eversion_t dirty_to,
//Empty for this
coll_t coll(info.pgid);
ghobject_t pgmeta_oid(info.pgid.make_pgmeta_oid());
- int ret = PG::_write_info(t, epoch,
+ map<string,bufferlist> km;
+ int ret = PG::_prepare_write_info(
+ &km, epoch,
info, coll,
past_intervals,
pgmeta_oid,
true);
if (ret < 0) ret = -ret;
if (ret) cerr << "Failed to write info" << std::endl;
+ t.omap_setkeys(coll, pgmeta_oid, km);
return ret;
}
return ret;
map<eversion_t, hobject_t> divergent_priors;
coll_t coll(info.pgid);
- PGLog::write_log(t, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors);
+ map<string,bufferlist> km;
+ PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors);
+ t.omap_setkeys(coll, info.pgid.make_pgmeta_oid(), km);
return 0;
}