From 75090e56ad286adaa15c86e0b4e6a49cf9ed1957 Mon Sep 17 00:00:00 2001 From: tjq Date: Tue, 23 Jun 2020 17:53:10 +0800 Subject: [PATCH 01/10] [fix] add NPE protect for InstanceInfo --- others/script/jenkins_auto.sh | 4 +++- .../core/repository/InstanceInfoRepository.java | 2 +- .../powerjob/server/service/instance/InstanceManager.java | 7 +++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/others/script/jenkins_auto.sh b/others/script/jenkins_auto.sh index 3af4c6fa..7863f0c3 100644 --- a/others/script/jenkins_auto.sh +++ b/others/script/jenkins_auto.sh @@ -22,9 +22,11 @@ echo "================== 构建 powerjob-agent 镜像 ==================" docker build -t tjqq/powerjob-agent:latest powerjob-worker-agent/. || exit echo "================== 准备启动 powerjob-server ==================" docker run -d \ + --rm \ + --restart=always \ --name powerjob-server \ -p 7700:7700 -p 10086:10086 \ - -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://172.27.147.252:3306/oms-product?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://172.27.147.252:27017/oms-product" \ + -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://127.0.0.1:27017/powerjob-product" \ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:latest sleep 60 diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java index 3c434699..e5ef8513 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/core/repository/InstanceInfoRepository.java @@ -68,7 +68,7 @@ public interface InstanceInfoRepository extends JpaRepository findByJobIdInAndStatusIn(List jobIds, List status); // 删除历史数据,JPA自带的删除居然是根据ID循环删,2000条数据删了几秒,也太拉垮了吧... - // 结果只能用 int 接受 + // 结果只能用 int 接收 @Modifying @Transactional @Query(value = "delete from instance_info where gmt_modified < ?1", nativeQuery = true) 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 cb386261..ee85b297 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 @@ -80,10 +80,13 @@ public class InstanceManager { return jobInfoOpt.orElseThrow(() -> new IllegalArgumentException("can't find JobIno by jobId: " + jobId)); }); InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); - + if (instanceInfo == null) { + log.warn("[InstanceManager-{}] can't find InstanceInfo from database", instanceId); + return; + } // 丢弃过期的上报数据 if (req.getReportTime() <= instanceInfo.getLastReportTime()) { - log.warn("[InstanceManager-{}] receive the expired status report request: {}, this report will br dropped.", instanceId, req); + log.warn("[InstanceManager-{}] receive the expired status report request: {}, this report will be dropped.", instanceId, req); return; } From 26c5350ed4c4a85952c3ed63ca273a121897013c Mon Sep 17 00:00:00 2001 From: tjq Date: Tue, 23 Jun 2020 19:15:04 +0800 Subject: [PATCH 02/10] [modify] change docker base image to adoptopenjdk to support arm64 --- others/script/{jenkins_auto.sh => jenkins_auto_build.sh} | 6 +++--- powerjob-server/docker/Dockerfile | 4 ++-- .../server/service/alarm/DefaultMailAlarmService.java | 2 +- powerjob-worker-agent/Dockerfile | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename others/script/{jenkins_auto.sh => jenkins_auto_build.sh} (93%) diff --git a/others/script/jenkins_auto.sh b/others/script/jenkins_auto_build.sh similarity index 93% rename from others/script/jenkins_auto.sh rename to others/script/jenkins_auto_build.sh index 7863f0c3..06a7b444 100644 --- a/others/script/jenkins_auto.sh +++ b/others/script/jenkins_auto_build.sh @@ -22,15 +22,15 @@ echo "================== 构建 powerjob-agent 镜像 ==================" docker build -t tjqq/powerjob-agent:latest powerjob-worker-agent/. || exit echo "================== 准备启动 powerjob-server ==================" docker run -d \ - --rm \ --restart=always \ --name powerjob-server \ -p 7700:7700 -p 10086:10086 \ -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://127.0.0.1:27017/powerjob-product" \ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:latest -sleep 60 -echo "================== 准备启动 powerjob-client ==================" +echo "================== powerjob-client 启动完成 ==================" +sleep 45 +echo "================== 准备启动 powerjob-agent ==================" serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server) serverAddress="$serverIP:7700" echo "使用的Server地址:$serverAddress" diff --git a/powerjob-server/docker/Dockerfile b/powerjob-server/docker/Dockerfile index 473d4f62..10fc1d5e 100644 --- a/powerjob-server/docker/Dockerfile +++ b/powerjob-server/docker/Dockerfile @@ -1,5 +1,5 @@ -# 基础镜像 -FROM openjdk:8 +# 基础镜像(支持 amd64 & arm64) +FROM adoptopenjdk:8-jdk-hotspot # 维护者 MAINTAINER tengjiqi@gmail.com # 下载并安装 maven diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java index d96e20b1..1c494f62 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/DefaultMailAlarmService.java @@ -65,7 +65,7 @@ public class DefaultMailAlarmService implements Alarmable { javaMailSender.send(sm); }catch (Exception e) { - log.error("[OmsMailAlarmService] send mail({}) failed.", sm, e); + log.error("[OmsMailAlarmService] send mail({}) failed, reason is {}", sm, e.getMessage()); } } } diff --git a/powerjob-worker-agent/Dockerfile b/powerjob-worker-agent/Dockerfile index 2df95db9..c2404740 100644 --- a/powerjob-worker-agent/Dockerfile +++ b/powerjob-worker-agent/Dockerfile @@ -1,5 +1,5 @@ -# agent 没有 javac 需求,用 JRE 镜像 -FROM openjdk:8-jre-slim +# 为了便于使用 arthas,agent 也使用 jdk 而不是 jre +FROM adoptopenjdk:8-jdk-hotspot MAINTAINER tengjiqi@gmail.com # 设置时区 ENV TZ=Asia/Shanghai From 53a99241e0d0b9fbbcb642087d02450a745d8efb Mon Sep 17 00:00:00 2001 From: tjq Date: Tue, 23 Jun 2020 22:23:21 +0800 Subject: [PATCH 03/10] [fix] remove spring bean circular dependence --- others/script/jenkins_auto_build.sh | 2 +- .../server/service/DispatchService.java | 6 ++ .../server/service/InstanceLogService.java | 19 +++--- .../service/instance/InstanceManager.java | 61 +++-------------- .../instance/InstanceMetaInfoService.java | 67 +++++++++++++++++++ .../server/service/timing/CleanService.java | 1 - 6 files changed, 92 insertions(+), 64 deletions(-) create mode 100644 powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java diff --git a/others/script/jenkins_auto_build.sh b/others/script/jenkins_auto_build.sh index 06a7b444..44d2a44a 100644 --- a/others/script/jenkins_auto_build.sh +++ b/others/script/jenkins_auto_build.sh @@ -25,7 +25,7 @@ docker run -d \ --restart=always \ --name powerjob-server \ -p 7700:7700 -p 10086:10086 \ - -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://127.0.0.1:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://127.0.0.1:27017/powerjob-product" \ + -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://124.70.67.79:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://124.70.67.79:27017/powerjob-product" \ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:latest echo "================== powerjob-client 启动完成 ==================" diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java index 1f94bd77..5e57ad56 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java @@ -9,6 +9,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository; import com.github.kfcfans.powerjob.server.service.ha.WorkerManagerService; import com.github.kfcfans.powerjob.server.service.instance.InstanceManager; +import com.github.kfcfans.powerjob.server.service.instance.InstanceMetaInfoService; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -39,6 +40,8 @@ public class DispatchService { @Resource private InstanceManager instanceManager; @Resource + private InstanceMetaInfoService instanceMetaInfoService; + @Resource private InstanceInfoRepository instanceInfoRepository; private static final Splitter commaSplitter = Splitter.on(","); @@ -142,5 +145,8 @@ public class DispatchService { // 修改状态 instanceInfoRepository.update4TriggerSucceed(instanceId, WAITING_WORKER_RECEIVE.getV(), currentRunningTimes + 1, current, taskTrackerAddress, dbInstanceParams, now); + + // 装载缓存 + instanceMetaInfoService.loadJobInfo(instanceId, jobInfo); } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java index da3c03d5..bb3917b5 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java @@ -11,7 +11,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogDO; import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogRepository; import com.github.kfcfans.powerjob.server.persistence.mongodb.GridFsManager; -import com.github.kfcfans.powerjob.server.service.instance.InstanceManager; +import com.github.kfcfans.powerjob.server.service.instance.InstanceMetaInfoService; import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -46,7 +46,7 @@ import java.util.stream.Stream; public class InstanceLogService { @Resource - private InstanceManager instanceManager; + private InstanceMetaInfoService instanceMetaInfoService; @Resource private GridFsManager gridFsManager; // 本地数据库操作bean @@ -317,16 +317,17 @@ public class InstanceLogService { @Scheduled(fixedDelay = 60000) public void timingCheck() { + // TODO: 检查 lastReportTime,过期 instance 调用 sync 同步并删除 + // 定时删除秒级任务的日志 List frequentInstanceIds = Lists.newLinkedList(); instanceId2LastReportTime.keySet().forEach(instanceId -> { - JobInfoDO jobInfo = instanceManager.fetchJobInfo(instanceId); - if (jobInfo == null) { - return; - } - - if (TimeExpressionType.frequentTypes.contains(jobInfo.getTimeExpressionType())) { - frequentInstanceIds.add(instanceId); + try { + JobInfoDO jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(instanceId); + if (TimeExpressionType.frequentTypes.contains(jobInfo.getTimeExpressionType())) { + frequentInstanceIds.add(instanceId); + } + }catch (Exception ignore) { } }); 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 ee85b297..cc2452a9 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 @@ -8,7 +8,6 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.InstanceInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.model.UserInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository; -import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository; import com.github.kfcfans.powerjob.server.service.DispatchService; import com.github.kfcfans.powerjob.server.service.InstanceLogService; import com.github.kfcfans.powerjob.server.service.UserService; @@ -16,8 +15,6 @@ import com.github.kfcfans.powerjob.server.service.alarm.Alarmable; import com.github.kfcfans.powerjob.server.service.alarm.JobInstanceAlarmContent; import com.github.kfcfans.powerjob.server.service.timing.schedule.HashedWheelTimerHolder; import com.github.kfcfans.powerjob.server.service.workflow.WorkflowInstanceManager; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -25,7 +22,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; -import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -38,10 +34,6 @@ import java.util.concurrent.TimeUnit; @Service public class InstanceManager { - // 存储 instanceId 对应的 Job 信息,便于重试 - private static Cache instanceId2JobInfo; - - // Spring Bean @Resource private DispatchService dispatchService; @Resource @@ -49,21 +41,12 @@ public class InstanceManager { @Resource(name = "omsCenterAlarmService") private Alarmable omsCenterAlarmService; @Resource - private InstanceInfoRepository instanceInfoRepository; + private InstanceMetaInfoService instanceMetaInfoService; @Resource - private JobInfoRepository jobInfoRepository; + private InstanceInfoRepository instanceInfoRepository; @Resource private WorkflowInstanceManager workflowInstanceManager; - private static final int CACHE_CONCURRENCY_LEVEL = 8; - private static final int CACHE_MAX_SIZE = 4096; - - static { - instanceId2JobInfo = CacheBuilder.newBuilder() - .concurrencyLevel(CACHE_CONCURRENCY_LEVEL) - .maximumSize(CACHE_MAX_SIZE) - .build(); - } /** * 更新任务状态 @@ -71,14 +54,10 @@ public class InstanceManager { */ public void updateStatus(TaskTrackerReportInstanceStatusReq req) throws Exception { - Long jobId = req.getJobId(); Long instanceId = req.getInstanceId(); // 获取相关数据 - JobInfoDO jobInfo = instanceId2JobInfo.get(instanceId, () -> { - Optional jobInfoOpt = jobInfoRepository.findById(jobId); - return jobInfoOpt.orElseThrow(() -> new IllegalArgumentException("can't find JobIno by jobId: " + jobId)); - }); + JobInfoDO jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(req.getInstanceId()); InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); if (instanceInfo == null) { log.warn("[InstanceManager-{}] can't find InstanceInfo from database", instanceId); @@ -173,9 +152,11 @@ public class InstanceManager { // 告警 if (status == InstanceStatus.FAILED) { - JobInfoDO jobInfo = fetchJobInfo(instanceId); - if (jobInfo == null) { - log.warn("[InstanceManager] can't find jobInfo by instanceId({}), alarm failed.", instanceId); + JobInfoDO jobInfo; + try { + jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(instanceId); + }catch (Exception e) { + log.warn("[InstanceManager-{}] can't find jobInfo, alarm failed.", instanceId); return; } @@ -187,32 +168,6 @@ public class InstanceManager { List userList = SpringUtils.getBean(UserService.class).fetchNotifyUserList(jobInfo.getNotifyUserIds()); omsCenterAlarmService.onJobInstanceFailed(content, userList); } - - // 过期缓存 - instanceId2JobInfo.invalidate(instanceId); } - /** - * 根据任务实例ID查询任务相关信息 - * @param instanceId 任务实例ID - * @return 任务元数据 - */ - public JobInfoDO fetchJobInfo(Long instanceId) { - JobInfoDO jobInfo = instanceId2JobInfo.getIfPresent(instanceId); - if (jobInfo != null) { - return jobInfo; - } - InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); - if (instanceInfo != null) { - return jobInfoRepository.findById(instanceInfo.getJobId()).orElse(null); - } - return null; - } - - /** - * 释放本地缓存,防止内存泄漏 - */ - public static void releaseCache() { - instanceId2JobInfo.cleanUp(); - } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java new file mode 100644 index 00000000..2d81d65a --- /dev/null +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java @@ -0,0 +1,67 @@ +package com.github.kfcfans.powerjob.server.service.instance; + +import com.github.kfcfans.powerjob.server.persistence.core.model.InstanceInfoDO; +import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; +import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository; +import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +/** + * 存储 instance 对应的 JobInfo 信息 + * + * @author tjq + * @since 2020/6/23 + */ +@Service +public class InstanceMetaInfoService { + + @Resource + private JobInfoRepository jobInfoRepository; + @Resource + private InstanceInfoRepository instanceInfoRepository; + + // 缓存,一旦生成任务实例,其对应的 JobInfo 不应该再改变(即使源数据改变) + private Cache instanceId2JobInfoCache; + + private static final int CACHE_CONCURRENCY_LEVEL = 8; + private static final int CACHE_MAX_SIZE = 4096; + + public InstanceMetaInfoService() { + instanceId2JobInfoCache = CacheBuilder.newBuilder() + .concurrencyLevel(CACHE_CONCURRENCY_LEVEL) + .maximumSize(CACHE_MAX_SIZE) + .build(); + } + + /** + * 根据 instanceId 获取 JobInfo + * @param instanceId instanceId + * @return JobInfoDO + * @throws ExecutionException 异常 + */ + public JobInfoDO fetchJobInfoByInstanceId(Long instanceId) throws ExecutionException { + return instanceId2JobInfoCache.get(instanceId, () -> { + InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); + if (instanceInfo != null) { + Optional jobInfoOpt = jobInfoRepository.findById(instanceInfo.getJobId()); + return jobInfoOpt.orElseThrow(() -> new IllegalArgumentException("can't find JobInfo by jobId: " + instanceInfo.getJobId())); + } + throw new IllegalArgumentException("can't find Instance by instanceId: " + instanceId); + }); + } + + /** + * 装载缓存 + * @param instanceId instanceId + * @param jobInfoDO 原始的任务数据 + */ + public void loadJobInfo(Long instanceId, JobInfoDO jobInfoDO) { + instanceId2JobInfoCache.put(instanceId, jobInfoDO); + } +} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java index e3b9fd88..a74ca467 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/timing/CleanService.java @@ -60,7 +60,6 @@ public class CleanService { // 释放本地缓存 WorkerManagerService.releaseContainerInfos(); - InstanceManager.releaseCache(); // 删除数据库运行记录 cleanInstanceLog(); From 44445901da4cca025086e50e97b1378f6220a4e0 Mon Sep 17 00:00:00 2001 From: tjq Date: Wed, 24 Jun 2020 11:29:19 +0800 Subject: [PATCH 04/10] [dev] support instance status query --- others/oms-sql.sql | 121 +++++++++--------- others/script/jenkins_auto_build.sh | 4 +- powerjob-server/docker/Dockerfile | 5 +- .../service/ha/ClusterStatusHolder.java | 2 +- .../web/controller/InstanceController.java | 6 + .../web/controller/SystemInfoController.java | 6 +- .../WorkflowInstanceController.java | 7 + .../web/request/QueryInstanceRequest.java | 2 + .../request/QueryWorkflowInstanceRequest.java | 2 + .../server/web/response/SystemOverviewVO.java | 4 +- .../powerjob/server/test/TimezoneTest.java | 34 +++++ powerjob-worker-agent/Dockerfile | 1 + .../background/ServerDiscoveryService.java | 8 +- 13 files changed, 131 insertions(+), 71 deletions(-) create mode 100644 powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/TimezoneTest.java diff --git a/others/oms-sql.sql b/others/oms-sql.sql index fca1aca6..332cd8ee 100644 --- a/others/oms-sql.sql +++ b/others/oms-sql.sql @@ -2,14 +2,14 @@ Navicat Premium Data Transfer Source Server Type : MySQL - Source Server Version : 50724 - Source Schema : oms-product + Source Server Version : 80020 + Source Schema : powerjob-product Target Server Type : MySQL - Target Server Version : 50724 + Target Server Version : 80020 File Encoding : 65001 - Date: 07/06/2020 11:11:47 + Date: 23/06/2020 22:30:06 */ SET NAMES utf8mb4; @@ -20,130 +20,131 @@ SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- DROP TABLE IF EXISTS `app_info`; CREATE TABLE `app_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint NOT NULL AUTO_INCREMENT, `app_name` varchar(255) DEFAULT NULL, `current_server` varchar(255) DEFAULT NULL, - `description` varchar(255) DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `appNameUK` (`app_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for container_info -- ---------------------------- DROP TABLE IF EXISTS `container_info`; CREATE TABLE `container_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `app_id` bigint(20) DEFAULT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `app_id` bigint DEFAULT NULL, `container_name` varchar(255) DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, `last_deploy_time` datetime(6) DEFAULT NULL, `source_info` varchar(255) DEFAULT NULL, - `source_type` int(11) DEFAULT NULL, - `status` int(11) DEFAULT NULL, + `source_type` int DEFAULT NULL, + `status` int DEFAULT NULL, `version` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDX8hixyaktlnwil2w9up6b0p898` (`app_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for instance_info -- ---------------------------- DROP TABLE IF EXISTS `instance_info`; CREATE TABLE `instance_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `actual_trigger_time` bigint(20) DEFAULT NULL, - `app_id` bigint(20) DEFAULT NULL, - `expected_trigger_time` bigint(20) DEFAULT NULL, - `finished_time` bigint(20) DEFAULT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `actual_trigger_time` bigint DEFAULT NULL, + `app_id` bigint DEFAULT NULL, + `expected_trigger_time` bigint DEFAULT NULL, + `finished_time` bigint DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, - `instance_id` bigint(20) DEFAULT NULL, + `instance_id` bigint DEFAULT NULL, `instance_params` text, - `job_id` bigint(20) DEFAULT NULL, + `job_id` bigint DEFAULT NULL, + `last_report_time` bigint DEFAULT NULL, `result` text, - `running_times` bigint(20) DEFAULT NULL, - `status` int(11) DEFAULT NULL, + `running_times` bigint DEFAULT NULL, + `status` int DEFAULT NULL, `task_tracker_address` varchar(255) DEFAULT NULL, - `type` int(11) DEFAULT NULL, - `wf_instance_id` bigint(20) DEFAULT NULL, + `type` int DEFAULT NULL, + `wf_instance_id` bigint DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDX5b1nhpe5je7gc5s1ur200njr7` (`job_id`), KEY `IDXjnji5lrr195kswk6f7mfhinrs` (`app_id`), KEY `IDXa98hq3yu0l863wuotdjl7noum` (`instance_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for job_info -- ---------------------------- DROP TABLE IF EXISTS `job_info`; CREATE TABLE `job_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `app_id` bigint(20) DEFAULT NULL, - `concurrency` int(11) DEFAULT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `app_id` bigint DEFAULT NULL, + `concurrency` int DEFAULT NULL, `designated_workers` varchar(255) DEFAULT NULL, - `execute_type` int(11) DEFAULT NULL, + `execute_type` int DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, - `instance_retry_num` int(11) DEFAULT NULL, - `instance_time_limit` bigint(20) DEFAULT NULL, + `instance_retry_num` int DEFAULT NULL, + `instance_time_limit` bigint DEFAULT NULL, `job_description` varchar(255) DEFAULT NULL, `job_name` varchar(255) DEFAULT NULL, `job_params` varchar(255) DEFAULT NULL, - `max_instance_num` int(11) DEFAULT NULL, - `max_worker_count` int(11) DEFAULT NULL, + `max_instance_num` int DEFAULT NULL, + `max_worker_count` int DEFAULT NULL, `min_cpu_cores` double NOT NULL, `min_disk_space` double NOT NULL, `min_memory_space` double NOT NULL, - `next_trigger_time` bigint(20) DEFAULT NULL, + `next_trigger_time` bigint DEFAULT NULL, `notify_user_ids` varchar(255) DEFAULT NULL, `processor_info` text, - `processor_type` int(11) DEFAULT NULL, - `status` int(11) DEFAULT NULL, - `task_retry_num` int(11) DEFAULT NULL, + `processor_type` int DEFAULT NULL, + `status` int DEFAULT NULL, + `task_retry_num` int DEFAULT NULL, `time_expression` varchar(255) DEFAULT NULL, - `time_expression_type` int(11) DEFAULT NULL, + `time_expression_type` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDXk2xprmn3lldmlcb52i36udll1` (`app_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for oms_lock -- ---------------------------- DROP TABLE IF EXISTS `oms_lock`; CREATE TABLE `oms_lock` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint NOT NULL AUTO_INCREMENT, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, `lock_name` varchar(255) DEFAULT NULL, - `max_lock_time` bigint(20) DEFAULT NULL, + `max_lock_time` bigint DEFAULT NULL, `ownerip` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `lockNameUK` (`lock_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for server_info -- ---------------------------- DROP TABLE IF EXISTS `server_info`; CREATE TABLE `server_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint NOT NULL AUTO_INCREMENT, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, `ip` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `UKtk8ytgpl7mpukhnvhbl82kgvy` (`ip`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for user_info -- ---------------------------- DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, + `id` bigint NOT NULL AUTO_INCREMENT, `email` varchar(255) DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, @@ -151,47 +152,47 @@ CREATE TABLE `user_info` ( `phone` varchar(255) DEFAULT NULL, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for workflow_info -- ---------------------------- DROP TABLE IF EXISTS `workflow_info`; CREATE TABLE `workflow_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `app_id` bigint(20) DEFAULT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `app_id` bigint DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, - `max_wf_instance_num` int(11) DEFAULT NULL, - `next_trigger_time` bigint(20) DEFAULT NULL, + `max_wf_instance_num` int DEFAULT NULL, + `next_trigger_time` bigint DEFAULT NULL, `notify_user_ids` varchar(255) DEFAULT NULL, `pedag` text, - `status` int(11) DEFAULT NULL, + `status` int DEFAULT NULL, `time_expression` varchar(255) DEFAULT NULL, - `time_expression_type` int(11) DEFAULT NULL, + `time_expression_type` int DEFAULT NULL, `wf_description` varchar(255) DEFAULT NULL, `wf_name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDX7uo5w0e3beeho3fnx9t7eiol3` (`app_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Table structure for workflow_instance_info -- ---------------------------- DROP TABLE IF EXISTS `workflow_instance_info`; CREATE TABLE `workflow_instance_info` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `actual_trigger_time` bigint(20) DEFAULT NULL, - `app_id` bigint(20) DEFAULT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, + `actual_trigger_time` bigint DEFAULT NULL, + `app_id` bigint DEFAULT NULL, `dag` text, - `finished_time` bigint(20) DEFAULT NULL, + `finished_time` bigint DEFAULT NULL, `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, `result` text, - `status` int(11) DEFAULT NULL, - `wf_instance_id` bigint(20) DEFAULT NULL, - `workflow_id` bigint(20) DEFAULT NULL, + `status` int DEFAULT NULL, + `wf_instance_id` bigint DEFAULT NULL, + `workflow_id` bigint DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; SET FOREIGN_KEY_CHECKS = 1; diff --git a/others/script/jenkins_auto_build.sh b/others/script/jenkins_auto_build.sh index 44d2a44a..213b60b8 100644 --- a/others/script/jenkins_auto_build.sh +++ b/others/script/jenkins_auto_build.sh @@ -34,6 +34,6 @@ echo "================== 准备启动 powerjob-agent ==================" serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server) serverAddress="$serverIP:7700" echo "使用的Server地址:$serverAddress" -docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:latest -docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:latest +docker run -d --restart=always -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:latest +docker run -d --restart=always -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:latest diff --git a/powerjob-server/docker/Dockerfile b/powerjob-server/docker/Dockerfile index 10fc1d5e..2578a85c 100644 --- a/powerjob-server/docker/Dockerfile +++ b/powerjob-server/docker/Dockerfile @@ -1,4 +1,4 @@ -# 基础镜像(支持 amd64 & arm64) +# 基础镜像(支持 amd64 & arm64),based on Ubuntu 18.04.4 LTS FROM adoptopenjdk:8-jdk-hotspot # 维护者 MAINTAINER tengjiqi@gmail.com @@ -11,8 +11,9 @@ COPY settings.xml /opt/powerjob-maven/conf/settings.xml # 设置 maven 环境变量(maven invoker 读取该变量调用 maven) ENV M2_HOME=/opt/powerjob-maven -# 设置时区(Debian专用方法) +# 设置时区 ENV TZ=Asia/Shanghai +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 设置其他环境变量 ENV APP_NAME=powerjob-server diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java index 46c664cf..80eb67ad 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ClusterStatusHolder.java @@ -49,7 +49,7 @@ public class ClusterStatusHolder { Long oldTime = address2ActiveTime.getOrDefault(workerAddress, -1L); if (heartbeatTime < oldTime) { - log.warn("[ClusterStatusHolder-{}] receive the old heartbeat: {}.", appName, heartbeat); + log.warn("[ClusterStatusHolder-{}] receive the expired heartbeat from {}, serverTime: {}, heartTime: {}", appName, heartbeat.getWorkerAddress(), System.currentTimeMillis(), heartbeat.getHeartbeatTime()); return; } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java index af55157a..537710e8 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java @@ -1,5 +1,6 @@ package com.github.kfcfans.powerjob.server.web.controller; +import com.github.kfcfans.powerjob.common.InstanceStatus; import com.github.kfcfans.powerjob.common.model.InstanceDetail; import com.github.kfcfans.powerjob.common.response.ResultDTO; import com.github.kfcfans.powerjob.server.akka.OhMyServer; @@ -21,6 +22,7 @@ import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -112,6 +114,10 @@ public class InstanceController { BeanUtils.copyProperties(request, queryEntity); queryEntity.setType(request.getType().getV()); + if (!StringUtils.isEmpty(request.getStatus())) { + queryEntity.setStatus(InstanceStatus.valueOf(request.getStatus()).getV()); + } + Page pageResult = instanceInfoRepository.findAll(Example.of(queryEntity), pageable); return ResultDTO.success(convertPage(pageResult)); } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java index f238b75f..6d3e8bb2 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/SystemInfoController.java @@ -3,6 +3,7 @@ package com.github.kfcfans.powerjob.server.web.controller; import akka.actor.ActorSelection; import akka.pattern.Patterns; import com.github.kfcfans.powerjob.common.InstanceStatus; +import com.github.kfcfans.powerjob.common.OmsConstant; import com.github.kfcfans.powerjob.common.RemoteConstant; import com.github.kfcfans.powerjob.common.model.SystemMetrics; import com.github.kfcfans.powerjob.common.response.AskResponse; @@ -18,6 +19,7 @@ import com.github.kfcfans.powerjob.server.web.response.SystemOverviewVO; import com.github.kfcfans.powerjob.server.web.response.WorkerStatusVO; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; @@ -103,8 +105,10 @@ public class SystemInfoController { Date date = DateUtils.addDays(new Date(), -1); overview.setFailedInstanceCount(instanceInfoRepository.countByAppIdAndStatusAndGmtCreateAfter(appId, InstanceStatus.FAILED.getV(), date)); + // 服务器时区 + overview.setTimezone(TimeZone.getDefault().getDisplayName()); // 服务器时间 - overview.setServerTime(System.currentTimeMillis()); + overview.setServerTime(DateFormatUtils.format(new Date(), OmsConstant.TIME_PATTERN)); return ResultDTO.success(overview); } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java index 99258ec9..67c1101f 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/WorkflowInstanceController.java @@ -1,5 +1,6 @@ package com.github.kfcfans.powerjob.server.web.controller; +import com.github.kfcfans.powerjob.common.WorkflowInstanceStatus; import com.github.kfcfans.powerjob.common.response.ResultDTO; import com.github.kfcfans.powerjob.server.persistence.PageResult; import com.github.kfcfans.powerjob.server.persistence.core.model.WorkflowInstanceInfoDO; @@ -13,6 +14,7 @@ import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -54,6 +56,11 @@ public class WorkflowInstanceController { WorkflowInstanceInfoDO queryEntity = new WorkflowInstanceInfoDO(); BeanUtils.copyProperties(req, queryEntity); + + if (!StringUtils.isEmpty(req.getStatus())) { + queryEntity.setStatus(WorkflowInstanceStatus.valueOf(req.getStatus()).getV()); + } + Page ps = workflowInstanceInfoRepository.findAll(Example.of(queryEntity), pageable); return ResultDTO.success(convertPage(ps)); diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java index dae309a7..cededd6d 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryInstanceRequest.java @@ -24,4 +24,6 @@ public class QueryInstanceRequest { private Long instanceId; private Long jobId; private Long wfInstanceId; + + private String status; } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java index f566f41b..62128579 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/QueryWorkflowInstanceRequest.java @@ -21,4 +21,6 @@ public class QueryWorkflowInstanceRequest { // 查询条件(NORMAL/WORKFLOW) private Long wfInstanceId; private Long workflowId; + + private String status; } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java index 39e8c1ab..3e25dfbd 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/response/SystemOverviewVO.java @@ -13,6 +13,8 @@ public class SystemOverviewVO { private long jobCount; private long runningInstanceCount; private long failedInstanceCount; + // 服务器时区 + private String timezone; // 服务器时间 - private long serverTime; + private String serverTime; } diff --git a/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/TimezoneTest.java b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/TimezoneTest.java new file mode 100644 index 00000000..33a3c1bf --- /dev/null +++ b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/TimezoneTest.java @@ -0,0 +1,34 @@ +package com.github.kfcfans.powerjob.server.test; + +import com.github.kfcfans.powerjob.common.OmsConstant; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.junit.jupiter.api.Test; + +import java.util.Date; +import java.util.TimeZone; + +/** + * 时区问题测试 + * + * @author tjq + * @since 2020/6/24 + */ +public class TimezoneTest { + + @Test + public void testTimeZone() { + Date now = new Date(); + System.out.println(now.toString()); + + System.out.println("timestamp before GMT: " + System.currentTimeMillis()); + + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + TimeZone timeZone = TimeZone.getDefault(); + System.out.println(timeZone.getDisplayName()); + System.out.println(new Date()); + System.out.println(DateFormatUtils.format(new Date(), OmsConstant.TIME_PATTERN)); + + System.out.println("timestamp after GMT: " + System.currentTimeMillis()); + } + +} diff --git a/powerjob-worker-agent/Dockerfile b/powerjob-worker-agent/Dockerfile index c2404740..7fa509cb 100644 --- a/powerjob-worker-agent/Dockerfile +++ b/powerjob-worker-agent/Dockerfile @@ -3,6 +3,7 @@ FROM adoptopenjdk:8-jdk-hotspot MAINTAINER tengjiqi@gmail.com # 设置时区 ENV TZ=Asia/Shanghai +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV APP_NAME=powerjob-worker-agent ENV PARAMS="" diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/ServerDiscoveryService.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/ServerDiscoveryService.java index 5fb104fa..b31b7653 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/ServerDiscoveryService.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/ServerDiscoveryService.java @@ -62,18 +62,18 @@ public class ServerDiscoveryService { } if (StringUtils.isEmpty(result)) { - log.warn("[OMS-ServerDiscoveryService] can't find any available server, this worker has been quarantined."); + log.warn("[OmsServerDiscovery] can't find any available server, this worker has been quarantined."); // 在 Server 高可用的前提下,连续失败多次,说明该节点与外界失联,Server已经将秒级任务转移到其他Worker,需要杀死本地的任务 if (FAILED_COUNT++ > MAX_FAILED_COUNT) { - log.error("[OMS-ServerDiscoveryService] can't find any available server for 3 consecutive times, It's time to kill all frequent job in this worker."); + log.warn("[OmsServerDiscovery] can't find any available server for 3 consecutive times, It's time to kill all frequent job in this worker."); List frequentInstanceIds = TaskTrackerPool.getAllFrequentTaskTrackerKeys(); if (!CollectionUtils.isEmpty(frequentInstanceIds)) { frequentInstanceIds.forEach(instanceId -> { TaskTracker taskTracker = TaskTrackerPool.remove(instanceId); taskTracker.destroy(); - log.warn("[OMS-ServerDiscoveryService] kill frequent instance(instanceId={}) due to can't find any available server.", instanceId); + log.warn("[OmsServerDiscovery] kill frequent instance(instanceId={}) due to can't find any available server.", instanceId); }); } @@ -83,7 +83,7 @@ public class ServerDiscoveryService { }else { // 重置失败次数 FAILED_COUNT = 0; - log.debug("[OMS-ServerDiscoveryService] current server is {}.", result); + log.debug("[OmsServerDiscovery] current server is {}.", result); return result; } } From eec6fea0256e34f7dfe6350e63df4c26029bfebd Mon Sep 17 00:00:00 2001 From: tjq Date: Wed, 24 Jun 2020 13:56:23 +0800 Subject: [PATCH 05/10] [dev] support delivery jvm options to docker --- others/script/build_docker.sh | 20 +++++++++++++++++--- others/script/jenkins_auto_build.sh | 21 ++++++++++++++++++--- powerjob-server/docker/Dockerfile | 5 +++-- powerjob-worker-agent/Dockerfile | 7 +++---- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/others/script/build_docker.sh b/others/script/build_docker.sh index 3d91f178..8d4c7c4b 100755 --- a/others/script/build_docker.sh +++ b/others/script/build_docker.sh @@ -62,7 +62,8 @@ if [ "$startup" = "y" ] || [ "$startup" = "Y" ]; then echo "================== 准备启动 powerjob-server ==================" docker run -d \ --name powerjob-server \ - -p 7700:7700 -p 10086:10086 \ + -p 7700:7700 -p 10086:10086 -p 5001:5005 -p 10001:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ -e PARAMS="--spring.profiles.active=pre" \ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:$version @@ -74,8 +75,21 @@ if [ "$startup" = "y" ] || [ "$startup" = "Y" ]; then serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server) serverAddress="$serverIP:7700" echo "使用的Server地址:$serverAddress" - docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:$version - docker run -d -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:$version + docker run -d \ + --name powerjob-agent \ + -p 27777:27777 -p 5002:5005 -p 10002:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ + -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ + -v ~/docker/powerjob-agent:/root \ + tjqq/powerjob-agent:$version + + docker run -d \ + --name powerjob-agent2 \ + -p 27778:27777 -p 5003:5005 -p 10003:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" \ + -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ + -v ~/docker/powerjob-agent2:/root \ + tjqq/powerjob-agent:$version tail -f -n 100 ~/docker/powerjob-agent/powerjob/logs/powerjob-agent-application.log fi \ No newline at end of file diff --git a/others/script/jenkins_auto_build.sh b/others/script/jenkins_auto_build.sh index 213b60b8..a0b60f6a 100644 --- a/others/script/jenkins_auto_build.sh +++ b/others/script/jenkins_auto_build.sh @@ -24,7 +24,8 @@ echo "================== 准备启动 powerjob-server ==================" docker run -d \ --restart=always \ --name powerjob-server \ - -p 7700:7700 -p 10086:10086 \ + -p 7700:7700 -p 10086:10086 -p 5001:5005 -p 10001:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://124.70.67.79:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://124.70.67.79:27017/powerjob-product" \ -v ~/docker/powerjob-server:/root/powerjob-server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:latest @@ -34,6 +35,20 @@ echo "================== 准备启动 powerjob-agent ==================" serverIP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' powerjob-server) serverAddress="$serverIP:7700" echo "使用的Server地址:$serverAddress" -docker run -d --restart=always -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27777:27777 --name powerjob-agent -v ~/docker/powerjob-agent:/root tjqq/powerjob-agent:latest -docker run -d --restart=always -e PARAMS="--app powerjob-agent-test --server $serverAddress" -p 27778:27777 --name powerjob-agent2 -v ~/docker/powerjob-agent2:/root tjqq/powerjob-agent:latest + +docker run -d \ + --name powerjob-agent \ + -p 27777:27777 -p 5002:5005 -p 10002:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ + -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ + -v ~/docker/powerjob-agent:/root \ + tjqq/powerjob-agent:$version + +docker run -d \ + --name powerjob-agent2 \ + -p 27778:27777 -p 5003:5005 -p 10003:10000 \ + -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ + -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ + -v ~/docker/powerjob-agent2:/root \ + tjqq/powerjob-agent:$version diff --git a/powerjob-server/docker/Dockerfile b/powerjob-server/docker/Dockerfile index 2578a85c..98d5120b 100644 --- a/powerjob-server/docker/Dockerfile +++ b/powerjob-server/docker/Dockerfile @@ -17,8 +17,9 @@ RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 设置其他环境变量 ENV APP_NAME=powerjob-server -# 传递 SpringBoot 启动参数 +# 传递 SpringBoot 启动参数 和 JVM参数 ENV PARAMS="" +ENV JVMOPTIONS="" # 将应用 jar 包拷入 docker COPY powerjob-server.jar /powerjob-server.jar # 暴露端口(HTTP + AKKA) @@ -28,4 +29,4 @@ RUN mkdir -p /root/powerjob-server # 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机) VOLUME /root/powerjob-server # 启动应用 -ENTRYPOINT ["sh","-c","java -jar /powerjob-server.jar $PARAMS"] +ENTRYPOINT ["sh","-c","java $JVMOPTIONS -jar /powerjob-server.jar $PARAMS"] diff --git a/powerjob-worker-agent/Dockerfile b/powerjob-worker-agent/Dockerfile index 7fa509cb..fc667ef0 100644 --- a/powerjob-worker-agent/Dockerfile +++ b/powerjob-worker-agent/Dockerfile @@ -1,12 +1,11 @@ # 为了便于使用 arthas,agent 也使用 jdk 而不是 jre FROM adoptopenjdk:8-jdk-hotspot MAINTAINER tengjiqi@gmail.com -# 设置时区 -ENV TZ=Asia/Shanghai -RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV APP_NAME=powerjob-worker-agent +# 传递 SpringBoot 启动参数 和 JVM参数 ENV PARAMS="" +ENV JVMOPTIONS="" COPY powerjob-agent.jar /powerjob-agent.jar # 暴露端口(AKKA-Client) @@ -14,4 +13,4 @@ EXPOSE 27777 # 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机) VOLUME /root # 启动应用 -ENTRYPOINT ["sh","-c","java -jar /powerjob-agent.jar $PARAMS"] \ No newline at end of file +ENTRYPOINT ["sh","-c","java $JVMOPTIONS -jar /powerjob-agent.jar $PARAMS"] \ No newline at end of file From 0949d80dc50324690f8b7e48a9b1169c7f39bfb7 Mon Sep 17 00:00:00 2001 From: tjq Date: Wed, 24 Jun 2020 16:37:11 +0800 Subject: [PATCH 06/10] [dev] optimize instanceMetadataCache --- .../server/service/DispatchService.java | 6 +- .../server/service/InstanceLogService.java | 8 +- .../service/instance/InstanceManager.java | 9 +- ...vice.java => InstanceMetadataService.java} | 23 ++- .../resources/application-daily.properties | 15 +- .../main/resources/application-pre.properties | 5 +- .../resources/application-product.properties | 5 +- .../src/main/resources/static/index.html | 2 +- .../src/main/resources/static/js/4.js | 158 ++++++++++-------- .../src/main/resources/static/js/5.js | 124 +++++++------- .../src/main/resources/static/js/8.js | 4 +- .../src/main/resources/static/js/9.js | 4 +- .../src/main/resources/static/js/app.js | 6 +- 13 files changed, 213 insertions(+), 156 deletions(-) rename powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/{InstanceMetaInfoService.java => InstanceMetadataService.java} (77%) diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java index 5e57ad56..7f5200a8 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/DispatchService.java @@ -9,7 +9,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceInfoRepository; import com.github.kfcfans.powerjob.server.service.ha.WorkerManagerService; import com.github.kfcfans.powerjob.server.service.instance.InstanceManager; -import com.github.kfcfans.powerjob.server.service.instance.InstanceMetaInfoService; +import com.github.kfcfans.powerjob.server.service.instance.InstanceMetadataService; import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -40,7 +40,7 @@ public class DispatchService { @Resource private InstanceManager instanceManager; @Resource - private InstanceMetaInfoService instanceMetaInfoService; + private InstanceMetadataService instanceMetadataService; @Resource private InstanceInfoRepository instanceInfoRepository; @@ -147,6 +147,6 @@ public class DispatchService { instanceInfoRepository.update4TriggerSucceed(instanceId, WAITING_WORKER_RECEIVE.getV(), currentRunningTimes + 1, current, taskTrackerAddress, dbInstanceParams, now); // 装载缓存 - instanceMetaInfoService.loadJobInfo(instanceId, jobInfo); + instanceMetadataService.loadJobInfo(instanceId, jobInfo); } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java index bb3917b5..025a5720 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/InstanceLogService.java @@ -11,7 +11,7 @@ import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogDO; import com.github.kfcfans.powerjob.server.persistence.local.LocalInstanceLogRepository; import com.github.kfcfans.powerjob.server.persistence.mongodb.GridFsManager; -import com.github.kfcfans.powerjob.server.service.instance.InstanceMetaInfoService; +import com.github.kfcfans.powerjob.server.service.instance.InstanceMetadataService; import com.google.common.base.Stopwatch; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -46,7 +46,7 @@ import java.util.stream.Stream; public class InstanceLogService { @Resource - private InstanceMetaInfoService instanceMetaInfoService; + private InstanceMetadataService instanceMetadataService; @Resource private GridFsManager gridFsManager; // 本地数据库操作bean @@ -317,13 +317,11 @@ public class InstanceLogService { @Scheduled(fixedDelay = 60000) public void timingCheck() { - // TODO: 检查 lastReportTime,过期 instance 调用 sync 同步并删除 - // 定时删除秒级任务的日志 List frequentInstanceIds = Lists.newLinkedList(); instanceId2LastReportTime.keySet().forEach(instanceId -> { try { - JobInfoDO jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(instanceId); + JobInfoDO jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(instanceId); if (TimeExpressionType.frequentTypes.contains(jobInfo.getTimeExpressionType())) { frequentInstanceIds.add(instanceId); } 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 cc2452a9..dee67ee4 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 @@ -41,7 +41,7 @@ public class InstanceManager { @Resource(name = "omsCenterAlarmService") private Alarmable omsCenterAlarmService; @Resource - private InstanceMetaInfoService instanceMetaInfoService; + private InstanceMetadataService instanceMetadataService; @Resource private InstanceInfoRepository instanceInfoRepository; @Resource @@ -57,7 +57,7 @@ public class InstanceManager { Long instanceId = req.getInstanceId(); // 获取相关数据 - JobInfoDO jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(req.getInstanceId()); + JobInfoDO jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(req.getInstanceId()); InstanceInfoDO instanceInfo = instanceInfoRepository.findByInstanceId(instanceId); if (instanceInfo == null) { log.warn("[InstanceManager-{}] can't find InstanceInfo from database", instanceId); @@ -154,7 +154,7 @@ public class InstanceManager { if (status == InstanceStatus.FAILED) { JobInfoDO jobInfo; try { - jobInfo = instanceMetaInfoService.fetchJobInfoByInstanceId(instanceId); + jobInfo = instanceMetadataService.fetchJobInfoByInstanceId(instanceId); }catch (Exception e) { log.warn("[InstanceManager-{}] can't find jobInfo, alarm failed.", instanceId); return; @@ -168,6 +168,9 @@ public class InstanceManager { List userList = SpringUtils.getBean(UserService.class).fetchNotifyUserList(jobInfo.getNotifyUserIds()); omsCenterAlarmService.onJobInstanceFailed(content, userList); } + + // 主动移除缓存,减小内存占用 + instanceMetadataService.invalidateJobInfo(instanceId); } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java similarity index 77% rename from powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java rename to powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java index 2d81d65a..42d59b48 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetaInfoService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/instance/InstanceMetadataService.java @@ -6,6 +6,8 @@ import com.github.kfcfans.powerjob.server.persistence.core.repository.InstanceIn import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -19,7 +21,7 @@ import java.util.concurrent.ExecutionException; * @since 2020/6/23 */ @Service -public class InstanceMetaInfoService { +public class InstanceMetadataService implements InitializingBean { @Resource private JobInfoRepository jobInfoRepository; @@ -29,13 +31,15 @@ public class InstanceMetaInfoService { // 缓存,一旦生成任务实例,其对应的 JobInfo 不应该再改变(即使源数据改变) private Cache instanceId2JobInfoCache; - private static final int CACHE_CONCURRENCY_LEVEL = 8; - private static final int CACHE_MAX_SIZE = 4096; + @Value("${oms.instance.metadata.cache.size}") + private int instanceMetadataCacheSize; + private static final int CACHE_CONCURRENCY_LEVEL = 4; - public InstanceMetaInfoService() { + @Override + public void afterPropertiesSet() throws Exception { instanceId2JobInfoCache = CacheBuilder.newBuilder() .concurrencyLevel(CACHE_CONCURRENCY_LEVEL) - .maximumSize(CACHE_MAX_SIZE) + .maximumSize(instanceMetadataCacheSize) .build(); } @@ -64,4 +68,13 @@ public class InstanceMetaInfoService { public void loadJobInfo(Long instanceId, JobInfoDO jobInfoDO) { instanceId2JobInfoCache.put(instanceId, jobInfoDO); } + + /** + * 失效缓存 + * @param instanceId instanceId + */ + public void invalidateJobInfo(Long instanceId) { + instanceId2JobInfoCache.invalidate(instanceId); + } + } diff --git a/powerjob-server/src/main/resources/application-daily.properties b/powerjob-server/src/main/resources/application-daily.properties index be9b0491..87036311 100644 --- a/powerjob-server/src/main/resources/application-daily.properties +++ b/powerjob-server/src/main/resources/application-daily.properties @@ -3,7 +3,7 @@ logging.config=classpath:logback-dev.xml ####### 数据库配置 ####### spring.datasource.core.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3391/powerjob-daily?useUnicode=true&characterEncoding=UTF-8 +spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8 spring.datasource.core.username=root spring.datasource.core.password=No1Bug2Please3! spring.datasource.core.hikari.maximum-pool-size=20 @@ -21,8 +21,11 @@ spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true ####### 资源清理配置 ####### -oms.log.retention.local=0 -oms.log.retention.remote=0 -oms.container.retention.local=0 -oms.container.retention.remote=0 -oms.instanceinfo.retention=0 \ No newline at end of file +oms.log.retention.local=1 +oms.log.retention.remote=1 +oms.container.retention.local=1 +oms.container.retention.remote=-1 +oms.instanceinfo.retention=1 + +####### 缓存配置 ####### +oms.instance.metadata.cache.size=1024 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/application-pre.properties b/powerjob-server/src/main/resources/application-pre.properties index 4cad8276..f3cd7e40 100644 --- a/powerjob-server/src/main/resources/application-pre.properties +++ b/powerjob-server/src/main/resources/application-pre.properties @@ -25,4 +25,7 @@ oms.log.retention.local=3 oms.log.retention.remote=3 oms.container.retention.local=3 oms.container.retention.remote=-1 -oms.instanceinfo.retention=3 \ No newline at end of file +oms.instanceinfo.retention=3 + +####### 缓存配置 ####### +oms.instance.metadata.cache.size=1024 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/application-product.properties b/powerjob-server/src/main/resources/application-product.properties index ed1e8d00..8df29624 100644 --- a/powerjob-server/src/main/resources/application-product.properties +++ b/powerjob-server/src/main/resources/application-product.properties @@ -25,4 +25,7 @@ oms.log.retention.local=7 oms.log.retention.remote=7 oms.container.retention.local=7 oms.container.retention.remote=-1 -oms.instanceinfo.retention=3 \ No newline at end of file +oms.instanceinfo.retention=3 + +####### 缓存配置 ####### +oms.instance.metadata.cache.size=2048 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/static/index.html b/powerjob-server/src/main/resources/static/index.html index 0d8ada21..8d933786 100644 --- a/powerjob-server/src/main/resources/static/index.html +++ b/powerjob-server/src/main/resources/static/index.html @@ -5,7 +5,7 @@ - oms-console + PowerJob