Search in sources :

Example 6 with PhaseStatusCollection

use of com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection in project tis by qlangtech.

the class IncrStatusUmbilicalProtocolImpl method reportDumpTableStatus.

@Override
public void reportDumpTableStatus(com.qlangtech.tis.rpc.grpc.log.common.TableDumpStatus tableDumpStatus, StreamObserver<Empty> responseObserver) {
    Integer taskid = tableDumpStatus.getTaskid();
    if (taskid == null || taskid < 1) {
        throw new IllegalArgumentException("taskid illegal:" + taskid);
    }
    PhaseStatusCollection phaseStatusSet = TrackableExecuteInterceptor.getTaskPhaseReference(taskid);
    if (phaseStatusSet == null) {
        returnEmpty(responseObserver);
        return;
    }
    log.info("taskid:" + taskid + ",tablename:" + tableDumpStatus.getTableName() + ",read:" + tableDumpStatus.getReadRows() + ",all:" + tableDumpStatus.getAllRows());
    DumpPhaseStatus dumpPhase = phaseStatusSet.getDumpPhase();
    TableDumpStatus dumpStatus = phaseStatusSet.getDumpPhase().getTable(tableDumpStatus.getTableName());
    // }
    if (tableDumpStatus.getComplete()) {
        // 成功
        dumpStatus.setComplete(true);
    }
    if (tableDumpStatus.getFaild()) {
        // 失败了
        dumpStatus.setFaild(true);
    }
    dumpStatus.setReadRows(tableDumpStatus.getReadRows());
    dumpStatus.setAllRows(tableDumpStatus.getAllRows());
    if (!tableDumpStatus.getWaiting()) {
        dumpStatus.setWaiting(tableDumpStatus.getWaiting());
    }
    dumpPhase.isComplete();
    returnEmpty(responseObserver);
}
Also used : PhaseStatusCollection(com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection) TableDumpStatus(com.qlangtech.tis.fullbuild.phasestatus.impl.DumpPhaseStatus.TableDumpStatus) DumpPhaseStatus(com.qlangtech.tis.fullbuild.phasestatus.impl.DumpPhaseStatus)

Example 7 with PhaseStatusCollection

use of com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection in project tis by qlangtech.

the class IndexSwapTaskflowLauncher method loadPhaseStatusFromLocal.

/**
 * @param taskid
 * @return
 * @throws Exception
 */
public static PhaseStatusCollection loadPhaseStatusFromLocal(int taskid) {
    PhaseStatusCollection result = null;
    FullbuildPhase[] phases = FullbuildPhase.values();
    try {
        File localFile = null;
        BasicPhaseStatus phaseStatus;
        for (FullbuildPhase phase : phases) {
            localFile = BasicPhaseStatus.getFullBuildPhaseLocalFile(taskid, phase);
            if (!localFile.exists()) {
                return result;
            }
            if (result == null) {
                result = new PhaseStatusCollection(taskid, ExecutePhaseRange.fullRange());
            }
            phaseStatus = BasicPhaseStatus.statusWriter.loadPhase(localFile);
            switch(phase) {
                case FullDump:
                    result.setDumpPhase((DumpPhaseStatus) phaseStatus);
                    break;
                case JOIN:
                    result.setJoinPhase((JoinPhaseStatus) phaseStatus);
                    break;
                case BUILD:
                    result.setBuildPhase((BuildPhaseStatus) phaseStatus);
                    break;
                case IndexBackFlow:
                    result.setIndexBackFlowPhaseStatus((IndexBackFlowPhaseStatus) phaseStatus);
            }
        }
    } catch (Exception e) {
        throw new RuntimeException("taskid:" + taskid, e);
    }
    return result;
}
Also used : PhaseStatusCollection(com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection) FullbuildPhase(com.qlangtech.tis.assemble.FullbuildPhase) XmlFile(com.qlangtech.tis.extension.impl.XmlFile) File(java.io.File) DaemonInitException(org.apache.commons.daemon.DaemonInitException)

Example 8 with PhaseStatusCollection

use of com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection in project tis by qlangtech.

the class TaskStatusServlet method service.

protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    String extendPoint = null;
    try {
        if (StringUtils.isNotEmpty(extendPoint = req.getParameter(DescriptorsJSON.KEY_EXTEND_POINT))) {
            IPluginStore<Describable> pluginStore = TIS.getPluginStore((Class<Describable>) Class.forName(extendPoint));
            pluginStore.cleanPlugins();
            logger.info("key of '{}' pluginStore has been clean", extendPoint);
            return;
        }
    } catch (ClassNotFoundException e) {
        throw new ServletException("clean plugin store cache faild ", e);
    }
    if (Boolean.parseBoolean(req.getParameter(TIS.KEY_ACTION_CLEAN_TIS))) {
        TIS.clean();
        logger.info(" clean TIS cache", extendPoint);
        return;
    }
    int taskid = Integer.parseInt(req.getParameter(IParamContext.KEY_TASK_ID));
    // 是否要获取全部的日志信息,比如dump已經完成了,那麼只需要獲取dump之後的日志信息
    // boolean all = Boolean.parseBoolean(req.getParameter("all"));
    PhaseStatusCollection statusSet = TrackableExecuteInterceptor.getTaskPhaseReference(taskid);
    JSONObject result = new JSONObject();
    boolean success = false;
    if (statusSet != null) {
        result.put("status", statusSet);
        success = true;
    }
    result.put("success", success);
    IOUtils.write(JSON.toJSONString(result, true), res.getWriter());
}
Also used : ServletException(javax.servlet.ServletException) PhaseStatusCollection(com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection) JSONObject(com.alibaba.fastjson.JSONObject) Describable(com.qlangtech.tis.extension.Describable)

