From ea4fecc270f3376553eab9c1ce356bfa987e2aa1 Mon Sep 17 00:00:00 2001 From: tjq Date: Fri, 26 Jun 2020 20:45:20 +0800 Subject: [PATCH 1/4] [fix] fix the bug of LRUCache oversize --- .../worker/common/utils/LRUCache.java | 2 +- .../powerjob/function/LRUCacheTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 powerjob-worker/src/test/java/com/github/kfcfans/powerjob/function/LRUCacheTest.java diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/LRUCache.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/LRUCache.java index 429af541..110ad041 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/LRUCache.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/utils/LRUCache.java @@ -19,7 +19,7 @@ public class LRUCache { public LRUCache(int cacheSize) { innerCache = CacheBuilder.newBuilder() .concurrencyLevel(2) - .initialCapacity(cacheSize) + .maximumSize(cacheSize) .build(); } diff --git a/powerjob-worker/src/test/java/com/github/kfcfans/powerjob/function/LRUCacheTest.java b/powerjob-worker/src/test/java/com/github/kfcfans/powerjob/function/LRUCacheTest.java new file mode 100644 index 00000000..3ac6c9e3 --- /dev/null +++ b/powerjob-worker/src/test/java/com/github/kfcfans/powerjob/function/LRUCacheTest.java @@ -0,0 +1,23 @@ +package com.github.kfcfans.powerjob.function; + +import com.github.kfcfans.powerjob.worker.common.utils.LRUCache; +import org.junit.jupiter.api.Test; + +/** + * LRU cache test + * + * @author tjq + * @since 2020/6/26 + */ +public class LRUCacheTest { + + @Test + public void testCache() { + LRUCache cache = new LRUCache<>(10); + for (long i = 0; i < 100; i++) { + cache.put(i, "STR:" + i); + } + cache.forEach((x, y) -> System.out.println("key:" + x)); + } + +} From ef14c4840f19ee7d9a3b193a172177fdfe56eb84 Mon Sep 17 00:00:00 2001 From: tjq Date: Fri, 26 Jun 2020 21:05:54 +0800 Subject: [PATCH 2/4] [fix] fix the bug of LRUCache oversize --- powerjob-client/pom.xml | 4 ++-- powerjob-common/pom.xml | 2 +- powerjob-server/pom.xml | 4 ++-- powerjob-worker-agent/pom.xml | 4 ++-- powerjob-worker-samples/pom.xml | 4 ++-- powerjob-worker/pom.xml | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml index 475ca9b9..43c59747 100644 --- a/powerjob-client/pom.xml +++ b/powerjob-client/pom.xml @@ -10,11 +10,11 @@ 4.0.0 powerjob-client - 3.1.1 + 3.1.2 jar - 3.1.1 + 3.1.2 5.6.1 diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml index 117fc938..625fa6db 100644 --- a/powerjob-common/pom.xml +++ b/powerjob-common/pom.xml @@ -10,7 +10,7 @@ 4.0.0 powerjob-common - 3.1.1 + 3.1.2 jar diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml index 43bdc1bd..0eee88e4 100644 --- a/powerjob-server/pom.xml +++ b/powerjob-server/pom.xml @@ -10,13 +10,13 @@ 4.0.0 powerjob-server - 3.1.1 + 3.1.2 jar 2.9.2 2.2.6.RELEASE - 3.1.1 + 3.1.2 8.0.19 1.4.200 2.5.2 diff --git a/powerjob-worker-agent/pom.xml b/powerjob-worker-agent/pom.xml index a8f934da..c7c73d5c 100644 --- a/powerjob-worker-agent/pom.xml +++ b/powerjob-worker-agent/pom.xml @@ -10,12 +10,12 @@ 4.0.0 powerjob-worker-agent - 3.1.1 + 3.1.2 jar - 3.1.1 + 3.1.2 1.2.3 4.3.2 diff --git a/powerjob-worker-samples/pom.xml b/powerjob-worker-samples/pom.xml index 618d9c31..b911cf21 100644 --- a/powerjob-worker-samples/pom.xml +++ b/powerjob-worker-samples/pom.xml @@ -10,11 +10,11 @@ 4.0.0 powerjob-worker-samples - 3.1.1 + 3.1.2 2.2.6.RELEASE - 3.1.1 + 3.1.2 1.2.68 diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml index f9b3c669..e44f9f98 100644 --- a/powerjob-worker/pom.xml +++ b/powerjob-worker/pom.xml @@ -10,12 +10,12 @@ 4.0.0 powerjob-worker - 3.1.1 + 3.1.2 jar 5.2.4.RELEASE - 3.1.1 + 3.1.2 1.4.200 3.4.2 5.6.1 From 51e49d0176003d800526730ce3eaac61e99d4374 Mon Sep 17 00:00:00 2001 From: tjq Date: Fri, 26 Jun 2020 21:46:49 +0800 Subject: [PATCH 3/4] [dev] add protect mechanism for FrequentTaskTracker --- .../server/service/instance/InstanceManager.java | 1 + .../core/tracker/task/FrequentTaskTracker.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java index dee67ee4..a49e084c 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceManager.java @@ -87,6 +87,7 @@ public class InstanceManager { // 综上,直接把 status 和 runningNum 同步到DB即可 if (TimeExpressionType.frequentTypes.contains(timeExpressionType)) { + instanceInfo.setResult(req.getResult()); instanceInfo.setRunningTimes(req.getTotalTaskNum()); instanceInfoRepository.saveAndFlush(instanceInfo); return; diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java index c73f25bb..1e1c6102 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java @@ -61,6 +61,7 @@ public class FrequentTaskTracker extends TaskTracker { private static final int HISTORY_SIZE = 10; private static final String LAST_TASK_ID_PREFIX = "L"; + private static final int MIN_INTERVAL = 1000; protected FrequentTaskTracker(ServerScheduleJobReq req) { super(req); @@ -89,6 +90,10 @@ public class FrequentTaskTracker extends TaskTracker { // 2. 启动任务发射器 launcher = new Launcher(); if (timeExpressionType == TimeExpressionType.FIX_RATE) { + // 固定频率需要设置最小间隔 + if (timeParams < MIN_INTERVAL) { + throw new OmsException("time interval too small, please set the timeExpressionInfo >= 1000"); + } scheduledPool.scheduleAtFixedRate(launcher, 1, timeParams, TimeUnit.MILLISECONDS); }else { scheduledPool.schedule(launcher, 0, TimeUnit.MILLISECONDS); @@ -97,8 +102,7 @@ public class FrequentTaskTracker extends TaskTracker { // 3. 启动任务分发器(事实上,秒级任务应该都是单机任务,且感觉不需要失败重试机制,那么 Dispatcher 的存在就有点浪费系统资源了...) scheduledPool.scheduleWithFixedDelay(new Dispatcher(), 1, 2, TimeUnit.SECONDS); // 4. 启动状态检查器 - scheduledPool.scheduleWithFixedDelay(new Checker(), 5000, Math.min(timeParams, 10000), TimeUnit.MILLISECONDS); - + scheduledPool.scheduleWithFixedDelay(new Checker(), 5000, Math.min(Math.max(timeParams, 5000), 5000), TimeUnit.MILLISECONDS); } @Override @@ -213,6 +217,11 @@ public class FrequentTaskTracker extends TaskTracker { @Override public void run() { + + if (finished.get()) { + return; + } + try { checkStatus(); reportStatus(); From b1064cb0190189ea88d425208f9a674c08de2b8e Mon Sep 17 00:00:00 2001 From: tjq Date: Fri, 26 Jun 2020 21:50:39 +0800 Subject: [PATCH 4/4] [opt] optimize FrequentTaskTracker's check interval --- .../powerjob/worker/core/tracker/task/FrequentTaskTracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java index 1e1c6102..ed72f3f9 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/core/tracker/task/FrequentTaskTracker.java @@ -102,7 +102,7 @@ public class FrequentTaskTracker extends TaskTracker { // 3. 启动任务分发器(事实上,秒级任务应该都是单机任务,且感觉不需要失败重试机制,那么 Dispatcher 的存在就有点浪费系统资源了...) scheduledPool.scheduleWithFixedDelay(new Dispatcher(), 1, 2, TimeUnit.SECONDS); // 4. 启动状态检查器 - scheduledPool.scheduleWithFixedDelay(new Checker(), 5000, Math.min(Math.max(timeParams, 5000), 5000), TimeUnit.MILLISECONDS); + scheduledPool.scheduleWithFixedDelay(new Checker(), 5000, Math.min(Math.max(timeParams, 5000), 15000), TimeUnit.MILLISECONDS); } @Override