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 {
*/
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;
}
<< 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();