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();