public static String programIdFor(ProgramId program, SchedulableProgramType programType) { return String.format("%s:%s:%s:%s:%s", program.getNamespace(), program.getApplication(), program.getVersion(), programType.name(), program.getProgram()); } }
public ProgramLiveInfo(ProgramId programId, String runtime) { this.app = programId.getApplication(); this.type = programId.getType().getPrettyName(); this.name = programId.getProgram(); this.runtime = runtime; }
private LoggingContext createLoggingContext(ProgramId programId, RunId runId, @Nullable WorkflowProgramInfo workflowProgramInfo) { if (workflowProgramInfo == null) { return new MapReduceLoggingContext(programId.getNamespace(), programId.getApplication(), programId.getProgram(), runId.getId()); } ProgramId workflowProramId = programId.getParent().workflow(workflowProgramInfo.getName()); return new WorkflowProgramLoggingContext(workflowProramId.getNamespace(), workflowProramId.getApplication(), workflowProramId.getProgram(), workflowProgramInfo.getRunId().getId(), ProgramType.MAPREDUCE, programId.getProgram(), runId.getId()); }
private static WorkerSpecification getWorkerSpecOrFail(ProgramId id, ApplicationSpecification appSpec) { WorkerSpecification workerSpecification = appSpec.getWorkers().get(id.getProgram()); if (workerSpecification == null) { throw new NoSuchElementException("no such worker @ namespace id: " + id.getNamespaceId() + ", app id: " + id.getApplication() + ", worker id: " + id.getProgram()); } return workerSpecification; }
private static Map<String, String> getMetricsContext(ProgramType type, ProgramId programId) { return ImmutableMap.of(Constants.Metrics.Tag.NAMESPACE, programId.getNamespace(), Constants.Metrics.Tag.APP, programId.getApplication(), ProgramTypeMetricTag.getTagName(type), programId.getProgram()); }
@Override public int hashCode() { Integer hashCode = this.hashCode; if (hashCode == null) { this.hashCode = hashCode = Objects.hash(super.hashCode(), getNamespace(), getApplication(), getVersion(), type, program); } return hashCode; }
@Override public Void call() throws Exception { String namespace = String.format("%s.%s", programId.getApplication(), programId.getProgram()); NamespaceId namespaceId = programId.getNamespaceId(); for (Map.Entry<String, Collection<Long>> entry : streamGroups.asMap().entrySet()) { streamConsumerFactory.dropAll(namespaceId.stream(entry.getKey()), namespace, entry.getValue()); } queueAdmin.dropAllForFlow(programId.getParent().flow(programId.getEntityName())); return null; } });
public static Program fromEntityId(ProgramId programId) { return new Program(Id.Application.fromEntityId(programId.getParent()), programId.getType(), programId.getProgram()); } }
@Override public List<TriggerInfo> apply(ProgramRunInfo runInfo) { Map<String, String> runtimeArgs = context.getProgramRuntimeArguments(runInfo.getProgramRunId()); TriggerInfo triggerInfo = new DefaultProgramStatusTriggerInfo(programId.getNamespace(), context.getApplicationSpecification(programId.getParent()), ProgramType.valueOf(programId.getType().name()), programId.getProgram(), RunIds.fromString(runInfo.getProgramRunId().getRun()), runInfo.getProgramStatus(), context.getWorkflowToken(runInfo.getProgramRunId()), runtimeArgs); return Collections.singletonList(triggerInfo); } };
@Override public void perform(Arguments arguments, PrintStream output) throws Exception { ProgramId programId = parseProgramId(arguments, elementType); String appName = programId.getApplication(); String appVersion = programId.getVersion(); String programName = programId.getProgram(); programClient.stop(programId); output.printf("Successfully stopped %s '%s' of application '%s.%s'\n", elementType.getName(), programName, appName, appVersion); }
@Override public MDSKey getKey(ProgramId programId) { MDSKey.Builder keyBuilder = new MDSKey.Builder() .add(programId.getNamespace()) .add(programId.getApplication()); // If programId is empty, this is actually applicationId if (!programId.getEntityName().isEmpty()) { keyBuilder.add(programId.getType().getCategoryName()); keyBuilder.add(programId.getEntityName()); } return keyBuilder.build(); }
private void addProgram(MDSKey.Builder keyBuilder, ProgramId program) { keyBuilder.add(PROGRAM_MARKER) .add(program.getNamespace()) .add(program.getParent().getEntityName()) .add(program.getType().getCategoryName()) .add(program.getEntityName()); }
private boolean programExists(ProgramId id, ApplicationSpecification appSpec) { switch (id.getType()) { case MAPREDUCE: return appSpec.getMapReduce().containsKey(id.getProgram()); case SERVICE: return appSpec.getServices().containsKey(id.getProgram()); case SPARK: return appSpec.getSpark().containsKey(id.getProgram()); case WORKER: return appSpec.getWorkers().containsKey(id.getProgram()); case WORKFLOW: return appSpec.getWorkflows().containsKey(id.getProgram()); default: throw new IllegalArgumentException("Unexpected ProgramType " + id.getType()); } }
protected AbstractTwillProgramController(ProgramId programId, TwillController twillController, RunId runId) { super(programId.run(runId)); this.twillController = twillController; }
/** * Creates a {@link ProgramId} with no program name. This allows matching * for all datasets associated with an Application as opposed to a single program. */ public static ProgramId getProgramId(ApplicationId applicationId) { // Use empty programId to denote applicationId return new ProgramId(applicationId, ProgramType.WORKER, ""); }
public WorkflowToken getWorkflowToken(ProgramId workflowId, String workflowRunId) { Preconditions.checkArgument(ProgramType.WORKFLOW == workflowId.getType()); // Workflow token is stored with following key: // [wft][namespace][app][version][WORKFLOW][workflowName][workflowRun] MDSKey key = getProgramKeyBuilder(TYPE_WORKFLOW_TOKEN, workflowId.run(workflowRunId)).build(); BasicWorkflowToken workflowToken = get(key, BasicWorkflowToken.class); if (workflowToken == null) { LOG.debug("No workflow token available for workflow: {}, runId: {}", workflowId, workflowRunId); // Its ok to not allow any updates by returning a 0 size token. return new BasicWorkflowToken(0); } return workflowToken; }
/** * Get the profile id for the given program, given arguments for a run. All non-workflow program types will use the * native profile. Workflow program types will use whatever profile is specified in its arguments, or the native * profile if none is specified. * * @param programId program to get the profile for * @param args arguments for a program run * @return the profile id for the program run */ public static ProfileId getProfileIdForProgram(ProgramId programId, Map<String, String> args) { if (programId.getType() == ProgramType.WORKFLOW) { return getProfileIdFromArgs(programId.getNamespaceId(), args).orElse(ProfileId.NATIVE); } return ProfileId.NATIVE; }
@Test public void testStopBeforeStart() throws RuntimeException { ProgramId programId = new ProgramId("account1", "invalidApp", ProgramType.MAPREDUCE, "InvalidMR"); long now = System.currentTimeMillis(); String pid = RunIds.generate().getId(); store.setStop(programId.run(pid), now, ProgramController.State.ERROR.getRunStatus(), ByteBuffer.allocate(0).array()); Assert.assertNull(store.getRun(programId.run(pid))); }
@Override public Map<String, String> getSystemPropertiesToAdd() { ImmutableMap.Builder<String, String> properties = ImmutableMap.builder(); properties.put(ENTITY_NAME_KEY, programId.getEntityName()); properties.put(VERSION_KEY, programId.getVersion()); String description = programSpec.getDescription(); if (!Strings.isNullOrEmpty(description)) { properties.put(DESCRIPTION_KEY, description); } properties.put(CREATION_TIME_KEY, creationTime); return properties.build(); }