@Override
  public boolean isAbsentSince(AlluxioURI path, long absentSince) {
    MountInfo mountInfo = getMountInfo(path);
    if (mountInfo == null) {
      return false;
    }
    AlluxioURI mountBaseUri = mountInfo.getAlluxioUri();

    while (path != null && !path.equals(mountBaseUri)) {
      Pair<Long, Long> cacheResult = mCache.getIfPresent(path.getPath());

      if (cacheResult != null && cacheResult.getFirst() != null
          && cacheResult.getSecond() != null
          && cacheResult.getFirst() >= absentSince
          && cacheResult.getSecond() == mountInfo.getMountId()) {
        return true;
      }
      path = path.getParent();
    }
    // Reached the root, without finding anything in the cache.
    return false;
  }
@Test
  public void removePath() throws Exception {
    String ufsBase = "/a/b";
    String alluxioBase = "/mnt" + ufsBase;
    // Create ufs directories
    assertTrue((new File(mLocalUfsPath + ufsBase)).mkdirs());

    // 'base + /c' will be the first absent path
    process(new AlluxioURI(alluxioBase + "/c/d"));
    checkPaths(new AlluxioURI(alluxioBase + "/c"));

    // Create additional ufs directories
    assertTrue((new File(mLocalUfsPath + ufsBase + "/c/d")).mkdirs());
    process(new AlluxioURI(alluxioBase + "/c/d"));

    assertFalse(mUfsAbsentPathCache.isAbsentSince(new AlluxioURI("/mnt/a/b/c/d"),
        UfsAbsentPathCache.ALWAYS));
    assertFalse(mUfsAbsentPathCache.isAbsentSince(new AlluxioURI("/mnt/a/b/c"),
        UfsAbsentPathCache.ALWAYS));
    assertFalse(mUfsAbsentPathCache.isAbsentSince(new AlluxioURI("/mnt/a/b"),
        UfsAbsentPathCache.ALWAYS));
    assertFalse(mUfsAbsentPathCache.isAbsentSince(new AlluxioURI("/mnt/a"),
        UfsAbsentPathCache.ALWAYS));
    assertFalse(mUfsAbsentPathCache.isAbsentSince(new AlluxioURI("/mnt/"),
        UfsAbsentPathCache.ALWAYS));
  }