@Test
  public void test() 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()));
      }
    }
    Tracker tracker = new Tracker();
    TRACKER = tracker;
    region.requestFlush(tracker);
    tracker.await();
    assertNull(tracker.reason);
    assertTrue(tracker.beforeExecutionCalled);
    assertTrue(tracker.afterExecutionCalled);

    // request flush on a region with empty memstore should still success
    tracker = new Tracker();
    TRACKER = tracker;
    region.requestFlush(tracker);
    tracker.await();
    assertNull(tracker.reason);
    assertTrue(tracker.beforeExecutionCalled);
    assertTrue(tracker.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