use of co.cask.cdap.proto.NotRunningProgramLiveInfo in project cdap by caskdata.
the class ProgramLifecycleHttpHandler method getInstanceCount.
/**
* Returns the number of instances currently running for different runnables for different programs
*/
private int getInstanceCount(ProgramId programId, String runnableId) {
ProgramLiveInfo info = runtimeService.getLiveInfo(programId);
int count = 0;
if (info instanceof NotRunningProgramLiveInfo) {
return count;
}
if (info instanceof Containers) {
Containers containers = (Containers) info;
for (Containers.ContainerInfo container : containers.getContainers()) {
if (container.getName().equals(runnableId)) {
count++;
}
}
return count;
}
// The get instances contract for both flowlets and services should be re-thought and fixed as part of CDAP-1091
if (programId.getType() == ProgramType.SERVICE) {
return getRequestedServiceInstances(programId);
}
// Not running on YARN default 1
return 1;
}
use of co.cask.cdap.proto.NotRunningProgramLiveInfo in project cdap by caskdata.
the class DistributedProgramRuntimeService method getLiveInfo.
@Override
public ProgramLiveInfo getLiveInfo(ProgramId program) {
String twillAppName = TwillAppNames.toTwillAppName(program);
Iterator<TwillController> controllers = twillRunner.lookup(twillAppName).iterator();
// this will return an empty Json if there is no live instance
if (controllers.hasNext()) {
TwillController controller = controllers.next();
if (controllers.hasNext()) {
LOG.warn("Expected at most one live instance of Twill app {} but found at least two.", twillAppName);
}
ResourceReport report = controller.getResourceReport();
if (report != null) {
DistributedProgramLiveInfo liveInfo = new DistributedProgramLiveInfo(program, report.getApplicationId());
// if program type is flow then the container type is flowlet.
Containers.ContainerType containerType = ProgramType.FLOW.equals(program.getType()) ? FLOWLET : Containers.ContainerType.valueOf(program.getType().name());
for (Map.Entry<String, Collection<TwillRunResources>> entry : report.getResources().entrySet()) {
for (TwillRunResources resources : entry.getValue()) {
liveInfo.addContainer(new ContainerInfo(containerType, entry.getKey(), resources.getInstanceId(), resources.getContainerId(), resources.getHost(), resources.getMemoryMB(), resources.getVirtualCores(), resources.getDebugPort()));
}
}
// Add a list of announced services and their discoverables to the liveInfo.
liveInfo.addServices(report.getServices());
return liveInfo;
}
}
return new NotRunningProgramLiveInfo(program);
}
Aggregations