From 42c3ce3747bc554d5799a8fb4c26b05cd6ef25ae Mon Sep 17 00:00:00 2001 From: tjq Date: Mon, 15 Jun 2020 09:41:16 +0800 Subject: [PATCH] [fix] fix server always retry failed job's bug --- powerjob-client/pom.xml | 8 --- powerjob-common/pom.xml | 10 ++- .../src/test/java/SegmentLockTest.java | 61 +++++++++++++++++++ .../timing/InstanceStatusCheckService.java | 2 +- .../worker/core/tracker/task/TaskTracker.java | 1 + 5 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 powerjob-common/src/test/java/SegmentLockTest.java diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml index 40693039..af6540dc 100644 --- a/powerjob-client/pom.xml +++ b/powerjob-client/pom.xml @@ -15,7 +15,6 @@ 3.0.0 - 5.6.1 @@ -25,13 +24,6 @@ powerjob-common ${powerjob.common.version} - - - org.junit.jupiter - junit-jupiter-api - ${junit.version} - test - \ No newline at end of file diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml index aa7ebbf5..c075d7f8 100644 --- a/powerjob-common/pom.xml +++ b/powerjob-common/pom.xml @@ -20,6 +20,7 @@ 29.0-jre 4.4.1 2.6.4 + 5.6.1 @@ -68,13 +69,20 @@ ${akka.version} - commons-io commons-io ${commons.io.version} + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + \ No newline at end of file diff --git a/powerjob-common/src/test/java/SegmentLockTest.java b/powerjob-common/src/test/java/SegmentLockTest.java new file mode 100644 index 00000000..2867064d --- /dev/null +++ b/powerjob-common/src/test/java/SegmentLockTest.java @@ -0,0 +1,61 @@ +import com.github.kfcfans.powerjob.common.utils.CommonUtils; +import com.github.kfcfans.powerjob.common.utils.SegmentLock; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * 分段锁测试 + * + * @author tjq + * @since 2020/6/15 + */ +public class SegmentLockTest { + + @Test + public void testLock() throws Exception { + int lockId = 10086; + SegmentLock lock = new SegmentLock(4); + ExecutorService pool = Executors.newFixedThreadPool(2); + pool.execute(() -> { + System.out.println("before lock A"); + lock.lockInterruptibleSafe(lockId); + System.out.println("after lock A"); + }); + + pool.execute(() -> { + System.out.println("before lock AA"); + lock.lockInterruptibleSafe(lockId); + System.out.println("after lock AA"); + }); + + Thread.sleep(10000); + } + + @Test + public void testUnLock() throws Exception { + int lockId = 10086; + SegmentLock lock = new SegmentLock(4); + ExecutorService pool = Executors.newFixedThreadPool(2); + pool.execute(() -> { + System.out.println("before lock A"); + lock.lockInterruptibleSafe(lockId); + System.out.println("after lock A"); + try { + Thread.sleep(5000); + }catch (Exception ignore) { + } + lock.unlock(lockId); + }); + + pool.execute(() -> { + System.out.println("before lock AA"); + lock.lockInterruptibleSafe(lockId); + System.out.println("after lock AA"); + }); + + Thread.sleep(10000); + } + +} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/InstanceStatusCheckService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/InstanceStatusCheckService.java index 47ca26ff..36426247 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/InstanceStatusCheckService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/InstanceStatusCheckService.java @@ -139,7 +139,7 @@ public class InstanceStatusCheckService { } // CRON 和 API一样,失败次数 + 1,根据重试配置进行重试 - if (instance.getRunningTimes() > jobInfoDO.getInstanceRetryNum()) { + if (instance.getRunningTimes() < jobInfoDO.getInstanceRetryNum()) { dispatchService.redispatch(jobInfoDO, instance.getInstanceId(), instance.getRunningTimes()); }else { updateFailedInstance(instance); diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/TaskTracker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/TaskTracker.java index f57e5811..ad719593 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/TaskTracker.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/TaskTracker.java @@ -162,6 +162,7 @@ public abstract class TaskTracker { // 此时本次请求已经有效,先写入最新的时间 taskId2LastReportTime.put(taskId, reportTime); + log.debug("[TaskTracker-{}] task({}) receive new status: {}", instanceId, taskId, newStatus); // 处理失败的情况 int configTaskRetryNum = instanceInfo.getTaskRetryNum();