@Test
  public void testNotExecuted() throws IOException, InterruptedException {
    try (Table table = UTIL.getConnection().getTable(NAME)) {
      for (int i = 0; i < 100; i++) {
        byte[] row = Bytes.toBytes(i);
        table.put(
          new Put(row, true).add(CellBuilderFactory.create(CellBuilderType.SHALLOW_COPY).setRow(row)
            .setFamily(CF).setQualifier(QUALIFIER).setTimestamp(HConstants.LATEST_TIMESTAMP)
            .setType(Type.Put).setValue(Bytes.toBytes(i)).build()));
      }
    }
    // here we may have overlap when calling the CP hooks so we do not assert on TRACKER
    Tracker tracker1 = new Tracker();
    ARRIVE = new CountDownLatch(1);
    BLOCK = new CountDownLatch(1);
    region.requestFlush(tracker1);
    ARRIVE.await();

    Tracker tracker2 = new Tracker();
    region.requestFlush(tracker2);
    tracker2.await();
    assertNotNull(tracker2.reason);
    assertFalse(tracker2.beforeExecutionCalled);
    assertFalse(tracker2.afterExecutionCalled);

    BLOCK.countDown();
    tracker1.await();
    assertNull(tracker1.reason);
    assertTrue(tracker1.beforeExecutionCalled);
    assertTrue(tracker1.afterExecutionCalled);
  }
Confirm that the function of FlushLifeCycleTracker is OK as we do not use it in our own code.
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.java