Skip to content

Commit

Permalink
osd: traverse pg_log_entry_t in read_log
Browse files Browse the repository at this point in the history
Signed-off-by: yaoning <yaoning@unitedstack.com>
  • Loading branch information
yaoning committed May 10, 2016
1 parent c9b4035 commit 55ed607
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
25 changes: 23 additions & 2 deletions src/osd/PGLog.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#include "PGLog.h"
#include "PG.h"
#include "osd_types.h"
#include "SnapMapper.h"
#include "../include/unordered_map.h"

Expand Down Expand Up @@ -1006,14 +1007,34 @@ void PGLog::read_log(ObjectStore *store, coll_t pg_coll,
bv);
if (r >= 0) {
object_info_t oi(bv);

if (oi.version < i->version) {
ldpp_dout(dpp, 15) << "read_log missing " << *i
<< " (have " << oi.version << ")" << dendl;
<< " (have " << oi.version << ")"
<< " unmodified_omap " << i->unmodified_omap
<< " unmodified_extents " << i->unmodified_extents << dendl;
missing.add(i->soid, i->version, oi.version);
missing.missing[i->soid].unmodified_omap = i->unmodified_omap;
missing.missing[i->soid].unmodified_extents.insert(i->unmodified_extents);
list<pg_log_entry_t>::const_iterator piter = log.log.end();
map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator miter
= missing.missing.find(i->soid);
if (i->prior_version >= log.tail)
piter = log.find_entry(i->prior_version);
while(piter != log.log.end()) {
miter->second.unmodified_omap = miter->second.unmodified_omap && piter->unmodified_omap;
miter->second.unmodified_extents.intersection_of(piter->unmodified_extents);
eversion_t prior_version = piter->prior_version;
piter = log.find_entry(prior_version);
}
}
} else {
ldpp_dout(dpp, 15) << "read_log missing " << *i << dendl;
ldpp_dout(dpp, 15) << "read_log missing " << *i
<< " unmodified_omap " << i->unmodified_omap
<< " unmodified_extents " << i->unmodified_extents << dendl;
missing.add(i->soid, i->version, eversion_t());
missing.missing[i->soid].unmodified_omap = i->unmodified_omap;
missing.missing[i->soid].unmodified_extents.insert(i->unmodified_extents);
}
}
for (map<eversion_t, hobject_t>::reverse_iterator i =
Expand Down
20 changes: 20 additions & 0 deletions src/osd/osd_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -2667,6 +2667,26 @@ struct pg_log_t {
return head.version - tail.version;
}

list<pg_log_entry_t>::const_iterator find_entry(eversion_t v) const {
int fromhead = head.version - v.version;
int fromtail = v.version - tail.version;
list<pg_log_entry_t>::const_iterator p;
if (fromhead < fromtail) {
p = log.end();
--p;
while (p->version > v)
--p;
} else {
p = log.begin();
while (p->version < v)
++p;
}
if (p->version == v)
return p;
else
return log.end();
}

static void filter_log(spg_t import_pgid, const OSDMap &curmap,
const string &hit_set_namespace, const pg_log_t &in,
pg_log_t &out, pg_log_t &reject);
Expand Down

0 comments on commit 55ed607

Please sign in to comment.