|
|
@@ -1,7 +1,13 @@
|
|
|
package cn.reghao.oss.mgr.service;
|
|
|
|
|
|
+import cn.reghao.oss.api.constant.UploadStatus;
|
|
|
+import cn.reghao.oss.api.iface.StoreService;
|
|
|
+import cn.reghao.oss.mgr.db.mapper.FileMetaMapper;
|
|
|
import cn.reghao.oss.mgr.db.mapper.UploadTaskMapper;
|
|
|
+import cn.reghao.oss.mgr.model.po.FileMeta;
|
|
|
+import cn.reghao.oss.mgr.model.po.StoreNode;
|
|
|
import cn.reghao.oss.mgr.model.po.UploadTask;
|
|
|
+import cn.reghao.oss.mgr.rpc.RpcService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
@@ -19,23 +25,55 @@ import java.util.List;
|
|
|
@Service
|
|
|
public class TaskService {
|
|
|
private final UploadTaskMapper uploadTaskMapper;
|
|
|
+ private final FileMetaMapper fileMetaMapper;
|
|
|
+ private final StoreNodeService storeNodeService;
|
|
|
+ private final RpcService rpcService;
|
|
|
|
|
|
- public TaskService(UploadTaskMapper uploadTaskMapper) {
|
|
|
+ public TaskService(UploadTaskMapper uploadTaskMapper, FileMetaMapper fileMetaMapper,
|
|
|
+ StoreNodeService storeNodeService, RpcService rpcService) {
|
|
|
this.uploadTaskMapper = uploadTaskMapper;
|
|
|
+ this.fileMetaMapper = fileMetaMapper;
|
|
|
+ this.storeNodeService = storeNodeService;
|
|
|
+ this.rpcService = rpcService;
|
|
|
}
|
|
|
|
|
|
- // 每天凌晨 4:00 执行清理任务
|
|
|
- @Scheduled(cron = "0 0 4 * * ?")
|
|
|
+ // 每天凌晨 2:00 执行清理任务
|
|
|
+ @Scheduled(cron = "0 0 2 * * ?")
|
|
|
@Transactional
|
|
|
public void cleanExpiredTasks() {
|
|
|
log.info("执行过期 UploadTask 清理任务...");
|
|
|
// 1. 找出过期的任务
|
|
|
List<UploadTask> expiredTasks = uploadTaskMapper.findByExpired();
|
|
|
for (UploadTask task : expiredTasks) {
|
|
|
+ int status = task.getStatus();
|
|
|
+ if (status == UploadStatus.UPLOADING.getCode()) {
|
|
|
+ String host = task.getHost();
|
|
|
+ int httpPort = task.getHttpPort();
|
|
|
+ if (host != null && httpPort != 0) {
|
|
|
+ StoreNode storeNode = storeNodeService.getStoreNode(host, httpPort);
|
|
|
+ StoreService storeService = rpcService.getStoreService(storeNode);
|
|
|
+ //storeService.deleteFile();
|
|
|
+ }
|
|
|
+ } else if (status == UploadStatus.FLUSHING.getCode()) {
|
|
|
+
|
|
|
+ } else if (status == UploadStatus.AVAILABLE.getCode()) {
|
|
|
+ uploadTaskMapper.deleteByUploadId(task.getUploadId());
|
|
|
+ }
|
|
|
+
|
|
|
// 2. 物理删除 SSD 上的残余文件块(重要!防止 SSD 满)
|
|
|
//FileUtil.deleteQuietly(task.getSsdPath());
|
|
|
// 3. 逻辑删除数据库记录
|
|
|
//jdbcTemplate.update("DELETE FROM upload_tasks WHERE upload_id = ?", task.getUploadId());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 每天凌晨 4:00 执行清理任务
|
|
|
+ @Scheduled(cron = "0 0 4 * * ?")
|
|
|
+ @Transactional
|
|
|
+ public void cleanInactiveObject() {
|
|
|
+ log.info("清理未激活的 object...");
|
|
|
+ List<FileMeta> list = fileMetaMapper.findAllByInactive();
|
|
|
+ for (FileMeta fileMeta : list) {
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|