@Override public RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) throws RemotingCommandException { BizLogSendRequest requestBody = request.getBody(); List<BizLog> bizLogs = requestBody.getBizLogs(); if (CollectionUtils.isNotEmpty(bizLogs)) { for (BizLog bizLog : bizLogs) { JobLogPo jobLogPo = new JobLogPo(); jobLogPo.setGmtCreated(SystemClock.now()); jobLogPo.setLogTime(bizLog.getLogTime()); jobLogPo.setTaskTrackerNodeGroup(bizLog.getTaskTrackerNodeGroup()); jobLogPo.setTaskTrackerIdentity(bizLog.getTaskTrackerIdentity()); jobLogPo.setJobId(bizLog.getJobId()); jobLogPo.setTaskId(bizLog.getTaskId()); jobLogPo.setMsg(bizLog.getMsg()); jobLogPo.setSuccess(true); jobLogPo.setLevel(bizLog.getLevel()); jobLogPo.setLogType(LogType.BIZ); application.getJobLogger().log(jobLogPo); } } return RemotingCommand.createResponseCommand( JobProtos.ResponseCode.BIZ_LOG_SEND_SUCCESS.code(), ""); }
public JobPo take(String taskTrackerNodeGroup, String taskTrackerIdentity) { while (true) { JobPo jobPo = get(taskTrackerNodeGroup); if (jobPo == null) { return null; } // update jobPo if (lockJob( taskTrackerNodeGroup, jobPo.getJobId(), taskTrackerIdentity, jobPo.getTriggerTime())) { jobPo.setTaskTrackerIdentity(taskTrackerIdentity); jobPo.setIsRunning(true); jobPo.setGmtModified(SystemClock.now()); return jobPo; } } }
@Override public JobWrapper runComplete(Response response) { // 发送消息给 JobTracker final TaskTrackerJobResult taskTrackerJobResult = new TaskTrackerJobResult(); taskTrackerJobResult.setTime(SystemClock.now()); taskTrackerJobResult.setJobWrapper(response.getJobWrapper()); taskTrackerJobResult.setAction(response.getAction()); taskTrackerJobResult.setMsg(response.getMsg()); TtJobFinishedRequest requestBody = application.getCommandBodyWrapper().wrapper(new TtJobFinishedRequest()); requestBody.addJobResult(taskTrackerJobResult); requestBody.setReceiveNewJob(response.isReceiveNewJob()); // 设置可以接受新任务 int requestCode = JobProtos.RequestCode.JOB_FINISHED.code(); RemotingCommand request = RemotingCommand.createRequestCommand(requestCode, requestBody); final Response returnResponse = new Response(); try { final CountDownLatch latch = new CountDownLatch(1); remotingClient.invokeAsync( request, new InvokeCallback() { @Override public void operationComplete(ResponseFuture responseFuture) { try { RemotingCommand commandResponse = responseFuture.getResponseCommand(); if (commandResponse != null && commandResponse.getCode() == RemotingProtos.ResponseCode.SUCCESS.code()) { JobPushRequest jobPushRequest = commandResponse.getBody(); if (jobPushRequest != null) { LOGGER.info("Get new job :{}", jobPushRequest.getJobWrapper()); returnResponse.setJobWrapper(jobPushRequest.getJobWrapper()); } } else { LOGGER.info("Job feedback failed, save local files。{}", taskTrackerJobResult); try { retryScheduler.inSchedule( taskTrackerJobResult.getJobWrapper().getJobId().concat("_") + SystemClock.now(), taskTrackerJobResult); } catch (Exception e) { LOGGER.error("Job feedback failed", e); } } } finally { latch.countDown(); } } }); try { latch.await(Constants.LATCH_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { throw new RequestTimeoutException(e); } } catch (JobTrackerNotFoundException e) { try { LOGGER.warn("No job tracker available! save local files."); retryScheduler.inSchedule( taskTrackerJobResult.getJobWrapper().getJobId().concat("_") + SystemClock.now(), taskTrackerJobResult); } catch (Exception e1) { LOGGER.error("Save files failed, {}", taskTrackerJobResult.getJobWrapper(), e1); } } return returnResponse.getJobWrapper(); }