fnode.rstat.rbytes += pi->accounted_rstat.rbytes;
fnode.rstat.rfiles += pi->accounted_rstat.rfiles;
fnode.rstat.rsubdirs += pi->accounted_rstat.rsubdirs;
- fnode.rstat.rsnaprealms += pi->accounted_rstat.rsnaprealms;
+ fnode.rstat.rsnaps += pi->accounted_rstat.rsnaps;
if (pi->accounted_rstat.rctime > fnode.rstat.rctime)
fnode.rstat.rctime = pi->accounted_rstat.rctime;
case CEPH_LOCK_INEST:
{
+ // adjust summation
+ assert(is_auth());
+
fragtree_t tmpdft = dirfragtree;
nest_info_t rstat;
- rstat.rsubdirs = 1;
bool rstat_valid = true;
- // adjust summation
- assert(is_auth());
+ rstat.rsubdirs = 1;
+ if (const sr_t *srnode = get_projected_srnode(); srnode)
+ rstat.rsnaps = srnode->snaps.size();
+
mempool_inode *pi = get_projected_inode();
dout(20) << " orig rstat " << pi->rstat << dendl;
pi->rstat.version++;
}
}
nest_info.rsubdirs++; // it gets one to account for self
+ if (const sr_t *srnode = in->get_projected_srnode(); srnode)
+ nest_info.rsnaps += srnode->snaps.size();
+
// ...and that their sum matches our inode settings
if (!dir_info.same_sums(in->inode.dirstat) ||
!nest_info.same_sums(in->inode.rstat)) {
frag_info_t dir_info;
nest_info_t nest_info;
- nest_info.rsubdirs++; // it gets one to account for self
+ nest_info.rsubdirs = 1; // it gets one to account for self
+ if (const sr_t *srnode = diri->get_projected_srnode(); srnode)
+ nest_info.rsnaps = srnode->snaps.size();
diri->dirfragtree.get_leaves(frags);
for (list<frag_t>::iterator p = frags.begin(); p != frags.end(); ++p) {
pf->rstat.rbytes += linkunlink * rstat.rbytes;
pf->rstat.rfiles += linkunlink * rstat.rfiles;
pf->rstat.rsubdirs += linkunlink * rstat.rsubdirs;
- pf->rstat.rsnaprealms += linkunlink * rstat.rsnaprealms;
+ pf->rstat.rsnaps += linkunlink * rstat.rsnaps;
}
if (pf->fragstat.mtime == ctime) {
pf->fragstat.mtime = r.dirfrag_old_mtime;
auto &pi = diri->project_inode(false, true);
pi.inode.ctime = pi.inode.rstat.rctime = info.stamp;
+ pi.inode.rstat.rsnaps++;
pi.inode.version = diri->pre_dirty();
// project the snaprealm
auto &pi = diri->project_inode(false, true);
pi.inode.version = diri->pre_dirty();
pi.inode.ctime = pi.inode.rstat.rctime = mdr->get_op_stamp();
+ pi.inode.rstat.rsnaps--;
mdr->ls = mdlog->get_current_segment();
EUpdate *le = new EUpdate(mdlog, "rmsnap");
int64_t ranchors = 0;
encode(ranchors, bl);
}
- encode(rsnaprealms, bl);
+ encode(rsnaps, bl);
encode(rctime, bl);
ENCODE_FINISH(bl);
}
int64_t ranchors;
decode(ranchors, bl);
}
- decode(rsnaprealms, bl);
+ decode(rsnaps, bl);
decode(rctime, bl);
DECODE_FINISH(bl);
}
f->dump_unsigned("rbytes", rbytes);
f->dump_unsigned("rfiles", rfiles);
f->dump_unsigned("rsubdirs", rsubdirs);
- f->dump_unsigned("rsnaprealms", rsnaprealms);
+ f->dump_unsigned("rsnaps", rsnaps);
f->dump_stream("rctime") << rctime;
}
ls.back()->rbytes = 2;
ls.back()->rfiles = 3;
ls.back()->rsubdirs = 4;
- ls.back()->rsnaprealms = 6;
+ ls.back()->rsnaps = 6;
ls.back()->rctime = utime_t(7, 8);
}
out << " rc" << n.rctime;
if (n.rbytes)
out << " b" << n.rbytes;
- if (n.rsnaprealms)
- out << " sr" << n.rsnaprealms;
+ if (n.rsnaps)
+ out << " rs" << n.rsnaps;
if (n.rfiles || n.rsubdirs)
out << " " << n.rsize() << "=" << n.rfiles << "+" << n.rsubdirs;
out << ")";
int64_t rsubdirs = 0;
int64_t rsize() const { return rfiles + rsubdirs; }
- int64_t rsnaprealms = 0;
+ int64_t rsnaps = 0;
nest_info_t() {}
rbytes += fac*other.rbytes;
rfiles += fac*other.rfiles;
rsubdirs += fac*other.rsubdirs;
- rsnaprealms += fac*other.rsnaprealms;
+ rsnaps += fac*other.rsnaps;
}
// *this += cur - acc;
rbytes += cur.rbytes - acc.rbytes;
rfiles += cur.rfiles - acc.rfiles;
rsubdirs += cur.rsubdirs - acc.rsubdirs;
- rsnaprealms += cur.rsnaprealms - acc.rsnaprealms;
+ rsnaps += cur.rsnaps - acc.rsnaps;
}
bool same_sums(const nest_info_t &o) const {
rbytes == o.rbytes &&
rfiles == o.rfiles &&
rsubdirs == o.rsubdirs &&
- rsnaprealms == o.rsnaprealms;
+ rsnaps == o.rsnaps;
}
void encode(bufferlist &bl) const;