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);
}
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;
}
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());
}
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)));
}
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");
}
}
Aggregations