]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix recovery on snapped files
authorSage Weil <sage@newdream.net>
Thu, 17 Jul 2008 22:57:35 +0000 (15:57 -0700)
committerSage Weil <sage@newdream.net>
Thu, 17 Jul 2008 22:57:35 +0000 (15:57 -0700)
src/mds/MDCache.cc
src/mds/snap.cc
src/osdc/Filer.cc

index b49d8ccaa3635cec8864522f8fe0bdcac586baaa..1df8140cd87c9cecb1bf1c1871c1799c6f68f445 100644 (file)
@@ -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<snapid_t>& 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 {
index db4ed20d366197d57bab251641a11a220f635f34..de0c2798bcf932b493f850cb5436e217334476c7 100644 (file)
@@ -92,17 +92,20 @@ void SnapRealm::build_snap_set(set<snapid_t> &s, snapid_t first, snapid_t last)
  */
 const set<snapid_t>& 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;
 }
 
index 922129696fe11b93769fd0d44e23cd485502f926..4cd4494d972ffb10aff7df2d4f8aa8fef62704ba 100644 (file)
@@ -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<ObjectExtent>::iterator p = probe->probing.begin();
        p != probe->probing.end();