From 0e77a23e76e0e30f6839cfe4d814350fefb13e57 Mon Sep 17 00:00:00 2001 From: ocean23 <43363687@qq.com> Date: Fri, 1 Jan 2021 14:17:54 +0800 Subject: [PATCH] =?UTF-8?q?fix=E5=B9=B6=E5=8F=91=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8Bserver=E7=AB=AF=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=97=B6=E6=95=B0=E6=8D=AE=E5=B7=B2=E7=BB=8F=E8=A2=AB=E5=85=B6?= =?UTF-8?q?=E4=BB=96server=E5=88=A0=E9=99=A4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/mongodb/GridFsManager.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/mongodb/GridFsManager.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/mongodb/GridFsManager.java index 71d7d8b8..da4f8449 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/mongodb/GridFsManager.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/persistence/mongodb/GridFsManager.java @@ -1,6 +1,7 @@ package com.github.kfcfans.powerjob.server.persistence.mongodb; import com.github.kfcfans.powerjob.server.common.PowerJobServerConfigKey; +import com.github.kfcfans.powerjob.server.service.lock.LockService; import com.google.common.base.Stopwatch; import com.google.common.collect.Maps; import com.mongodb.client.MongoDatabase; @@ -38,6 +39,8 @@ public class GridFsManager implements InitializingBean { @Resource private Environment environment; + @Resource + private LockService lockService; private MongoDatabase db; private boolean available; @@ -107,9 +110,22 @@ public class GridFsManager implements InitializingBean { * @param day 日期偏移量,单位 天 */ public void deleteBefore(String bucketName, int day) { + String deleteFsLock = "deleteFsLock"; + // 只要第一个server抢到锁其他server就会返回,所以锁10分钟应该足够了 + boolean lock = lockService.lock(deleteFsLock, 10 * 60 * 1000); + if (!lock) { + log.info("[GridFsManager] deleted task is running, it's ok to return."); + return; + } + try{ + deleteHistoryFile(bucketName, day); + }finally { + lockService.unlock(deleteFsLock); + } + } + private void deleteHistoryFile(String bucketName, int day) { Stopwatch sw = Stopwatch.createStarted(); - Date date = DateUtils.addDays(new Date(), -day); GridFSBucket bucket = getBucket(bucketName); Bson filter = Filters.lt("uploadDate", date);