map<string,bufferlist> km;
if (dirty_big_info || dirty_info)
prepare_write_info(&km);
- pg_log.write_log(t, &km, coll, pgmeta_oid);
+ pg_log.write_log(t, &km, coll, pgmeta_oid, pool.info.require_rollback());
if (!km.empty())
t.omap_setkeys(coll, pgmeta_oid, km);
}
void PGLog::write_log(
ObjectStore::Transaction& t,
map<string,bufferlist> *km,
- const coll_t& coll, const ghobject_t &log_oid)
+ const coll_t& coll, const ghobject_t &log_oid,
+ bool require_rollback)
{
if (is_dirty()) {
dout(5) << "write_log with: "
trimmed,
dirty_divergent_priors,
!touched_log,
+ require_rollback,
(pg_log_debug ? &log_keys_debug : 0));
undirty();
} else {
map<string,bufferlist> *km,
pg_log_t &log,
const coll_t& coll, const ghobject_t &log_oid,
- map<eversion_t, hobject_t> &divergent_priors)
+ map<eversion_t, hobject_t> &divergent_priors,
+ bool require_rollback)
{
_write_log(
t, km, log, coll, log_oid,
divergent_priors, eversion_t::max(), eversion_t(), eversion_t(),
set<eversion_t>(),
- true, true, 0);
+ true, true, require_rollback, 0);
}
void PGLog::_write_log(
const set<eversion_t> &trimmed,
bool dirty_divergent_priors,
bool touch_log,
+ bool require_rollback,
set<string> *log_keys_debug
)
{
//dout(10) << "write_log: writing divergent_priors" << dendl;
::encode(divergent_priors, (*km)["divergent_priors"]);
}
- ::encode(log.can_rollback_to, (*km)["can_rollback_to"]);
- ::encode(log.rollback_info_trimmed_to, (*km)["rollback_info_trimmed_to"]);
+ if (require_rollback) {
+ ::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);
void write_log(ObjectStore::Transaction& t,
map<string,bufferlist> *km,
const coll_t& coll,
- const ghobject_t &log_oid);
+ const ghobject_t &log_oid,
+ bool require_rollback);
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);
+ const ghobject_t &log_oid, map<eversion_t, hobject_t> &divergent_priors,
+ bool require_rollback);
static void _write_log(
ObjectStore::Transaction& t,
const set<eversion_t> &trimmed,
bool dirty_divergent_priors,
bool touch_log,
+ bool require_rollback,
set<string> *log_keys_debug
);
return ret;
coll_t coll(info.pgid);
map<string,bufferlist> km;
- PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors);
+ PGLog::write_log(t, &km, log, coll, info.pgid.make_pgmeta_oid(), divergent_priors, true);
t.omap_setkeys(coll, info.pgid.make_pgmeta_oid(), km);
return 0;
}