Search in sources :

Example 46 with MDSKey

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));
    }
}
Also used : MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey) ProgramRunId(co.cask.cdap.proto.id.ProgramRunId) ApplicationId(co.cask.cdap.proto.id.ApplicationId) WorkflowNodeStateDetail(co.cask.cdap.proto.WorkflowNodeStateDetail)

Example 47 with MDSKey

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));
}
Also used : ProgramRunStatus(co.cask.cdap.proto.ProgramRunStatus) MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey)

Example 48 with MDSKey

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));
}
Also used : MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey)

Example 49 with MDSKey

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);
}
Also used : MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 50 with MDSKey

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;
}
Also used : MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey)

Aggregations

MDSKey (co.cask.cdap.data2.dataset2.lib.table.MDSKey)66 MDSKey (io.cdap.cdap.data2.dataset2.lib.table.MDSKey)31 GsonBuilder (com.google.gson.GsonBuilder)22 IOException (java.io.IOException)16 Gson (com.google.gson.Gson)14 HashMap (java.util.HashMap)12 ProgramRunId (co.cask.cdap.proto.id.ProgramRunId)11 ApplicationId (io.cdap.cdap.proto.id.ApplicationId)9 Row (co.cask.cdap.api.dataset.table.Row)8 ProgramId (co.cask.cdap.proto.id.ProgramId)8 Nullable (javax.annotation.Nullable)8 ImmutableMap (com.google.common.collect.ImmutableMap)7 Test (org.junit.Test)7 Scanner (co.cask.cdap.api.dataset.table.Scanner)6 MetadataStoreDataset (co.cask.cdap.data2.dataset2.lib.table.MetadataStoreDataset)6 ArrayList (java.util.ArrayList)6 WorkflowNodeStateDetail (co.cask.cdap.proto.WorkflowNodeStateDetail)5 ApplicationId (co.cask.cdap.proto.id.ApplicationId)5 Row (io.cdap.cdap.api.dataset.table.Row)5 Scanner (io.cdap.cdap.api.dataset.table.Scanner)5