NameNodeMetrics { public void shutdown() { DefaultMetricsSystem.shutdown(); } NameNodeMetrics(String processName, String sessionId, int[] intervals,
      final JvmMetrics jvmMetrics); @Metric("Number of file system operations") long totalFileOps(); static NameNodeMetrics create(Configuration conf, NamenodeRole r); JvmMetrics getJvmMetrics(); void shutdown(); void incrGetBlockLocations(); void incrFilesCreated(); void incrCreateFileOps(); void incrFilesAppended(); void incrAddBlockOps(); void incrGetAdditionalDatanodeOps(); void incrFilesRenamed(); void incrFilesTruncated(); void incrFilesDeleted(long delta); void incrDeleteFileOps(); void incrGetListingOps(); void incrFilesInGetListingOps(int delta); void incrFileInfoOps(); void incrCreateSymlinkOps(); void incrGetLinkTargetOps(); void incrAllowSnapshotOps(); void incrDisAllowSnapshotOps(); void incrCreateSnapshotOps(); void incrDeleteSnapshotOps(); void incrRenameSnapshotOps(); void incrListSnapshottableDirOps(); void incrSnapshotDiffReportOps(); void incrBlockReceivedAndDeletedOps(); void incrStorageBlockReportOps(); void setBlockOpsQueued(int size); void addBlockOpsBatched(int count); void addTransaction(long latency); void incrTransactionsBatchedInSync(); void addSync(long elapsed); void setFsImageLoadTime(long elapsed); void addBlockReport(long latency); void addCacheBlockReport(long latency); void setSafeModeTime(long elapsed); void addGetEdit(long latency); void addGetImage(long latency); void addPutImage(long latency);  }
@Test(timeout = 300000) public void testTransactionSinceLastCheckpointMetrics() throws Exception { Random random = new Random(); int retryCount = 0; while (retryCount < 5) { try { int basePort = 10060 + random.nextInt(100) * 2; MiniDFSNNTopology topology = new MiniDFSNNTopology() .addNameservice(new MiniDFSNNTopology.NSConf("ns1") .addNN(new MiniDFSNNTopology.NNConf("nn1").setHttpPort(basePort)) .addNN(new MiniDFSNNTopology.NNConf("nn2").setHttpPort(basePort + 1))); HdfsConfiguration conf2 = new HdfsConfiguration(); conf2.setInt( DFSConfigKeys.DFS_NAMENODE_CHECKPOINT_TXNS_KEY, 100); conf2.setInt( DFSConfigKeys.DFS_NAMENODE_CHECKPOINT_CHECK_PERIOD_KEY, 1); conf2.setInt(DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY, 1); MiniDFSCluster cluster2 = new MiniDFSCluster.Builder(conf2) .nnTopology(topology).numDataNodes(1).build(); cluster2.waitActive(); DistributedFileSystem fs2 = cluster2.getFileSystem(0); NameNode nn0 = cluster2.getNameNode(0); NameNode nn1 = cluster2.getNameNode(1); cluster2.transitionToActive(0); fs2.mkdirs(new Path("/tmp-t1")); fs2.mkdirs(new Path("/tmp-t2")); HATestUtil.waitForStandbyToCatchUp(nn0, nn1); assertEquals("SBN failed to track 2 transactions pre-checkpoint.", 4L, cluster2.getNameNode(1).getNamesystem() .getTransactionsSinceLastCheckpoint()); for (int i = 1; i <= 94; i++) { fs2.mkdirs(new Path("/tmp-" + i)); } HATestUtil.waitForStandbyToCatchUp(nn0, nn1); HATestUtil.waitForCheckpoint(cluster2, 1, ImmutableList.of(100)); assertEquals("Should be zero right after the checkpoint.", 0L, cluster2.getNameNode(1).getNamesystem() .getTransactionsSinceLastCheckpoint()); fs2.mkdirs(new Path("/tmp-t3")); fs2.mkdirs(new Path("/tmp-t4")); HATestUtil.waitForStandbyToCatchUp(nn0, nn1); assertEquals("SBN failed to track 2 added txns after the ckpt.", 4L, cluster2.getNameNode(1).getNamesystem() .getTransactionsSinceLastCheckpoint()); cluster2.shutdown(); break; } catch (Exception e) { LOG.warn("Unable to set up HA cluster, exception thrown: " + e); retryCount++; } } }