}
~ValidationContinuation() override {
- delete shadow_in;
+ if (shadow_in) {
+ delete shadow_in;
+ in->mdcache->num_shadow_inodes--;
+ }
}
/**
assert(in->is_dir());
if (in->is_base()) {
- shadow_in = new CInode(in->mdcache);
- in->mdcache->create_unlinked_system_inode(shadow_in,
- in->inode.ino,
- in->inode.mode);
+ if (!shadow_in) {
+ shadow_in = new CInode(in->mdcache);
+ in->mdcache->create_unlinked_system_inode(shadow_in, in->inode.ino, in->inode.mode);
+ in->mdcache->num_shadow_inodes++;
+ }
shadow_in->fetch(get_internal_callback(INODE));
return false;
} else {
strays[i] = NULL;
}
+ num_shadow_inodes = 0;
num_inodes_with_caps = 0;
max_dir_commit_size = g_conf->mds_dir_max_commit_size ?
static MemoryModel::snap baseline = last;
// check client caps
- assert(CInode::count() == inode_map.size());
+ assert(CInode::count() == inode_map.size() + snap_inode_map.size() + num_shadow_inodes);
double caps_per_inode = 0.0;
if (CInode::count())
caps_per_inode = (double)Capability::count() / (double)CInode::count();
DecayRate decayrate;
+ int num_shadow_inodes;
+
int num_inodes_with_caps;
unsigned max_dir_commit_size;