Selaa lähdekoodia

优化代码依赖

reghao 1 vuosi sitten
vanhempi
commit
668f27c140

+ 1 - 0
oss-store/src/main/java/cn/reghao/oss/store/config/BeansConfig.java

@@ -1,6 +1,7 @@
 package cn.reghao.oss.store.config;
 
 import cn.reghao.oss.sdk.OssConsoleClient;
+import cn.reghao.oss.store.config.props.OssProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 

+ 23 - 50
oss-store/src/main/java/cn/reghao/oss/store/config/spring/AppLifecycle.java → oss-store/src/main/java/cn/reghao/oss/store/config/SpringLifecycle.java

@@ -1,15 +1,13 @@
-package cn.reghao.oss.store.config.spring;
+package cn.reghao.oss.store.config;
 
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
-import cn.reghao.jutil.jdk.store.LocalStores;
-import cn.reghao.jutil.jdk.store.SubDirCount;
 import cn.reghao.oss.sdk.OssConsoleClient;
 import cn.reghao.oss.store.api.dto.ObjectChannel;
 import cn.reghao.oss.store.api.dto.StoreDiskDto;
 import cn.reghao.oss.store.api.dto.StoreNodeDto;
 import cn.reghao.oss.store.api.dto.StoreProperties;
-import cn.reghao.oss.store.config.SpringProperties;
-import cn.reghao.oss.store.db.mapper.DataBlockMapper;
+import cn.reghao.oss.store.config.props.SpringProperties;
+import cn.reghao.oss.store.service.FileStoreService;
 import cn.reghao.oss.store.service.StoreChannelService;
 import cn.reghao.oss.store.service.StoreLocalCache;
 import cn.reghao.oss.store.task.FileTask;
@@ -19,11 +17,8 @@ import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -31,75 +26,53 @@ import java.util.Map;
  */
 @Slf4j
 @Component
