Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into wip-2941-3
Browse files Browse the repository at this point in the history
  • Loading branch information
yehudasa committed Feb 8, 2013
2 parents 278dfe5 + ed2bb38 commit 8a2de33
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/osd/OSD.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1513,6 +1513,7 @@ void OSD::load_pgs()
derr << "failed to list pgs: " << cpp_strerror(-r) << dendl;
}

map<pg_t, interval_set<snapid_t> > pgs;
for (vector<coll_t>::iterator it = ls.begin();
it != ls.end();
it++) {
Expand Down Expand Up @@ -1546,8 +1547,16 @@ void OSD::load_pgs()
if (snap != CEPH_NOSNAP) {
dout(10) << "load_pgs skipping snapped dir " << *it
<< " (pg " << pgid << " snap " << snap << ")" << dendl;
pgs[pgid].insert(snap);
continue;
}
pgs[pgid];
}

for (map<pg_t, interval_set<snapid_t> >::iterator i = pgs.begin();
i != pgs.end();
++i) {
pg_t pgid(i->first);

if (!osdmap->have_pg_pool(pgid.pool())) {
dout(10) << __func__ << ": skipping PG " << pgid << " because we don't have pool "
Expand All @@ -1562,13 +1571,15 @@ void OSD::load_pgs()
}

bufferlist bl;
epoch_t map_epoch = PG::peek_map_epoch(store, *it, &bl);
epoch_t map_epoch = PG::peek_map_epoch(store, coll_t(pgid), &bl);

PG *pg = _open_lock_pg(map_epoch == 0 ? osdmap : service.get_map(map_epoch), pgid);

// read pg state, log
pg->read_state(store, bl);

pg->check_ondisk_snap_colls(i->second);

set<pg_t> split_pgs;
if (osdmap->have_pg_pool(pg->info.pgid.pool()) &&
pg->info.pgid.is_split(pg->get_osdmap()->get_pg_num(pg->info.pgid.pool()),
Expand Down
12 changes: 12 additions & 0 deletions src/osd/PG.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3134,6 +3134,18 @@ void PG::sub_op_scrub_stop(OpRequestRef op)
osd->send_message_osd_cluster(reply, m->get_connection());
}


void PG::check_ondisk_snap_colls(
const interval_set<snapid_t> &ondisk_snapcolls)
{
if (!(ondisk_snapcolls == snap_collections)) {
derr << "ondisk_snapcolls: " << ondisk_snapcolls
<< " does not match snap_collections " << snap_collections
<< " repairing." << dendl;
snap_collections = ondisk_snapcolls;
}
}

void PG::clear_scrub_reserved()
{
osd->scrub_wq.dequeue(this);
Expand Down
2 changes: 2 additions & 0 deletions src/osd/PG.h
Original file line number Diff line number Diff line change
Expand Up @@ -1002,6 +1002,8 @@ class PG {
ino_t hino, const hobject_t &hoid,
const map<string, bufferptr> &attrs,
set<snapid_t> *snapcolls) {};
void check_ondisk_snap_colls(
const interval_set<snapid_t> &ondisk_snapcolls);
void clear_scrub_reserved();
void scrub_reserve_replicas();
void scrub_unreserve_replicas();
Expand Down

0 comments on commit 8a2de33

Please sign in to comment.