@Override
 public boolean deleteLineage(long lineageId, DeleteLineageOptions options)
     throws IOException, LineageDoesNotExistException, LineageDeletionException, AlluxioException {
   LineageMasterClient masterClient = mContext.acquireMasterClient();
   try {
     boolean result = masterClient.deleteLineage(lineageId, options.isCascade());
     LOG.info("{} delete lineage {}", result ? "Succeeded to " : "Failed to ", lineageId);
     return result;
   } finally {
     mContext.releaseMasterClient(masterClient);
   }
 }
  @Override
  public List<LineageInfo> getLineageInfoList(GetLineageInfoListOptions options)
      throws IOException {
    LineageMasterClient masterClient = mContext.acquireMasterClient();

    try {
      return masterClient.getLineageInfoList();
    } catch (ConnectionFailedException e) {
      throw new IOException(e);
    } finally {
      mContext.releaseMasterClient(masterClient);
    }
  }
 @Override
 public long createLineage(
     List<AlluxioURI> inputFiles,
     List<AlluxioURI> outputFiles,
     Job job,
     CreateLineageOptions options)
     throws FileDoesNotExistException, AlluxioException, IOException {
   // TODO(yupeng): relax this to support other type of jobs
   Preconditions.checkState(
       job instanceof CommandLineJob, PreconditionMessage.COMMAND_LINE_LINEAGE_ONLY);
   LineageMasterClient masterClient = mContext.acquireMasterClient();
   try {
     long lineageId =
         masterClient.createLineage(
             stripURIList(inputFiles), stripURIList(outputFiles), (CommandLineJob) job);
     LOG.info("Created lineage {}", lineageId);
     return lineageId;
   } finally {
     mContext.releaseMasterClient(masterClient);
   }
 }