reghao 2 недель назад
Родитель
Сommit
19444cd272

+ 2 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/db/mapper/DataBlockMapper.java

@@ -13,6 +13,8 @@ import java.util.List;
  */
 @Mapper
 public interface DataBlockMapper extends BaseMapper<DataBlock> {
+    void deleteBySha256sum(String sha256sum);
+
     void updatePath(@Param("sha256sum") String sha256sum, @Param("path") String path);
     DataBlock findBySha256sum(String sha256sum);
     DataBlock findByObjectId(String objectId);

+ 3 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/db/mapper/FileMetaMapper.java

@@ -15,6 +15,8 @@ import java.util.List;
  */
 @Mapper
 public interface FileMetaMapper extends BaseMapper<FileMeta> {
+    void deleteByObjectId(String objectId);
+
     void updateSha256sum(@Param("objectId") String objectId, @Param("sha256sum") String sha256sum);
     void updateScopeByObjectName(@Param("scope") int scope, @Param("objectName") String objectName);
     void updateScopeByObjectId(@Param("objectId") String objectId, @Param("scope") int scope);
@@ -28,4 +30,5 @@ public interface FileMetaMapper extends BaseMapper<FileMeta> {
     ObjectMeta findObjectMetaById(@Param("objectId") String objectId, @Param("owner") long owner);
     ObjectInfo findObjectInfoById(@Param("objectId") String objectId);
     List<FileMeta> findBySha256List(List<String> list);
+    List<FileMeta> findAllByDeleted();
 }

+ 3 - 7
oss-mgr/src/main/java/cn/reghao/oss/mgr/db/repository/ObjectRepository.java

@@ -26,7 +26,7 @@ import java.util.List;
 public class ObjectRepository {
     private final FileMetaMapper fileMetaMapper;
     private final DataBlockMapper dataBlockMapper;
-    private UploadTaskMapper uploadTaskMapper;
+    private final UploadTaskMapper uploadTaskMapper;
 
     public ObjectRepository(FileMetaMapper fileMetaMapper, DataBlockMapper dataBlockMapper,
                             UploadTaskMapper uploadTaskMapper) {
@@ -49,8 +49,10 @@ public class ObjectRepository {
         if (uploadTask == null) {
             uploadTask = new UploadTask(uploadResult);
             uploadTaskMapper.save(uploadTask);
+            System.out.printf("uploadId %s save UploadTask %s:%s\n", uploadId, uploadTask.getHost(), uploadTask.getHttpPort());
         } else {
             uploadTaskMapper.updateTask(uploadId, status, host, port);
+            System.out.printf("uploadId %s update UploadTask %s:%s\n", uploadId, host, port);
         }
 
         fileMetaMapper.save(fileMeta);
@@ -76,12 +78,6 @@ public class ObjectRepository {
 
     public void deleteObject(String objectId) {
         fileMetaMapper.updateSetDeleteByObjectId(objectId);
-        /*FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
-        String sha256sum = fileMeta.getSha256sum();
-        List<FileMeta> fileMetaList = fileMetaMapper.findBySha256sum(sha256sum);
-        if (fileMetaList.size() > 1) {
-        } else {
-        }*/
     }
 
     public DataBlock getBySha256sum(String sha256sum) {

+ 2 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/model/po/UploadTask.java

@@ -78,5 +78,7 @@ public class UploadTask extends BaseObject<Integer> {
         this.expireTime = LocalDateTime.now().plusHours(24);
         this.channelCode = 0;
         this.uploadBy = uploadResult.getUploadBy();
+        this.host  = uploadResult.getHost();
+        this.httpPort = uploadResult.getPort();
     }
 }

+ 1 - 1
oss-mgr/src/main/java/cn/reghao/oss/mgr/service/OssClientService.java

@@ -280,7 +280,7 @@ public class OssClientService {
             }
 
             if (host == null) {
-                System.out.println();
+                System.out.printf("objectId -> %s\n", objectId);
             }
 
             if (!host.isEmpty() && httpPort != 0) {

+ 5 - 0
oss-mgr/src/main/resources/mapper/DataBlockMapper.xml

@@ -17,6 +17,11 @@
         </foreach>
     </insert>
 
+    <delete id="deleteBySha256sum">
+        delete from data_block
+        where sha256sum=#{sha256sum}
+    </delete>
+
     <update id="updatePath">
         update data_block
         set absolute_path=#{path}

+ 14 - 3
oss-mgr/src/main/resources/mapper/FileMetaMapper.xml

@@ -17,7 +17,7 @@
         </foreach>
     </insert>
 
-    <delete id="delete">
+    <delete id="deleteByObjectId">
         delete from file_meta
         where object_id=#{objectId}
     </delete>
@@ -42,18 +42,29 @@
         set update_time=now(),active=1
         where object_id=#{objectId}
     </update>
+    <update id="updateSetDeleteByObjectId">
+        update file_meta
+        set update_time=now(),deleted=1
+        where object_id=#{objectId}
+    </update>
 
     <select id="findAll" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
         select *
         from file_meta fm
         where fm.object_name like 'video/cam/%'
     </select>
+    <select id="findAllByDeleted" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
+        select *
+        from file_meta
+        where `deleted` is true
+        limit 1000
+    </select>
     <select id="findBySha256sum" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
         select *
         from file_meta
         where deleted is false and sha256sum=#{sha256sum}
         order by create_time asc
-        limit 1
+        limit 10
     </select>
     <select id="findByObjectId" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
         select *
@@ -64,7 +75,7 @@
     <select id="findByObjectName" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
         select *
         from file_meta
-        where deleted is false and object_name=#{objectName} and upload_by=#{owner}
+        where deleted is false and object_name=#{objectName}
     </select>
     <select id="findObjectMetaByName" resultType="cn.reghao.oss.api.dto.ObjectMeta">
         select file_meta.size,file_meta.content_type,file_meta.filename,file_meta.object_name,file_meta.object_id,file_meta.scope as scope,file_meta.upload_by,

+ 4 - 3
oss-store/src/main/java/cn/reghao/oss/store/disk/HddFlushService.java

@@ -88,6 +88,7 @@ public class HddFlushService {
 
                 UploadDoneResult uploadDoneResult = new UploadDoneResult(uploadId, sha256sum, absolutePath, size, hostPort);
                 consoleService.updateAfterMove(uploadDoneResult);
+                Files.deleteIfExists(Path.of(ssdPath));
             } catch (InsufficientSpaceException e) {
                 log.error("HDD 空间不足,取消搬运: {}", e.getMessage());
             } catch (Exception e) {
@@ -103,14 +104,14 @@ public class HddFlushService {
      * @return
      * @date 2026-04-28 11:48:43
      */
-    public void moveSsdToHdd(String uploadId, String sha256sum, long size, String tempPath) {
+    public void moveSsdToHdd(String uploadId, String sha256sum, long size, String ssdTempPath) {
         moveExecutor.submit(() -> {
             try {
                 String destPath = diskService.getHddDataPath(sha256sum);
                 Path targetPath = Path.of(destPath);
 
                 checkDiskSpace(size, destPath);
-                Path srcPath = Paths.get(tempPath);
+                Path srcPath = Paths.get(ssdTempPath);
                 // ssd 到 hdd 的跨磁盘拷贝, 此时 SSD 文件完好,getVideoInfo 随时可以并发读取它
                 Files.copy(srcPath, targetPath, StandardCopyOption.REPLACE_EXISTING);
                 UploadDoneResult uploadDoneResult = new UploadDoneResult(uploadId, sha256sum, destPath, size, hostPort);
@@ -120,7 +121,7 @@ public class HddFlushService {
                     // 最后,安全地删除 SSD 临时文件
                     Files.deleteIfExists(srcPath);
                 } catch (Exception e) {
-                    log.error("{}", e.getMessage());
+                    log.error("call updateAfterMove failed: {}", e.getMessage());
                     // 4. 通知失败,转入本地补偿
                     compensator.recordFailure(uploadDoneResult);
                 }