FileMetaTest.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import cn.reghao.oss.store.OssStoreApplication;
  2. import cn.reghao.oss.store.db.mapper.DataBlockMapper;
  3. import cn.reghao.oss.store.db.mapper.FileMetaMapper;
  4. import cn.reghao.oss.store.model.po.DataBlock;
  5. import cn.reghao.oss.store.model.po.FileMeta;
  6. import cn.reghao.oss.store.model.vo.SubDirCount;
  7. import cn.reghao.oss.store.service.ObjectNameService;
  8. import cn.reghao.oss.store.util.UserContext;
  9. import cn.reghao.jutil.jdk.db.Page;
  10. import cn.reghao.jutil.jdk.security.DigestUtil;
  11. import cn.reghao.jutil.jdk.thread.ThreadPoolWrapper;
  12. import cn.reghao.oss.api.constant.ObjectScope;
  13. import cn.reghao.oss.api.constant.UploadChannel;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.io.FileUtils;
  16. import org.junit.Test;
  17. import org.junit.runner.RunWith;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.boot.test.context.SpringBootTest;
  20. import org.springframework.test.context.ActiveProfiles;
  21. import org.springframework.test.context.junit4.SpringRunner;
  22. import java.io.File;
  23. import java.io.IOException;
  24. import java.nio.file.FileVisitResult;
  25. import java.nio.file.FileVisitor;
  26. import java.nio.file.Files;
  27. import java.nio.file.Path;
  28. import java.nio.file.attribute.BasicFileAttributes;
  29. import java.security.NoSuchAlgorithmException;
  30. import java.util.List;
  31. import java.util.concurrent.ExecutorService;
  32. /**
  33. * @author reghao
  34. * @date 2023-07-16 19:19:12
  35. */
  36. @Slf4j
  37. @ActiveProfiles("dev")
  38. @SpringBootTest(classes = OssStoreApplication.class)
  39. @RunWith(SpringRunner.class)
  40. public class FileMetaTest {
  41. @Autowired
  42. FileMetaMapper fileMetaMapper;
  43. // 正则表达式查询测试
  44. public void regexpTest() {
  45. String bucket = "";
  46. String prefix = "abc/d/";
  47. String startAfter = "abc/d/e";
  48. Integer maxKeys = 10;
  49. StringBuilder regex = new StringBuilder();
  50. regex.append("^").append(prefix).append("([^/])+/?$");
  51. if (startAfter.isBlank()) {
  52. fileMetaMapper.findAll0(bucket, maxKeys, regex.toString());
  53. } else {
  54. fileMetaMapper.findAll2(bucket, prefix, startAfter, maxKeys);
  55. }
  56. }
  57. /**
  58. * 分页处理
  59. *
  60. * @param
  61. * @return
  62. * @date 2023-05-30 00:26:07
  63. */
  64. @Test
  65. public void processByPage() {
  66. int pageSize = 10_000;
  67. int pageNumber = 1;
  68. Page page = new Page(pageNumber, pageSize);
  69. List<FileMeta> list = fileMetaMapper.findFileMetaByPage(page);
  70. while (!list.isEmpty()) {
  71. list.forEach(fileMeta -> {
  72. });
  73. pageNumber++;
  74. page = new Page(pageNumber, pageSize);
  75. list = fileMetaMapper.findFileMetaByPage(page);
  76. log.info("page -> {}", pageNumber);
  77. }
  78. }
  79. public void walkDir(Path path) throws IOException {
  80. Files.walkFileTree(path, new FileVisitor<>() {
  81. @Override
  82. public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
  83. return FileVisitResult.CONTINUE;
  84. }
  85. @Override
  86. public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
  87. String absolutePath = file.toString();
  88. process(absolutePath);
  89. return FileVisitResult.CONTINUE;
  90. }
  91. @Override
  92. public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
  93. return FileVisitResult.CONTINUE;
  94. }
  95. @Override
  96. public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
  97. return FileVisitResult.CONTINUE;
  98. }
  99. });
  100. }
  101. private void process(String absolutePath) {
  102. try {
  103. String sha256sum = DigestUtil.sha256sum(absolutePath);
  104. FileMeta fileMeta = fileMetaMapper.findBySha256sum(sha256sum);
  105. if (fileMeta != null) {
  106. FileUtils.deleteQuietly(new File(absolutePath));
  107. log.info("{} 删除 {} -> {}", Thread.currentThread().getName(), total++, absolutePath);
  108. } else {
  109. //log.info("{} 在 db 中不存在", absolutePath);
  110. }
  111. } catch (IOException | NoSuchAlgorithmException e) {
  112. e.printStackTrace();
  113. }
  114. }
  115. ExecutorService threadPool = ThreadPoolWrapper.threadPool("delete-pool", 10);
  116. int total = 1;
  117. @Test
  118. public void deleteFile() throws IOException, InterruptedException {
  119. String baseDir = "/home/reghao/mnt1/spider/bili/img/vidcover";
  120. //baseDir = "/run/media/reghao/7c43343d-c1e2-4e68-bc18-89bd3f61b0c8/cover";
  121. //baseDir = "/home/reghao/mnt1/spider/bili/img/avatar";
  122. Path path = Path.of(baseDir);
  123. //walkDir(path);
  124. threadPool.submit(new Task("/home/reghao/mnt1/spider/bili/img/avatar"));
  125. threadPool.submit(new Task("/run/media/reghao/7c43343d-c1e2-4e68-bc18-89bd3f61b0c8/cover"));
  126. threadPool.submit(new Task("/run/media/reghao/7c43343d-c1e2-4e68-bc18-89bd3f61b0c8/avatar"));
  127. Thread.sleep(3600_000*24*7);
  128. }
  129. class Task implements Runnable {
  130. private final String baseDir;
  131. public Task(String baseDir) {
  132. this.baseDir = baseDir;
  133. }
  134. @Override
  135. public void run() {
  136. Path path = Path.of(baseDir);
  137. try {
  138. walkDir(path);
  139. } catch (IOException e) {
  140. e.printStackTrace();
  141. }
  142. }
  143. }
  144. @Autowired
  145. ObjectNameService objectNameService;
  146. @Test
  147. public void initUploadChannel() {
  148. UserContext userContext = new UserContext(10001L);
  149. for (UploadChannel channel : UploadChannel.values()) {
  150. String objectName = channel.getPrefix();
  151. objectNameService.createParentDirs(objectName, ObjectScope.PUBLIC.getCode());
  152. }
  153. }
  154. @Autowired
  155. DataBlockMapper dataBlockMapper;
  156. @Test
  157. public void dataBlockTest() {
  158. int pageSize = 10000;
  159. int nextId = 0;
  160. List<DataBlock> list = dataBlockMapper.findDataBlocks(pageSize, nextId);
  161. while (!list.isEmpty()) {
  162. process1(list);
  163. dataBlockMapper.updateBatch(list);
  164. nextId = list.get(list.size()-1).getId();
  165. list = dataBlockMapper.findDataBlocks(pageSize, nextId);
  166. log.info("nextId -> {}", nextId);
  167. }
  168. }
  169. private void process(List<DataBlock> list) {
  170. for (DataBlock dataBlock : list) {
  171. String contentId = dataBlock.getContentId();
  172. List<FileMeta> list1 = fileMetaMapper.findByContentId(contentId);
  173. if (list1.isEmpty()) {
  174. log.info("{} not exist in file_meta", contentId);
  175. }
  176. }
  177. }
  178. private void process1(List<DataBlock> list) {
  179. for (DataBlock dataBlock : list) {
  180. int id = dataBlock.getId();
  181. String absolutePath = dataBlock.getAbsolutePath();
  182. int idx = absolutePath.lastIndexOf("/");
  183. String parent = absolutePath.substring(0, idx);
  184. String relativeDir = parent.replace("/opt/oss/disk/13f654c8-af87-4710-aac9-7aa086c99aec", "");
  185. dataBlock.setRelativeDir(relativeDir);
  186. /*String contentId = dataBlock.getContentId();
  187. List<FileMeta> list1 = fileMetaMapper.findByContentId(contentId);
  188. if (list1.isEmpty()) {
  189. log.info("{} not exist in file_meta", contentId);
  190. }*/
  191. }
  192. }
  193. @Test
  194. public void test123() {
  195. String baseDir = "";
  196. List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
  197. System.out.println();
  198. }
  199. }