/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.master.lineage;
import alluxio.AlluxioURI;
import alluxio.Constants;
import alluxio.RpcUtils;
import alluxio.RpcUtils.RpcCallable;
import alluxio.RpcUtils.RpcCallableThrowsIOException;
import alluxio.exception.AlluxioException;
import alluxio.job.CommandLineJob;
import alluxio.job.JobConf;
import alluxio.thrift.AlluxioTException;
import alluxio.thrift.CommandLineJobInfo;
import alluxio.thrift.LineageInfo;
import alluxio.thrift.LineageMasterClientService;
import alluxio.thrift.TTtlAction;
import alluxio.wire.ThriftUtils;
import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.concurrent.ThreadSafe;
/**
* This class is a Thrift handler for lineage master RPCs invoked by an Alluxio client.
*/
@ThreadSafe
public final class LineageMasterClientServiceHandler implements LineageMasterClientService.Iface {
private static final Logger LOG =
LoggerFactory.getLogger(LineageMasterClientServiceHandler.class);
private final LineageMaster mLineageMaster;
/**
* Creates a new instance of {@link LineageMasterClientServiceHandler}.
*
* @param lineageMaster the {@link LineageMaster} the handler uses internally
*/
public LineageMasterClientServiceHandler(LineageMaster lineageMaster) {
Preconditions.checkNotNull(lineageMaster);
mLineageMaster = lineageMaster;
}
@Override
public long getServiceVersion() {
return Constants.LINEAGE_MASTER_CLIENT_SERVICE_VERSION;
}
@Override
public long createLineage(final List<String> inputFiles, final List<String> outputFiles,
final CommandLineJobInfo jobInfo) throws AlluxioTException {
return RpcUtils.call(LOG, new RpcCallableThrowsIOException<Long>() {
@Override
public Long call() throws AlluxioException, IOException {
// deserialization
List<AlluxioURI> inputFilesUri = new ArrayList<>();
for (String inputFile : inputFiles) {
inputFilesUri.add(new AlluxioURI(inputFile));
}
List<AlluxioURI> outputFilesUri = new ArrayList<>();
for (String outputFile : outputFiles) {
outputFilesUri.add(new AlluxioURI(outputFile));
}
CommandLineJob job = new CommandLineJob(jobInfo.getCommand(),
new JobConf(jobInfo.getConf().getOutputFile()));
return mLineageMaster.createLineage(inputFilesUri, outputFilesUri, job);
}
});
}
@Override
public boolean deleteLineage(final long lineageId, final boolean cascade)
throws AlluxioTException {
return RpcUtils.call(LOG, new RpcCallable<Boolean>() {
@Override
public Boolean call() throws AlluxioException {
return mLineageMaster.deleteLineage(lineageId, cascade);
}
});
}
@Override
public long reinitializeFile(final String path, final long blockSizeBytes, final long ttl,
final TTtlAction ttlAction)
throws AlluxioTException {
return RpcUtils.call(LOG, new RpcCallable<Long>() {
@Override
public Long call() throws AlluxioException {
return mLineageMaster.reinitializeFile(path, blockSizeBytes, ttl,
ThriftUtils.fromThrift(ttlAction));
}
});
}
@Override
public void reportLostFile(final String path) throws AlluxioTException {
RpcUtils.call(LOG, new RpcCallable<Void>() {
@Override
public Void call() throws AlluxioException {
mLineageMaster.reportLostFile(path);
return null;
}
});
}
@Override
public List<LineageInfo> getLineageInfoList() throws AlluxioTException {
return RpcUtils.call(LOG, new RpcCallable<List<LineageInfo>>() {
@Override
public List<LineageInfo> call() throws AlluxioException {
List<LineageInfo> result = new ArrayList<>();
for (alluxio.wire.LineageInfo lineageInfo : mLineageMaster.getLineageInfoList()) {
result.add(ThriftUtils.toThrift(lineageInfo));
}
return result;
}
});
}
}