]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
CDir: check_rstats will now print out dir stats whenever there's a bug.
authorGreg Farnum <gregory.farnum@dreamhost.com>
Fri, 8 Apr 2011 18:17:48 +0000 (11:17 -0700)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Fri, 8 Apr 2011 18:17:48 +0000 (11:17 -0700)
Previously it only printed out dir stats at high debug levels, which
meant you could get output of the dentries without seeing what the
totals were supposed to be!

Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/mds/CDir.cc

index 625e295664417a6edd40d1ef94e9a87c96b70270..a93664ecb1faa03a7bfca08c4cc1f46c43bce12d 100644 (file)
@@ -210,12 +210,12 @@ bool CDir::check_rstats()
     return true;
   }
   // first, check basic counts
-  dout(20) << "get_num_head_items() = " << get_num_head_items()
-           << "; fnode.fragstat.nfiles=" << fnode.fragstat.nfiles
-           << " fnode.fragstat.nsubdirs=" << fnode.fragstat.nsubdirs << dendl;
   if(!(get_num_head_items()==
       (fnode.fragstat.nfiles + fnode.fragstat.nsubdirs))) {
     dout(1) << "mismatch between head items and fnode.fragstat! printing dentries" << dendl;
+    dout(1) << "get_num_head_items() = " << get_num_head_items()
+             << "; fnode.fragstat.nfiles=" << fnode.fragstat.nfiles
+             << " fnode.fragstat.nsubdirs=" << fnode.fragstat.nsubdirs << dendl;
     for (map_t::iterator i = items.begin(); i != items.end(); ++i) {
       //if (i->second->get_linkage()->is_primary())
         dout(1) << *(i->second) << dendl;
@@ -223,6 +223,10 @@ bool CDir::check_rstats()
     assert(!g_conf.mds_debug_scatterstat ||
            (get_num_head_items() ==
             (fnode.fragstat.nfiles + fnode.fragstat.nsubdirs)));
+  } else {
+    dout(20) << "get_num_head_items() = " << get_num_head_items()
+             << "; fnode.fragstat.nfiles=" << fnode.fragstat.nfiles
+             << " fnode.fragstat.nsubdirs=" << fnode.fragstat.nsubdirs << dendl;
   }
 
   nest_info_t sub_info;
@@ -232,12 +236,12 @@ bool CDir::check_rstats()
     }
   }
 
-  dout(25) << "total of child dentrys: " << sub_info << dendl;
-  dout(25) << "my rstats:              " << fnode.rstat << dendl;
   if ((!(sub_info.rbytes == fnode.rstat.rbytes)) ||
       (!(sub_info.rfiles == fnode.rstat.rfiles)) ||
       (!(sub_info.rsubdirs == fnode.rstat.rsubdirs))) {
     dout(1) << "mismatch between child accounted_rstats and my rstats!" << dendl;
+    dout(1) << "total of child dentrys: " << sub_info << dendl;
+    dout(1) << "my rstats:              " << fnode.rstat << dendl;
     for (map_t::iterator i = items.begin(); i != items.end(); ++i) {
       if (i->second->get_linkage()->is_primary()) {
         dout(1) << *(i->second) << " "
@@ -245,7 +249,11 @@ bool CDir::check_rstats()
                 << dendl;
       }
     }
+  } else {
+    dout(25) << "total of child dentrys: " << sub_info << dendl;
+    dout(25) << "my rstats:              " << fnode.rstat << dendl;
   }
+
   assert(!g_conf.mds_debug_scatterstat || sub_info.rbytes == fnode.rstat.rbytes);
   assert(!g_conf.mds_debug_scatterstat || sub_info.rfiles == fnode.rstat.rfiles);
   assert(!g_conf.mds_debug_scatterstat || sub_info.rsubdirs == fnode.rstat.rsubdirs);