@Nullable
  public Collection<UfsStatus> fetchChildrenIfAbsent(RpcContext rpcContext, AlluxioURI path,
       MountTable mountTable, boolean useFallback)
      throws InterruptedException, InvalidPathException {
    Future<Collection<UfsStatus>> prefetchJob = mActivePrefetchJobs.get(path);
    if (prefetchJob != null) {
      while (true) {
        try {
          Collection<UfsStatus> statuses = prefetchJob.get(
              mUfsFetchTimeout, TimeUnit.MILLISECONDS);
          if (statuses != null) {
            DefaultFileSystemMaster.Metrics.METADATA_SYNC_PREFETCH_PATHS.inc(statuses.size());
          }
          DefaultFileSystemMaster.Metrics.METADATA_SYNC_PREFETCH_SUCCESS.inc();
          return statuses;
        } catch (TimeoutException e) {
          if (rpcContext != null) {
            rpcContext.throwIfCancelled();
          }
          DefaultFileSystemMaster.Metrics.METADATA_SYNC_PREFETCH_RETRIES.inc();
        } catch (InterruptedException | ExecutionException e) {
          LogUtils.warnWithException(LOG,
              "Failed to get result for prefetch job on alluxio path {}", path, e);
          DefaultFileSystemMaster.Metrics.METADATA_SYNC_PREFETCH_FAIL.inc();
          if (e instanceof InterruptedException) {
            Thread.currentThread().interrupt();
            throw (InterruptedException) e;
          }
          break;
        } finally {
          mActivePrefetchJobs.remove(path);
        }
      }
    }
    Collection<UfsStatus> children = getChildren(path);
    if (children != null) {
      return children;
    }

    if (useFallback) {
      if (prefetchJob != null) {
        prefetchJob.cancel(false);
      }
      return getChildrenIfAbsent(path, mountTable);
    }
    return null;
  }
@Test
  public void testUseFallback() throws Exception {
    createUfsDirs("a");
    createUfsFile("a/b");
    Collection<UfsStatus> children = mCache
        .fetchChildrenIfAbsent(null, new AlluxioURI("/a"), mMountTable);
    assertEquals(1, children.size());
    children.forEach(stat -> assertEquals("b", stat.getName()));
  }