FileMetaTest.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import cn.reghao.dfs.store.DfsStoreApplication;
  2. import cn.reghao.dfs.store.db.mapper.DataBlockMapper;
  3. import cn.reghao.dfs.store.db.mapper.FileMetaMapper;
  4. import cn.reghao.dfs.store.model.po.DataBlock;
  5. import cn.reghao.dfs.store.model.po.FileMeta;
  6. import cn.reghao.dfs.store.model.vo.ObjectMeta;
  7. import cn.reghao.jutil.jdk.db.Page;
  8. import cn.reghao.jutil.jdk.security.DigestUtil;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.junit.Test;
  11. import org.junit.runner.RunWith;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.boot.test.context.SpringBootTest;
  14. import org.springframework.test.context.ActiveProfiles;
  15. import org.springframework.test.context.junit4.SpringRunner;
  16. import java.io.FileInputStream;
  17. import java.io.IOException;
  18. import java.nio.file.FileVisitResult;
  19. import java.nio.file.FileVisitor;
  20. import java.nio.file.Files;
  21. import java.nio.file.Path;
  22. import java.nio.file.attribute.BasicFileAttributes;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. import java.util.UUID;
  26. /**
  27. * @author reghao
  28. * @date 2023-03-22 16:19:12
  29. */
  30. @Slf4j
  31. @ActiveProfiles("dev")
  32. @SpringBootTest(classes = DfsStoreApplication.class)
  33. @RunWith(SpringRunner.class)
  34. public class FileMetaTest {
  35. @Autowired
  36. FileMetaMapper fileMetaMapper;
  37. @Autowired
  38. DataBlockMapper dataBlockMapper;
  39. /**
  40. * 正则表达式查询测试
  41. *
  42. * @param
  43. * @return
  44. * @date 2023-05-23 11:06:07
  45. */
  46. public void regexpTest() {
  47. String bucket = "";
  48. String prefix = "abc/d/";
  49. String startAfter = "abc/d/e";
  50. Integer maxKeys = 10;
  51. StringBuilder regex = new StringBuilder();
  52. regex.append("^").append(prefix).append("([^/])+/?$");
  53. if (startAfter.isBlank()) {
  54. fileMetaMapper.findAll0(bucket, maxKeys, regex.toString());
  55. } else {
  56. fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
  57. }
  58. }
  59. @Test
  60. public void test2() {
  61. int pageSize = 1000;
  62. int pageNumber = 1;
  63. Page page = new Page(pageNumber, pageSize);
  64. List<DataBlock> dataBlocks = dataBlockMapper.findDataBlockByPage(page);
  65. List<FileMeta> fileMetas = new ArrayList<>();
  66. while (!dataBlocks.isEmpty()) {
  67. dataBlocks.forEach(dataBlock -> {
  68. String objectId = dataBlock.getObjectId();
  69. String contentId = UUID.randomUUID().toString().replace("-", "");
  70. FileMeta fileMeta = fileMetaMapper.findByObjectId(objectId);
  71. if (fileMeta == null) {
  72. log.error("{} 不存在", objectId);
  73. return;
  74. }
  75. fileMeta.setContentId(contentId);
  76. fileMetas.add(fileMeta);
  77. dataBlock.setContentId(contentId);
  78. });
  79. long start = System.currentTimeMillis();
  80. if (!fileMetas.isEmpty()) {
  81. fileMetaMapper.updateBatch(fileMetas);
  82. fileMetas.clear();
  83. log.info("batch update FileMeta cost {}", System.currentTimeMillis()-start);
  84. }
  85. if (!dataBlocks.isEmpty()) {
  86. dataBlockMapper.updateBatch(dataBlocks);
  87. log.info("batch update DataBlock cost {}", System.currentTimeMillis()-start);
  88. }
  89. pageNumber++;
  90. page = new Page(pageNumber, pageSize);
  91. dataBlocks = dataBlockMapper.findDataBlockByPage(page);
  92. log.info("page -> {}", pageNumber);
  93. }
  94. }
  95. public void walkDir(Path path) throws IOException {
  96. Files.walkFileTree(path, new FileVisitor<>() {
  97. @Override
  98. public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
  99. return FileVisitResult.CONTINUE;
  100. }
  101. @Override
  102. public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
  103. String absolutePath = file.toString();
  104. try {
  105. FileInputStream fis = new FileInputStream(absolutePath);
  106. String sha256sum = DigestUtil.sha256sum(fis);
  107. FileMeta fileMeta = fileMetaMapper.findBySha256sum(sha256sum);
  108. if (fileMeta == null) {
  109. log.error("{} 不存在", absolutePath);
  110. }
  111. } catch (Exception ignore) {
  112. }
  113. return FileVisitResult.CONTINUE;
  114. }
  115. @Override
  116. public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
  117. return FileVisitResult.CONTINUE;
  118. }
  119. @Override
  120. public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
  121. return FileVisitResult.CONTINUE;
  122. }
  123. });
  124. }
  125. @Test
  126. public void test22() throws IOException {
  127. String baseDir = "/home/reghao/mnt/zdata/porn/0.已完成/";
  128. Path path = Path.of(baseDir);
  129. walkDir(path);
  130. }
  131. @Test
  132. public void test11() {
  133. int pageSize = 10_000;
  134. int pageNumber = 1;
  135. Page page = new Page(pageNumber, pageSize);
  136. List<FileMeta> list = fileMetaMapper.findFileMetaByPage(page);
  137. while (!list.isEmpty()) {
  138. list.forEach(fileMeta -> {
  139. String objectName = fileMeta.getObjectName();
  140. ObjectMeta objectMeta = fileMetaMapper.findObjectMeta(objectName);
  141. if (objectMeta == null) {
  142. log.error("{} 对应的文件不存在", objectName);
  143. }
  144. });
  145. pageNumber++;
  146. page = new Page(pageNumber, pageSize);
  147. list = fileMetaMapper.findFileMetaByPage(page);
  148. log.info("page -> {}", pageNumber);
  149. }
  150. }
  151. }