From f033366a55c3b4fc5a8b3419dee2b679c0c9ba6d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 17 Jul 2008 15:57:35 -0700 Subject: [PATCH] mds: fix recovery on snapped files --- src/mds/MDCache.cc | 5 ++++- src/mds/snap.cc | 23 +++++++++++++---------- src/osdc/Filer.cc | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index b49d8ccaa3635..1df8140cd87c9 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -3134,13 +3134,16 @@ void MDCache::do_file_recover() CInode *in = *file_recover_queue.begin(); file_recover_queue.erase(in); + snapid_t snap = in->last; + if (snap == 0) snap = CEPH_NOSNAP; // FIXME const vector& snaps = in->find_snaprealm()->get_snap_vector(); if (in->inode.max_size > in->inode.size) { dout(10) << "do_file_recover starting " << in->inode.size << "/" << in->inode.max_size + << " snap " << snap << " snaps " << snaps << " " << *in << dendl; file_recovering.insert(in); - mds->filer->probe(in->inode.ino, &in->inode.layout, CEPH_NOSNAP, snaps, + mds->filer->probe(in->inode.ino, &in->inode.layout, snap, snaps, in->inode.max_size, &in->inode.size, false, 0, new C_MDC_Recover(this, in)); } else { diff --git a/src/mds/snap.cc b/src/mds/snap.cc index db4ed20d36619..de0c2798bcf93 100644 --- a/src/mds/snap.cc +++ b/src/mds/snap.cc @@ -92,17 +92,20 @@ void SnapRealm::build_snap_set(set &s, snapid_t first, snapid_t last) */ const set& SnapRealm::get_snaps() { - if (!cached_snaps.size()) { - dout(10) << "get_snaps " << cached_snaps << " (cached)" << dendl; - return cached_snaps; + if (cached_snaps.empty()) { + cached_snaps.clear(); + cached_snap_vec.clear(); + build_snap_set(cached_snaps, 0, CEPH_NOSNAP); + + dout(10) << "get_snaps " << cached_snaps + << " (highwater " << snap_highwater << ")" + << dendl; + } else { + dout(10) << "get_snaps " << cached_snaps + << " (highwater " << snap_highwater << ")" + << " (cached)" + << dendl; } - - cached_snaps.clear(); - cached_snap_vec.clear(); - build_snap_set(cached_snaps, 0, CEPH_NOSNAP); - - dout(10) << "get_snaps " << cached_snaps - << " (highwater " << snap_highwater << ")" << dendl; return cached_snaps; } diff --git a/src/osdc/Filer.cc b/src/osdc/Filer.cc index 922129696fe11..4cd4494d972ff 100644 --- a/src/osdc/Filer.cc +++ b/src/osdc/Filer.cc @@ -86,7 +86,7 @@ void Filer::_probe(Probe *probe) << dendl; // map range onto objects - file_to_extents(probe->ino, &probe->layout, 0, probe->from, probe->probing_len, probe->probing); + file_to_extents(probe->ino, &probe->layout, probe->snap, probe->from, probe->probing_len, probe->probing); for (list::iterator p = probe->probing.begin(); p != probe->probing.end(); -- 2.39.5