Example 9 with PhaseStatusCollection

use of com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection in project tis by qlangtech.

the class TisServlet method doDelete.

/**
 * 执行任务终止
 *
 * @param req
 * @param resp
 * @throws ServletException
 * @throws IOException
 */
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpExecContext execContext = new HttpExecContext(req, Maps.newHashMap(), true);
    int taskId = execContext.getInt(IExecChainContext.KEY_TASK_ID);
    // 当前是否是异步任务
    final boolean asynJob = execContext.getBoolean(IExecChainContext.KEY_ASYN_JOB_NAME);
    String appName = execContext.getString(IFullBuildContext.KEY_APP_NAME);
    logger.info("receive a processing job CANCEL signal,taskId:{},asynJob:{},appName:{}", taskId, asynJob, appName);
    if (asynJob) {
        IncrStatusUmbilicalProtocolImpl incrController = IncrStatusUmbilicalProtocolImpl.getInstance();
        // 给远程进程服下毒丸,让其终止
        incrController.stop(appName);
    } else {
        Map.Entry<String, ExecuteLock> targetExecLock = null;
        synchronized (this) {
            for (Map.Entry<String, ExecuteLock> execLock : idles.entrySet()) {
                if (execLock.getValue().matchTask(taskId)) {
                    targetExecLock = execLock;
                }
            }
            if (targetExecLock == null) {
                writeResult(false, "任务已经失效,无法终止", resp);
                return;
            }
            targetExecLock.getValue().cancelAllFuture();
            targetExecLock.getValue().clearLockFutureQueue();
        }
    }
    PhaseStatusCollection phaseStatusCollection = TrackableExecuteInterceptor.getTaskPhaseReference(taskId);
    if (phaseStatusCollection != null) {
        // 这样会将当前状态写入本地磁盘
        phaseStatusCollection.flushStatus2Local();
    }
    writeResult(true, null, resp, new KV(IExecChainContext.KEY_TASK_ID, String.valueOf(taskId)));
}
Also used : PhaseStatusCollection(com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection) IncrStatusUmbilicalProtocolImpl(com.qlangtech.tis.rpc.server.IncrStatusUmbilicalProtocolImpl) HttpExecContext(com.qlangtech.tis.fullbuild.servlet.impl.HttpExecContext) HashMap(java.util.HashMap) Map(java.util.Map)

Example 10 with PhaseStatusCollection

use of com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection in project tis by qlangtech.

the class TrackableExecuteInterceptor method getPhaseStatus.

/**
 * 标记当前任务的ID
 *
 * @return
 */
@Override
@SuppressWarnings("all")
public <T extends BasicPhaseStatus<?>> T getPhaseStatus(IExecChainContext execContext, FullbuildPhase phase) {
    PhaseStatusCollection phaseStatusCollection = taskPhaseReference.get(execContext.getTaskId());
    Objects.requireNonNull(phaseStatusCollection, "phaseStatusCollection can not be null");
    switch(phase) {
        case FullDump:
            return (T) phaseStatusCollection.getDumpPhase();
        case JOIN:
            return (T) phaseStatusCollection.getJoinPhase();
        case BUILD:
            return (T) phaseStatusCollection.getBuildPhase();
        case IndexBackFlow:
            return (T) phaseStatusCollection.getIndexBackFlowPhaseStatus();
        default:
            throw new IllegalStateException(phase + " is illegal has not any match status");
    }
}
Also used : PhaseStatusCollection(com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection)

Aggregations

PhaseStatusCollection (com.qlangtech.tis.fullbuild.phasestatus.PhaseStatusCollection)14 DumpPhaseStatus (com.qlangtech.tis.fullbuild.phasestatus.impl.DumpPhaseStatus)5 BuildPhaseStatus (com.qlangtech.tis.fullbuild.phasestatus.impl.BuildPhaseStatus)2 File (java.io.File)2 JSONObject (com.alibaba.fastjson.JSONObject)1 TisZkClient (com.qlangtech.tis.TisZkClient)1 FullbuildPhase (com.qlangtech.tis.assemble.FullbuildPhase)1 DataXJobSubmit (com.qlangtech.tis.datax.DataXJobSubmit)1 IDataxProcessor (com.qlangtech.tis.datax.IDataxProcessor)1 ExecutePhaseRange (com.qlangtech.tis.exec.ExecutePhaseRange)1 IExecChainContext (com.qlangtech.tis.exec.IExecChainContext)1 DefaultChainContext (com.qlangtech.tis.exec.impl.DefaultChainContext)1 Describable (com.qlangtech.tis.extension.Describable)1 XmlFile (com.qlangtech.tis.extension.impl.XmlFile)1 IRemoteTaskTrigger (com.qlangtech.tis.fullbuild.indexbuild.IRemoteTaskTrigger)1 RunningStatus (com.qlangtech.tis.fullbuild.indexbuild.RunningStatus)1 JobLog (com.qlangtech.tis.fullbuild.phasestatus.JobLog)1 BuildSharedPhaseStatus (com.qlangtech.tis.fullbuild.phasestatus.impl.BuildSharedPhaseStatus)1 TableDumpStatus (com.qlangtech.tis.fullbuild.phasestatus.impl.DumpPhaseStatus.TableDumpStatus)1 IndexBackFlowPhaseStatus (com.qlangtech.tis.fullbuild.phasestatus.impl.IndexBackFlowPhaseStatus)1