From 0e42e379b0b9c19a65d0bc5f271e3e87db7d0d97 Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Mon, 6 May 2024 23:39:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.0.0):=201=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=8F=B7=E6=AE=B5=E6=A8=A1=E5=BC=8F=E7=94=9F=E6=88=90?= =?UTF-8?q?ID=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98=202=E3=80=81=20=E7=94=9F?= =?UTF-8?q?=E6=88=90snail=20job=E5=90=AF=E5=8A=A8logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rpc/client/RpcClientInvokeHandler.java | 3 +- .../common/core/constant/SystemConstants.java | 15 ++++--- .../generator/id/SegmentIdGenerator.java | 45 +++++++++++-------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java index 20a69cf24..6d7d0d820 100644 --- a/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java +++ b/snail-job-client/snail-job-client-common/src/main/java/com/aizuda/snailjob/client/common/rpc/client/RpcClientInvokeHandler.java @@ -25,7 +25,6 @@ import java.util.function.Consumer; * @date : 2023-05-11 21:45 * @since 1.3.0 */ -@Slf4j public class RpcClientInvokeHandler implements InvocationHandler { private final Consumer consumer; @@ -62,7 +61,7 @@ public class RpcClientInvokeHandler implements InvocationHandler { sw.stop(); } - SnailJobLog.LOCAL.info("request complete requestId:[{}] 耗时:[{}ms]", snailJobRequest.getReqId(), sw.getTotalTimeMillis()); + SnailJobLog.LOCAL.debug("request complete requestId:[{}] 耗时:[{}ms]", snailJobRequest.getReqId(), sw.getTotalTimeMillis()); if (async) { return null; } else { diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java index c7c04c265..23a3a6335 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/constant/SystemConstants.java @@ -76,12 +76,15 @@ public interface SystemConstants { String REPORT_JOB_DISPATCH_RESULT = "/report/dispatch/result"; } - String LOGO = " ___ ___ _ \n" + - " | __|__ _ ____ _ | _ \\___| |_ _ _ _ _ \n" + - " | _|/ _` (_-< || | | / -_) _| '_| || |\n" + - " |___\\__,_/__/\\_, | |_|_\\___|\\__|_| \\_, |\n" + - " |__/ |__/ \n" + - " :: Snail Job :: (v{}) \n"; + String LOGO = """ + ______ _ __ _____ __ \s + .' ____ \\ (_)[ | |_ _| [ | \s + | (___ \\_| _ .--. ,--. __ | | | | .--. | |.--. \s + _.____`. [ `.-. |`'_\\ :[ | | | _ | / .'`\\ \\| '/'`\\ \\\s + | \\____) | | | | |// | |,| | | | | |__' | \\__. || \\__/ |\s + \\______.'[___||__]'-;__[___|___] `.____.''.__.'[__;.__.' \s + :: Snail Job :: (v{}) \s + """; /** * 调度时长 diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/generator/id/SegmentIdGenerator.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/generator/id/SegmentIdGenerator.java index a13a3a48a..90aa1a39c 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/generator/id/SegmentIdGenerator.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/generator/id/SegmentIdGenerator.java @@ -29,7 +29,7 @@ import java.util.stream.Collectors; * 特别声明: 此算法来自美团的leaf号段模式 * see: https://github.com/Meituan-Dianping/Leaf/blob/master/leaf-server/src/main/java/com/sankuai/inf/leaf/server/service/SegmentService.java * - * @author opensnail + * @author opensnail * @date 2023-05-04 * @since 1.2.0 */ @@ -69,17 +69,17 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { @Override public void start() { - SnailJobLog.LOCAL.info("SegmentIdGenerator start"); + SnailJobLog.LOCAL.info("SegmentIdGenerator start"); // 确保加载到kv后才初始化成功 updateCacheFromDb(); initOK = true; updateCacheFromDbAtEveryMinute(); - SnailJobLog.LOCAL.info("SegmentIdGenerator start end"); + SnailJobLog.LOCAL.info("SegmentIdGenerator start end"); } @Override public void close() { - SnailJobLog.LOCAL.info("SegmentIdGenerator close"); + SnailJobLog.LOCAL.info("SegmentIdGenerator close"); } public static class UpdateThreadFactory implements ThreadFactory { @@ -109,7 +109,8 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { private void updateCacheFromDb() { try { List sequenceAllocs = sequenceAllocMapper - .selectList(new LambdaQueryWrapper().select(SequenceAlloc::getGroupName)); + .selectList(new LambdaQueryWrapper() + .select(SequenceAlloc::getGroupName, SequenceAlloc::getNamespaceId)); if (CollectionUtils.isEmpty(sequenceAllocs)) { return; } @@ -136,7 +137,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { segment.setMax(0); segment.setStep(0); cache.put(tag, buffer); - SnailJobLog.LOCAL.debug("Add tag {} from db to IdCache, SegmentBuffer {}", tag, buffer); + SnailJobLog.LOCAL.debug("Add tag {} from db to IdCache, SegmentBuffer {}", tag, buffer); } //cache中已失效的tags从cache删除 for (int i = 0; i < dbTags.size(); i++) { @@ -147,10 +148,10 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } for (Pair tag : removeTagsSet) { cache.remove(tag); - SnailJobLog.LOCAL.debug("Remove tag {} from IdCache", tag); + SnailJobLog.LOCAL.debug("Remove tag {} from IdCache", tag); } } catch (Exception e) { - SnailJobLog.LOCAL.error("update cache from db exception", e); + SnailJobLog.LOCAL.error("update cache from db exception", e); } } @@ -170,7 +171,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { SnailJobLog.LOCAL.debug("Init buffer. Update key {} {} from db", key, buffer.getCurrent()); buffer.setInitOk(true); } catch (Exception e) { - SnailJobLog.LOCAL.error("Init buffer {} exception", buffer.getCurrent(), e); + SnailJobLog.LOCAL.error("Init buffer {} exception", buffer.getCurrent(), e); } } } @@ -184,18 +185,24 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { SegmentBuffer buffer = segment.getBuffer(); SequenceAlloc sequenceAlloc; LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() - .set(SequenceAlloc::getMaxId, "max_id + step") + .setSql("max_id = max_id + step") .set(SequenceAlloc::getUpdateDt, new Date()) .eq(SequenceAlloc::getGroupName, key.getKey()) .eq(SequenceAlloc::getNamespaceId, key.getValue()); if (!buffer.isInitOk()) { sequenceAllocMapper.update(wrapper); - sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); + sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper() + .eq(SequenceAlloc::getGroupName, key.getKey()) + .eq(SequenceAlloc::getNamespaceId, key.getValue()) + ); buffer.setStep(sequenceAlloc.getStep()); buffer.setMinStep(sequenceAlloc.getStep());//leafAlloc中的step为DB中的step } else if (buffer.getUpdateTimestamp() == 0) { sequenceAllocMapper.update(wrapper); - sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); + sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper() + .eq(SequenceAlloc::getGroupName, key.getKey()) + .eq(SequenceAlloc::getNamespaceId, key.getValue()) + ); buffer.setUpdateTimestamp(System.currentTimeMillis()); buffer.setStep(sequenceAlloc.getStep()); buffer.setMinStep(sequenceAlloc.getStep());//leafAlloc中的step为DB中的step @@ -215,13 +222,15 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { } SnailJobLog.LOCAL.debug("leafKey[{}], step[{}], duration[{}mins], nextStep[{}]", key, buffer.getStep(), String.format("%.2f", ((double) duration / (1000 * 60))), nextStep); LambdaUpdateWrapper wrapper1 = new LambdaUpdateWrapper() - .set(SequenceAlloc::getMaxId, "max_id + " + nextStep) + .setSql("max_id = max_id + " + nextStep) .set(SequenceAlloc::getUpdateDt, new Date()) .eq(SequenceAlloc::getGroupName, key.getKey()) .eq(SequenceAlloc::getNamespaceId, key.getValue()); sequenceAllocMapper.update(wrapper1); - sequenceAlloc = sequenceAllocMapper - .selectOne(new LambdaQueryWrapper().eq(SequenceAlloc::getGroupName, key)); + sequenceAlloc = sequenceAllocMapper.selectOne(new LambdaQueryWrapper() + .eq(SequenceAlloc::getGroupName, key.getKey()) + .eq(SequenceAlloc::getNamespaceId, key.getValue()) + ); buffer.setUpdateTimestamp(System.currentTimeMillis()); buffer.setStep(nextStep); buffer.setMinStep(sequenceAlloc.getStep());//leafAlloc的step为DB中的step @@ -245,9 +254,9 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { try { updateSegmentFromDb(buffer.getKey(), next); updateOk = true; - SnailJobLog.LOCAL.debug("update segment {} from db {}", buffer.getKey(), next); + SnailJobLog.LOCAL.debug("update segment {} from db {}", buffer.getKey(), next); } catch (Exception e) { - SnailJobLog.LOCAL.warn(buffer.getKey() + " updateSegmentFromDb exception", e); + SnailJobLog.LOCAL.warn(buffer.getKey() + " updateSegmentFromDb exception", e); } finally { if (updateOk) { buffer.wLock().lock(); @@ -297,7 +306,7 @@ public class SegmentIdGenerator implements IdGenerator, Lifecycle { TimeUnit.MILLISECONDS.sleep(20); break; } catch (InterruptedException e) { - SnailJobLog.LOCAL.warn("Thread {} Interrupted", Thread.currentThread().getName()); + SnailJobLog.LOCAL.warn("Thread {} Interrupted", Thread.currentThread().getName()); break; } }