-public class AppLifecycle implements ApplicationRunner, DisposableBean {
-    private final DataBlockMapper dataBlockMapper;
+public class SpringLifecycle implements ApplicationRunner, DisposableBean {
     private final FileTask fileTask;
     private final SpringProperties springProperties;
+    private final FileStoreService fileStoreService;
     private final OssConsoleClient ossConsoleClient;
-    private final StoreLocalCache storeLocalCache;
     private final StoreChannelService storeChannelService;
+    private final StoreLocalCache storeLocalCache;
 
-    public AppLifecycle(DataBlockMapper dataBlockMapper, FileTask fileTask, SpringProperties springProperties,
-                        OssConsoleClient ossConsoleClient, StoreLocalCache storeLocalCache,
-                        StoreChannelService storeChannelService) {
-        this.dataBlockMapper = dataBlockMapper;
+    public SpringLifecycle(FileTask fileTask, SpringProperties springProperties, FileStoreService fileStoreService,
+                           OssConsoleClient ossConsoleClient, StoreChannelService storeChannelService,
+                           StoreLocalCache storeLocalCache) {
         this.fileTask = fileTask;
         this.springProperties = springProperties;
+        this.fileStoreService = fileStoreService;
         this.ossConsoleClient = ossConsoleClient;
-        this.storeLocalCache = storeLocalCache;
         this.storeChannelService = storeChannelService;
+        this.storeLocalCache = storeLocalCache;
     }
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
-        initLocalStore();
         initStoreNode();
         log.info("执行文件任务...");
         fileTask.exec();
         log.info("文件任务执行完成...");
     }
 
-    private void initLocalStore() throws IOException {
-        log.info("初始化本地磁盘...");
-        List<String> diskDirs = springProperties.getDiskDirs();
-        for (String diskDir : diskDirs) {
-            File dir = new File(diskDir);
-            if (!dir.exists()) {
-                dir.mkdirs();
-            }
-        }
-        LocalStores.init(diskDirs);
-
-        for (String diskDir : diskDirs) {
-            Map<String, Integer> map = new HashMap<>();
-            /*List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
-            list.forEach(subDirCount -> {
-                String relativeDir = subDirCount.getRelativeDir();
-                String storeDir = diskDir + relativeDir;
-                File file = new File(storeDir);
-
-                int total = subDirCount.getTotal();
-                map.put(file.getAbsolutePath(), total);
-            });*/
-
-            LocalStores.initStoreDirs(diskDir, map);
-        }
-        log.info("本地磁盘数据初始化完成...");
-    }
-
     private void initStoreNode() throws Exception {
         log.info("初始化 StoreNode...");
-        List<StoreDiskDto> list = storeLocalCache.getStoreDisks();
-        String nodeAddr = springProperties.getHost();
+
+        // 注册 oss-store 到 oss-console
+        String nodeAddr = springProperties.getNodeAddress();
         int httpPort = springProperties.getHttpPort();
         int rpcPort = springProperties.getRpcPort();
+        List<StoreDiskDto> list = fileStoreService.getStoreDisks().stream()
+                .map(StoreDiskDto::new)
+                .collect(Collectors.toList());
         StoreNodeDto storeNodeDto = new StoreNodeDto(nodeAddr, httpPort, rpcPort, list);
         String jsonPayload = JsonConverter.objectToJson(storeNodeDto);
-        ossConsoleClient.registerNode(jsonPayload);
+        //ossConsoleClient.registerNode(jsonPayload);
 
+        // 获取 oss-store 配置
         StoreProperties storeProperties = ossConsoleClient.getStoreProperties(nodeAddr);
-        List<ObjectChannel> objectChannels = ossConsoleClient.getObjectChannels(nodeAddr);
         storeLocalCache.initOssStore(storeProperties);
+
+        // 获取 oss-store channel
+        List<ObjectChannel> objectChannels = ossConsoleClient.getObjectChannels(nodeAddr);
         storeChannelService.initChannels(objectChannels);
         log.info("StoreNode 初始化完成...");
     }

+ 1 - 1
oss-store/src/main/java/cn/reghao/oss/store/config/DubboProperties.java → oss-store/src/main/java/cn/reghao/oss/store/config/props/DubboProperties.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.store.config;
+package cn.reghao.oss.store.config.props;
 
 import lombok.Getter;
 import lombok.Setter;

+ 1 - 1
oss-store/src/main/java/cn/reghao/oss/store/config/OssProperties.java → oss-store/src/main/java/cn/reghao/oss/store/config/props/OssProperties.java

@@ -1,4 +1,4 @@
-package cn.reghao.oss.store.config;
+package cn.reghao.oss.store.config.props;
 
 import lombok.Getter;
 import lombok.Setter;

+ 2 - 8
oss-store/src/main/java/cn/reghao/oss/store/config/SpringProperties.java → oss-store/src/main/java/cn/reghao/oss/store/config/props/SpringProperties.java

@@ -1,10 +1,8 @@
-package cn.reghao.oss.store.config;
+package cn.reghao.oss.store.config.props;
 
 import org.springframework.boot.autoconfigure.web.ServerProperties;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
-
 /**
  * @author reghao
  * @date 2024-02-23 12:58:00
@@ -22,7 +20,7 @@ public class SpringProperties {
         this.ossProperties = ossProperties;
     }
 
-    public String getHost() {
+    public String getNodeAddress() {
         return ossProperties.getHost();
     }
 
@@ -33,8 +31,4 @@ public class SpringProperties {
     public int getRpcPort() {
         return dubboProperties.getProtocol().getPort();
     }
-
-    public List<String> getDiskDirs() {
-        return ossProperties.getDiskDirs();
-    }
 }

+ 2 - 13
oss-store/src/main/java/cn/reghao/oss/store/controller/ObjectGetController.java

@@ -25,16 +25,13 @@ import java.io.IOException;
 @RestController
 public class ObjectGetController {
     private final GetObjectService getObjectService;
-    private final Cache<String, Object> cache;
     private final StoreLocalCache storeLocalCache;
     private final ObjectRepository objectRepository;
-    private StoreChannelService storeChannelService;
+    private final StoreChannelService storeChannelService;
 
     public ObjectGetController(GetObjectService getObjectService, StoreLocalCache storeLocalCache,
-                               Cache<String, Object> cache, ObjectRepository objectRepository,
-                               StoreChannelService storeChannelService) {
+                               ObjectRepository objectRepository, StoreChannelService storeChannelService) {
         this.getObjectService = getObjectService;
-        this.cache = cache;
         this.storeLocalCache = storeLocalCache;
         this.objectRepository = objectRepository;
         this.storeChannelService = storeChannelService;
@@ -86,14 +83,6 @@ public class ObjectGetController {
             return;
         }
 
-        /*String value = cache.getIfPresent(nonce);
-        if (value == null) {
-            cache.put(nonce, nonce);
-        } else {
-            getObjectService.writeResponse(HttpServletResponse.SC_FORBIDDEN);
-            return;
-        }*/
-
         OssPayload ossPayload = JwtUtil.getOssPayload(token, storeLocalCache.getSecretKey());
         int loginUser = ossPayload.getUserId();
         int channelId = ossPayload.getChannelId();

+ 15 - 12
oss-store/src/main/java/cn/reghao/oss/store/rpc/StoreServiceImpl.java

@@ -2,17 +2,18 @@ package cn.reghao.oss.store.rpc;
 
 import cn.reghao.oss.store.api.constant.ObjectScope;
 import cn.reghao.oss.store.api.dto.*;
+import cn.reghao.oss.store.service.FileStoreService;
 import cn.reghao.oss.store.service.ObjectNameService;
 import cn.reghao.oss.store.service.StoreChannelService;
 import cn.reghao.oss.store.service.StoreLocalCache;
 import cn.reghao.oss.store.util.JwtUtil;
 import cn.reghao.oss.store.api.constant.ChannelAction;
 import cn.reghao.oss.store.api.iface.StoreService;
-import cn.reghao.oss.store.util.UserContext;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -22,14 +23,21 @@ import java.util.List;
 @Service
 public class StoreServiceImpl implements StoreService {
     private final StoreLocalCache storeLocalCache;
-    private StoreChannelService storeChannelService;
+    private final StoreChannelService storeChannelService;
     private final ObjectNameService objectNameService;
+    private final FileStoreService fileStoreService;
 
     public StoreServiceImpl(StoreLocalCache storeLocalCache, StoreChannelService storeChannelService,
-                            ObjectNameService objectNameService) {
+                            ObjectNameService objectNameService, FileStoreService fileStoreService) {
         this.storeLocalCache = storeLocalCache;
         this.storeChannelService = storeChannelService;
         this.objectNameService = objectNameService;
+        this.fileStoreService = fileStoreService;
+    }
+
+    @Override
+    public void updateStoreProperties(StoreProperties storeProperties) {
+        storeLocalCache.updateStoreProperties(storeProperties);
     }
 
     @Override
@@ -43,22 +51,17 @@ public class StoreServiceImpl implements StoreService {
 
     @Override
     public void createChannel(int userId, ObjectChannel channel) {
-        UserContext userContext = new UserContext(userId);
         String objectName = channel.getPrefix();
         objectNameService.createParentDirs(objectName, ObjectScope.PUBLIC.getCode());
         storeChannelService.addObjectChannel(channel);
     }
 
-    @Override
-    public void updateStoreProperties(StoreProperties storeProperties) {
-        storeLocalCache.updateStoreProperties(storeProperties);
-    }
-
     @Override
     public StoreInfo getStoreInfo() {
-        StoreProperties storeProperties = storeLocalCache.getStoreProperties();
         List<ObjectChannel> objectChannels = storeChannelService.getObjectChannels();
-        List<StoreDiskDto> list = storeLocalCache.getStoreDisks();
-        return new StoreInfo(storeProperties, objectChannels, list);
+        List<StoreDiskDto> list = fileStoreService.getStoreDisks().stream()
+                .map(StoreDiskDto::new)
+                .collect(Collectors.toList());
+        return new StoreInfo(storeLocalCache.getStoreProperties(), objectChannels, list);
     }
 }

+ 43 - 2
oss-store/src/main/java/cn/reghao/oss/store/service/FileStoreService.java

@@ -1,16 +1,21 @@
 package cn.reghao.oss.store.service;
 
 import cn.reghao.jutil.jdk.store.LoadBalancer;
+import cn.reghao.jutil.jdk.store.LocalStore;
+import cn.reghao.jutil.jdk.store.LocalStores;
 import cn.reghao.jutil.jdk.store.StoreDir;
+import cn.reghao.oss.store.config.props.OssProperties;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FileUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
-import java.util.EnumSet;
+import java.util.*;
 
 import static java.nio.file.StandardOpenOption.*;
 
@@ -18,12 +23,48 @@ import static java.nio.file.StandardOpenOption.*;
  * @author reghao
  * @date 2022-04-26 15:09:06
  */
+@Slf4j
 @Service
 public class FileStoreService {
     private final LoadBalancer loadBalancer;
+    private final OssProperties ossProperties;
 
-    public FileStoreService() {
+    public FileStoreService(OssProperties ossProperties) {
         this.loadBalancer = new LoadBalancer();
+        this.ossProperties = ossProperties;
+    }
+
+    @PostConstruct
+    public void initLocalStore() throws IOException {
+        log.info("初始化本地磁盘...");
+        List<String> diskDirs = ossProperties.getDiskDirs();
+        for (String diskDir : diskDirs) {
+            File dir = new File(diskDir);
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+        }
+        LocalStores.init(diskDirs);
+
+        for (String diskDir : diskDirs) {
+            Map<String, Integer> map = new HashMap<>();
+            /*List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
+            list.forEach(subDirCount -> {
+                String relativeDir = subDirCount.getRelativeDir();
+                String storeDir = diskDir + relativeDir;
+                File file = new File(storeDir);
+
+                int total = subDirCount.getTotal();
+                map.put(file.getAbsolutePath(), total);
+            });*/
+
+            LocalStores.initStoreDirs(diskDir, map);
+        }
+        log.info("本地磁盘数据初始化完成...");
+    }
+
+    public List<LocalStore> getStoreDisks() {
+        return LocalStores.getLocalStores();
     }
 
     public String genFilePath(String contentId, long size, String suffix) {

+ 5 - 5
oss-store/src/main/java/cn/reghao/oss/store/service/PutObjectService.java

@@ -1,6 +1,7 @@
 package cn.reghao.oss.store.service;
 
 import cn.reghao.jutil.jdk.security.DigestUtil;
+import cn.reghao.oss.store.config.props.OssProperties;
 import cn.reghao.oss.store.db.repository.ObjectRepository;
 import cn.reghao.oss.store.model.po.DataBlock;
 import cn.reghao.oss.store.model.po.FileMeta;
@@ -26,13 +27,13 @@ import java.util.UUID;
 public class PutObjectService {
     private final ObjectRepository objectRepository;
     private final ObjectNameService objectNameService;
-    private final StoreLocalCache storeLocalCache;
+    private final String nodeAddress;
 
     public PutObjectService(ObjectRepository objectRepository, ObjectNameService objectNameService,
-                            StoreLocalCache storeLocalCache) {
+                            OssProperties ossProperties) {
         this.objectRepository = objectRepository;
         this.objectNameService = objectNameService;
-        this.storeLocalCache = storeLocalCache;
+        this.nodeAddress = ossProperties.getHost();
     }
 
     public ObjectResult putObject(ObjectProp objectProp, String contentId, File savedFile, String originalFilename, String sha256sum) {
@@ -52,8 +53,7 @@ public class PutObjectService {
             fileMeta = new FileMeta(objectName, objectId, contentId, originalFilename, size,
                     fileType, contentType, sha256sum, pid, scope);
             String blockId = UUID.randomUUID().toString();
-            String host = storeLocalCache.getHost();
-            List<DataBlock> list = List.of(new DataBlock(contentId, blockId, host, savedPath, size));
+            List<DataBlock> list = List.of(new DataBlock(contentId, blockId, nodeAddress, savedPath, size));
             objectRepository.saveObject(fileMeta, list);
             return new ObjectResult(objectName, objectId, fileType, savedPath);
         }

+ 2 - 33
oss-store/src/main/java/cn/reghao/oss/store/service/StoreLocalCache.java

@@ -1,18 +1,8 @@
 package cn.reghao.oss.store.service;
 
-import cn.reghao.jutil.jdk.store.LocalStore;
-import cn.reghao.jutil.jdk.store.LocalStores;
-import cn.reghao.oss.store.api.dto.ObjectChannel;
-import cn.reghao.oss.store.api.dto.StoreDiskDto;
 import cn.reghao.oss.store.api.dto.StoreProperties;
-import cn.reghao.oss.store.config.SpringProperties;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 /**
  * @author reghao
  * @date 2024-03-01 08:53:28
@@ -20,11 +10,6 @@ import java.util.Map;
 @Service
 public class StoreLocalCache {
     private StoreProperties storeProperties;
-    private final SpringProperties springProperties;
-
-    public StoreLocalCache(SpringProperties springProperties) {
-        this.springProperties = springProperties;
-    }
 
     public void initOssStore(StoreProperties storeProperties) {
         this.storeProperties = storeProperties;
@@ -34,8 +19,8 @@ public class StoreLocalCache {
         this.storeProperties = storeProperties;
     }
 
-    public String getHost() {
-        return springProperties.getHost();
+    public StoreProperties getStoreProperties() {
+        return storeProperties;
     }
 
     public String getDomain() {
@@ -49,20 +34,4 @@ public class StoreLocalCache {
     public String getSecretKey() {
         return storeProperties != null ? storeProperties.getSecretKey() : null;
     }
-
-    public StoreProperties getStoreProperties() {
-        return storeProperties;
-    }
-
-    public List<StoreDiskDto> getStoreDisks() {
-        List<StoreDiskDto> list = new ArrayList<>();
-        for (LocalStore localStore : LocalStores.getLocalStores()) {
-            String diskDir = localStore.getDiskDir();
-            long total = localStore.getTotal();
-            long avail = localStore.getAvailable();
-            list.add(new StoreDiskDto(diskDir, total, avail));
-        }
-
-        return list;
-    }
 }

+ 7 - 4
store-api/src/main/java/cn/reghao/oss/store/api/dto/StoreDiskDto.java

@@ -1,9 +1,8 @@
 package cn.reghao.oss.store.api.dto;
 
-import lombok.AllArgsConstructor;
+import cn.reghao.jutil.jdk.store.LocalStore;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
-import lombok.Setter;
 
 import java.io.Serializable;
 
@@ -11,9 +10,7 @@ import java.io.Serializable;
  * @author reghao
  * @date 2024-03-04 17:12:21
  */
-@AllArgsConstructor
 @NoArgsConstructor
-@Setter
 @Getter
 public class StoreDiskDto implements Serializable {
     private static final long serialVersionUID = 1L;
@@ -21,4 +18,10 @@ public class StoreDiskDto implements Serializable {
     private String diskDir;
     private Long total;
     private Long avail;
+
+    public StoreDiskDto(LocalStore localStore) {
+        this.diskDir = localStore.getDiskDir();
+        this.total = localStore.getTotal();
+        this.avail = localStore.getAvailable();
+    }
 }