}
void PGLog::clear() {
- ondisklog.zero();
- ondisklog.has_checksums = true;
- ondisklog.divergent_priors.clear();
+ divergent_priors.clear();
missing.clear();
log.zero();
}
/* If we are trimming, we must be complete up to trim_to, time
* to throw out any divergent_priors
*/
- ondisklog.divergent_priors.clear();
+ divergent_priors.clear();
// We shouldn't be trimming the log past last_complete
assert(trim_to <= info.last_complete);
dout(20) << "merge_old_entry had " << oe << " updating missing to "
<< oe.prior_version << dendl;
if (oe.prior_version > eversion_t()) {
- ondisklog.add_divergent_prior(oe.prior_version, oe.soid);
+ add_divergent_prior(oe.prior_version, oe.soid);
dirty_log = true;
missing.revise_need(oe.soid, oe.prior_version);
} else if (missing.is_missing(oe.soid)) {
bufferlist bl = p->value();//Copy bufferlist before creating iterator
bufferlist::iterator bp = bl.begin();
if (p->key() == "divergent_priors") {
- ::decode(ondisklog.divergent_priors, bp);
- dout(20) << "read_log " << ondisklog.divergent_priors.size() << " divergent_priors" << dendl;
+ ::decode(divergent_priors, bp);
+ dout(20) << "read_log " << divergent_priors.size() << " divergent_priors" << dendl;
} else {
pg_log_entry_t e;
e.decode_with_checksum(bp);
}
}
for (map<eversion_t, hobject_t>::reverse_iterator i =
- ondisklog.divergent_priors.rbegin();
- i != ondisklog.divergent_priors.rend();
+ divergent_priors.rbegin();
+ i != divergent_priors.rend();
++i) {
if (i->first <= info.last_complete) break;
if (did.count(i->second)) continue;
ostream& print(ostream& out) const;
};
-
+
+
+ void add_divergent_prior(eversion_t version, hobject_t obj) {
+ divergent_priors.insert(make_pair(version, obj));
+ }
+
/**
* OndiskLog - some info about how we store the log on disk.
*/
protected:
//////////////////// data members ////////////////////
- OndiskLog ondisklog;
+ map<eversion_t, hobject_t> divergent_priors;
pg_missing_t missing;
IndexedLog log;
missing.rm(p);
}
- //////////////////// get or set ondisklog ////////////////////
-
- const OndiskLog &get_ondisklog() const { return ondisklog; }
-
//////////////////// get or set log ////////////////////
const IndexedLog &get_log() const { return log; }
bool &dirty_log, bool &dirty_info, bool &dirty_big_info);
void write_log(ObjectStore::Transaction& t, const hobject_t &log_oid) {
- write_log(t, log, log_oid, ondisklog.divergent_priors);
+ write_log(t, log, log_oid, divergent_priors);
}
static void write_log(ObjectStore::Transaction& t, pg_log_t &log,
bool read_log(ObjectStore *store, coll_t coll, hobject_t log_oid,
const pg_info_t &info, ostringstream &oss) {
- return read_log(store, coll, log_oid, info, ondisklog.divergent_priors,
+ return read_log(store, coll, log_oid, info, divergent_priors,
log, missing, oss);
}
int get_log(ObjectStore *fs, coll_t coll, pg_t pgid, const pg_info_t &info,
PGLog::IndexedLog &log, pg_missing_t &missing)
{
- PGLog::OndiskLog ondisklog;
+ map<eversion_t, hobject_t> divergent_priors;
try {
ostringstream oss;
- PGLog::read_log(fs, coll, log_oid, info, ondisklog, log, missing, oss);
+ PGLog::read_log(fs, coll, log_oid, info, divergent_priors, log, missing, oss);
if (debug && oss.str().size())
cerr << oss.str() << std::endl;
}