use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class AppMetadataStore method addWorkflowNodeState.
private void addWorkflowNodeState(ProgramId programId, String pid, Map<String, String> systemArgs, ProgramRunStatus status, @Nullable BasicThrowable failureCause) {
String workflowNodeId = systemArgs.get(ProgramOptionConstants.WORKFLOW_NODE_ID);
String workflowName = systemArgs.get(ProgramOptionConstants.WORKFLOW_NAME);
String workflowRun = systemArgs.get(ProgramOptionConstants.WORKFLOW_RUN_ID);
ApplicationId appId = Ids.namespace(programId.getNamespace()).app(programId.getApplication());
ProgramRunId workflowRunId = appId.workflow(workflowName).run(workflowRun);
// Node states will be stored with following key:
// workflowNodeState.namespace.app.WORKFLOW.workflowName.workflowRun.workflowNodeId
MDSKey key = getProgramKeyBuilder(TYPE_WORKFLOW_NODE_STATE, workflowRunId.getParent()).add(workflowRun).add(workflowNodeId).build();
WorkflowNodeStateDetail nodeStateDetail = new WorkflowNodeStateDetail(workflowNodeId, ProgramRunStatus.toNodeStatus(status), pid, failureCause);
write(key, nodeStateDetail);
// Get the run record of the Workflow which started this program
key = getProgramKeyBuilder(TYPE_RUN_RECORD_STARTED, workflowRunId.getParent()).add(workflowRunId.getRun()).build();
RunRecordMeta record = get(key, RunRecordMeta.class);
if (record != null) {
// Update the parent Workflow run record by adding node id and program run id in the properties
Map<String, String> properties = record.getProperties();
properties.put(workflowNodeId, pid);
write(key, new RunRecordMeta(record, properties));
}
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class AppMetadataStore method recordProgramSuspendResume.
private void recordProgramSuspendResume(ProgramId programId, String pid, String action) {
String fromType = TYPE_RUN_RECORD_STARTED;
String toType = TYPE_RUN_RECORD_SUSPENDED;
ProgramRunStatus toStatus = ProgramRunStatus.SUSPENDED;
if (action.equals("resume")) {
fromType = TYPE_RUN_RECORD_SUSPENDED;
toType = TYPE_RUN_RECORD_STARTED;
toStatus = ProgramRunStatus.RUNNING;
}
MDSKey key = getProgramKeyBuilder(fromType, programId).add(pid).build();
RunRecordMeta record = get(key, RunRecordMeta.class);
// Check without the version string only for default version
if (!upgradeComplete.get() && record == null && (programId.getVersion().equals(ApplicationId.DEFAULT_VERSION))) {
key = getVersionLessProgramKeyBuilder(fromType, programId).add(pid).build();
record = get(key, RunRecordMeta.class);
}
if (record == null) {
String msg = String.format("No meta for %s run record for namespace %s app %s program type %s " + "program %s pid %s exists", action.equals("suspend") ? "started" : "suspended", programId.getNamespace(), programId.getApplication(), programId.getType().name(), programId.getProgram(), pid);
LOG.error(msg);
throw new IllegalArgumentException(msg);
}
// Since the key contains the RunId/PID in addition to the programId, it is ok to deleteAll.
deleteAll(key);
key = getProgramKeyBuilder(toType, programId).add(pid).build();
write(key, new RunRecordMeta(record, null, toStatus));
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class AppMetadataStore method recordProgramStop.
private void recordProgramStop(ProgramId programId, String pid, long stopTs, ProgramRunStatus runStatus, @Nullable BasicThrowable failureCause, MDSKey.Builder builder) {
MDSKey key = getProgramKeyBuilder(TYPE_RUN_RECORD_STARTED, programId).add(pid).build();
RunRecordMeta started = getFirst(key, RunRecordMeta.class);
// Check without the version string only for default version
if (!upgradeComplete.get() && started == null && (programId.getVersion().equals(ApplicationId.DEFAULT_VERSION))) {
key = getVersionLessProgramKeyBuilder(TYPE_RUN_RECORD_STARTED, programId).add(pid).build();
started = getFirst(key, RunRecordMeta.class);
}
if (started == null) {
String msg = String.format("No meta for started run record for namespace %s app %s version %s program type %s " + "program %s pid %s exists", programId.getNamespace(), programId.getApplication(), programId.getVersion(), programId.getType().name(), programId.getProgram(), pid);
LOG.error(msg);
throw new IllegalArgumentException(msg);
}
if (started.getSystemArgs() != null && started.getSystemArgs().containsKey(ProgramOptionConstants.WORKFLOW_NAME)) {
addWorkflowNodeState(programId, pid, started.getSystemArgs(), runStatus, failureCause);
}
// Since the key contains the RunId/PID in addition to the programId, it is ok to deleteAll.
deleteAll(key);
key = builder.add(getInvertedTsKeyPart(started.getStartTs())).add(pid).build();
write(key, new RunRecordMeta(started, stopTs, runStatus));
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class AppMetadataStore method recordProgramStart.
private void recordProgramStart(ProgramId programId, String pid, long startTs, String twillRunId, Map<String, String> runtimeArgs, Map<String, String> systemArgs, MDSKey.Builder keyBuilder) {
String workflowrunId = null;
if (systemArgs != null && systemArgs.containsKey(ProgramOptionConstants.WORKFLOW_NAME)) {
// Program is started by Workflow. Add row corresponding to its node state.
addWorkflowNodeState(programId, pid, systemArgs, ProgramRunStatus.RUNNING, null);
workflowrunId = systemArgs.get(ProgramOptionConstants.WORKFLOW_RUN_ID);
}
MDSKey key = keyBuilder.add(pid).build();
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
builder.put("runtimeArgs", GSON.toJson(runtimeArgs, MAP_STRING_STRING_TYPE));
if (workflowrunId != null) {
builder.put("workflowrunid", workflowrunId);
}
RunRecordMeta meta = new RunRecordMeta(pid, startTs, null, ProgramRunStatus.RUNNING, builder.build(), systemArgs, twillRunId);
write(key, meta);
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class AppMetadataStore method getUnfinishedRun.
/**
* @return run records for runs that do not have start time in mds key for the run record.
*/
private RunRecordMeta getUnfinishedRun(ProgramId programId, String recordType, String runid) {
MDSKey runningKey = getProgramKeyBuilder(recordType, programId).add(runid).build();
RunRecordMeta runRecordMeta = get(runningKey, RunRecordMeta.class);
if (!upgradeComplete.get() && runRecordMeta == null && programId.getVersion().equals(ApplicationId.DEFAULT_VERSION)) {
runningKey = getVersionLessProgramKeyBuilder(recordType, programId).add(runid).build();
return get(runningKey, RunRecordMeta.class);
}
return runRecordMeta;
}
Aggregations