From cda0c64435f2144f4d6b1a8d22bc278fa66c5025 Mon Sep 17 00:00:00 2001 From: tjq Date: Tue, 19 May 2020 13:44:25 +0800 Subject: [PATCH] [fix] fix upload bug --- oh-my-scheduler-server/pom.xml | 8 +++ .../kfcfans/oms/server/akka/OhMyServer.java | 3 + .../oms/server/common/utils/TimeUtils.java | 63 +++++++++++++++++++ .../oms/server/service/ContainerService.java | 4 +- .../worker/common/utils/SerializerUtils.java | 1 - 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/common/utils/TimeUtils.java diff --git a/oh-my-scheduler-server/pom.xml b/oh-my-scheduler-server/pom.xml index ad79c368..ffad5f2f 100644 --- a/oh-my-scheduler-server/pom.xml +++ b/oh-my-scheduler-server/pom.xml @@ -22,6 +22,7 @@ 2.5.2 5.7.0.202003110725-r 3.0.1 + 3.6 true @@ -107,6 +108,13 @@ ${jgit.version} + + + commons-net + commons-net + ${commons.net.version} + + org.apache.maven.shared diff --git a/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/akka/OhMyServer.java b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/akka/OhMyServer.java index 02a1cb21..6e4c1054 100644 --- a/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/akka/OhMyServer.java +++ b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/akka/OhMyServer.java @@ -8,6 +8,7 @@ import com.github.kfcfans.oms.common.utils.NetUtils; import com.github.kfcfans.oms.server.akka.actors.FriendActor; import com.github.kfcfans.oms.server.akka.actors.ServerActor; import com.github.kfcfans.oms.server.common.utils.PropertyUtils; +import com.github.kfcfans.oms.server.common.utils.TimeUtils; import com.google.common.base.Stopwatch; import com.google.common.collect.Maps; import com.typesafe.config.Config; @@ -38,6 +39,8 @@ public class OhMyServer { Stopwatch stopwatch = Stopwatch.createStarted(); log.info("[OhMyServer] OhMyServer's akka system start to bootstrap..."); + TimeUtils.check(); + // 解析配置文件 PropertyUtils.init(); Properties properties = PropertyUtils.getProperties(); diff --git a/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/common/utils/TimeUtils.java b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/common/utils/TimeUtils.java new file mode 100644 index 00000000..67ac5ca2 --- /dev/null +++ b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/common/utils/TimeUtils.java @@ -0,0 +1,63 @@ +package com.github.kfcfans.oms.server.common.utils; + +import com.github.kfcfans.oms.common.RemoteConstant; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.net.ntp.NTPUDPClient; +import org.apache.commons.net.ntp.NtpV3Packet; +import org.apache.commons.net.ntp.TimeInfo; + +import java.net.InetAddress; +import java.util.List; + +/** + * 时间工具 + * + * @author tjq + * @since 2020/5/19 + */ +@Slf4j +public class TimeUtils { + + // NTP 授时服务器(阿里云 -> 交大 -> 水果) + private static final List NTP_SERVER_LIST = Lists.newArrayList("ntp.aliyun.com", "ntp.sjtu.edu.cn", "time1.apple.com"); + // 最大误差 5S + private static final long MAX_OFFSET = 5000; + + public static void check() throws TimeCheckException { + + NTPUDPClient timeClient = new NTPUDPClient(); + timeClient.setDefaultTimeout((int) RemoteConstant.DEFAULT_TIMEOUT_MS); + + for (String address : NTP_SERVER_LIST) { + try { + TimeInfo t = timeClient.getTime(InetAddress.getByName(address)); + NtpV3Packet ntpV3Packet = t.getMessage(); + log.info("[TimeUtils] use ntp server: {}, request result: {}", address, ntpV3Packet); + // RFC-1305标准:https://tools.ietf.org/html/rfc1305 + // 忽略传输误差吧...也就几十毫秒的事(阿里云给力啊!) + long local = System.currentTimeMillis(); + long ntp = ntpV3Packet.getTransmitTimeStamp().getTime(); + long offset = local - ntp; + if (Math.abs(offset) > MAX_OFFSET) { + String msg = String.format("inaccurate server time(local:%d, ntp:%d), please use ntp update to calibration time", local, ntp); + throw new TimeCheckException(msg); + } + return; + }catch (Exception ignore) { + log.warn("[TimeUtils] ntp server: {} may down!", address); + } + } + + throw new TimeCheckException("no available ntp server, maybe alibaba, sjtu and apple are both collapse"); + } + + public static final class TimeCheckException extends RuntimeException { + public TimeCheckException(String message) { + super(message); + } + public TimeCheckException(Throwable cause) { + super(cause); + } + } +} diff --git a/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/service/ContainerService.java b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/service/ContainerService.java index f3bdf4f6..896ba4dc 100644 --- a/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/service/ContainerService.java +++ b/oh-my-scheduler-server/src/main/java/com/github/kfcfans/oms/server/service/ContainerService.java @@ -151,7 +151,9 @@ public class ContainerService { // 将文件拷贝到正确的路径 String finalFileStr = OmsFileUtils.genContainerJarPath() + fileName; File finalFile = new File(finalFileStr); - FileUtils.forceDelete(finalFile); + if (finalFile.exists()) { + FileUtils.forceDelete(finalFile); + } FileUtils.moveFile(tmpFile, finalFile); return md5; diff --git a/oh-my-scheduler-worker/src/main/java/com/github/kfcfans/oms/worker/common/utils/SerializerUtils.java b/oh-my-scheduler-worker/src/main/java/com/github/kfcfans/oms/worker/common/utils/SerializerUtils.java index 99248566..3bb982fb 100644 --- a/oh-my-scheduler-worker/src/main/java/com/github/kfcfans/oms/worker/common/utils/SerializerUtils.java +++ b/oh-my-scheduler-worker/src/main/java/com/github/kfcfans/oms/worker/common/utils/SerializerUtils.java @@ -4,7 +4,6 @@ package com.github.kfcfans.oms.worker.common.utils; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; -import com.esotericsoftware.kryo.util.Pool; /** * 序列化器