@@ -276,8 +276,7 @@ private JobPushRequest getNewJob(String taskTrackerNodeGroup, String taskTracker
276276 try {
277277 application .getExecutingJobQueue ().add (jobPo );
278278 } catch (DuplicateJobException e ) {
279- // ignore
280- LOGGER .error (e .getMessage (), e );
279+ throw e ;
281280 }
282281 application .getExecutableJobQueue ().remove (jobPo .getTaskTrackerNodeGroup (), jobPo .getJobId ());
283282
@@ -305,34 +304,31 @@ private void finishProcess(List<TaskTrackerJobResult> results) {
305304 for (TaskTrackerJobResult result : results ) {
306305
307306 JobWrapper jobWrapper = result .getJobWrapper ();
307+ // 从正在执行的队列中移除 TODO 如果在这个时候down机了,数据丢失了
308+ application .getExecutingJobQueue ().remove (jobWrapper .getJobId ());
308309
309- try {
310- if (jobWrapper .getJob ().isSchedule ()) {
310+ if (jobWrapper .getJob ().isSchedule ()) {
311311
312- JobPo cronJobPo = application .getCronJobQueue ().finish (jobWrapper .getJobId ());
313- if (cronJobPo == null ) {
314- // 可能任务队列中改条记录被删除了
315- return ;
316- }
317- Date nextTriggerTime = CronExpressionUtils .getNextTriggerTime (cronJobPo .getCronExpression ());
318- if (nextTriggerTime == null ) {
319- application .getCronJobQueue ().remove (jobWrapper .getJobId ());
320- return ;
321- }
322- // 表示下次还要执行
323- try {
324- cronJobPo .setTaskTrackerIdentity (null );
325- cronJobPo .setIsRunning (false );
326- cronJobPo .setTriggerTime (nextTriggerTime .getTime ());
327- cronJobPo .setGmtModified (SystemClock .now ());
328- application .getExecutableJobQueue ().add (cronJobPo );
329- } catch (DuplicateJobException e ) {
330- LOGGER .error (e .getMessage (), e );
331- }
312+ JobPo cronJobPo = application .getCronJobQueue ().finish (jobWrapper .getJobId ());
313+ if (cronJobPo == null ) {
314+ // 可能任务队列中改条记录被删除了
315+ return ;
316+ }
317+ Date nextTriggerTime = CronExpressionUtils .getNextTriggerTime (cronJobPo .getCronExpression ());
318+ if (nextTriggerTime == null ) {
319+ application .getCronJobQueue ().remove (jobWrapper .getJobId ());
320+ return ;
321+ }
322+ // 表示下次还要执行
323+ try {
324+ cronJobPo .setTaskTrackerIdentity (null );
325+ cronJobPo .setIsRunning (false );
326+ cronJobPo .setTriggerTime (nextTriggerTime .getTime ());
327+ cronJobPo .setGmtModified (SystemClock .now ());
328+ application .getExecutableJobQueue ().add (cronJobPo );
329+ } catch (DuplicateJobException e ) {
330+ LOGGER .error (e .getMessage (), e );
332331 }
333- } finally {
334- // 移除
335- application .getExecutingJobQueue ().remove (jobWrapper .getJobId ());
336332 }
337333 }
338334 }
@@ -350,6 +346,10 @@ private void retryProcess(List<TaskTrackerJobResult> results) {
350346 // 1. 加入到重试队列
351347 JobPo jobPo = application .getExecutingJobQueue ().get (jobWrapper .getJobId ());
352348 if (jobPo != null ) {
349+
350+ // 从正在执行的队列中移除 TODO 如果在这个时候down机了,数据丢失了
351+ application .getExecutingJobQueue ().remove (jobPo .getJobId ());
352+
353353 // 重试次数+1
354354 jobPo .setRetryTimes ((jobPo .getRetryTimes () == null ? 0 : jobPo .getRetryTimes ()) + 1 );
355355 Long nextRetryTriggerTime = DateUtils .addMinute (new Date (), jobPo .getRetryTimes ()).getTime ();
@@ -389,8 +389,6 @@ private void retryProcess(List<TaskTrackerJobResult> results) {
389389 LOGGER .error (e .getMessage (), e );
390390 }
391391 }
392- // 从正在执行的队列中移除
393- application .getExecutingJobQueue ().remove (jobPo .getJobId ());
394392 }
395393 }
396394 }
0 commit comments