OPTION(mds_hack_log_expire_for_better_stats, 0, OPT_BOOL, false),
OPTION(mds_verify_scatter, 0, OPT_BOOL, false),
OPTION(mds_debug_scatterstat, 0, OPT_BOOL, false),
+ OPTION(mds_debug_frag, 0, OPT_BOOL, false),
OPTION(mds_kill_mdstable_at, 0, OPT_INT, 0),
OPTION(mds_kill_export_at, 0, OPT_INT, 0),
OPTION(mds_kill_import_at, 0, OPT_INT, 0),
// set these to non-zero to specify kill points
bool mds_verify_scatter;
bool mds_debug_scatterstat;
+ bool mds_debug_frag;
int mds_kill_mdstable_at;
int mds_kill_export_at;
int mds_kill_import_at;
return all;
}
+void CInode::verify_dirfrags()
+{
+ bool bad = false;
+ for (map<frag_t,CDir*>::iterator p = dirfrags.begin(); p != dirfrags.end(); ++p) {
+ if (!dirfragtree.is_leaf(p->first)) {
+ dout(0) << "have open dirfrag " << p->first << " but not leaf in " << dirfragtree
+ << ": " << *p->second << dendl;
+ bad = true;
+ }
+ }
+ assert(!bad);
+}
+
CDir *CInode::get_approx_dirfrag(frag_t fg)
{
CDir *dir = get_dirfrag(fg);
dirfragtree.force_to_leaf(p->first);
}
}
+ if (g_conf.mds_debug_frag)
+ verify_dirfrags();
}
break;