From 76742c386998cacec5e1a2f4bcb9682e3f72ec72 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Wed, 16 Jun 2021 19:49:12 +0100 Subject: [PATCH] Removed .dat extension, and use an extra level in the directory structure (data/aB/cD/aBcDeF... etc) --- .../java/org/qortal/storage/DataFile.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/qortal/storage/DataFile.java b/src/main/java/org/qortal/storage/DataFile.java index b4afce7b..f3d09c50 100644 --- a/src/main/java/org/qortal/storage/DataFile.java +++ b/src/main/java/org/qortal/storage/DataFile.java @@ -98,8 +98,9 @@ public class DataFile { } protected String getOutputFilePath(String base58Digest) { - String base58Digest2Chars = base58Digest.substring(0, Math.min(base58Digest.length(), 2)); - String outputDirectory = String.format("%s/%s", Settings.getInstance().getDataPath(), base58Digest2Chars); + String base58DigestFirst2Chars = base58Digest.substring(0, Math.min(base58Digest.length(), 2)); + String base58DigestNext2Chars = base58Digest.substring(2, Math.min(base58Digest.length(), 4)); + String outputDirectory = String.format("%s/%s/%s", Settings.getInstance().getDataPath(), base58DigestFirst2Chars, base58DigestNext2Chars); Path outputDirectoryPath = Paths.get(outputDirectory); try { @@ -107,7 +108,7 @@ public class DataFile { } catch (IOException e) { throw new IllegalStateException("Unable to create data subdirectory"); } - return String.format("%s/%s.dat", outputDirectory, base58Digest); + return String.format("%s/%s", outputDirectory, base58Digest); } public ValidationResult isValid() { @@ -198,14 +199,20 @@ public class DataFile { } protected void cleanupFilesystem() { - Path directory = Paths.get(this.filePath).getParent().toAbsolutePath(); - try (Stream files = Files.list(directory)) { - final long count = files.count(); - if (count == 0) { - Files.delete(directory); + String path = this.filePath; + + // Iterate through two levels of parent directories, and delete if empty + for (int i=0; i<2; i++) { + Path directory = Paths.get(path).getParent().toAbsolutePath(); + try (Stream files = Files.list(directory)) { + final long count = files.count(); + if (count == 0) { + Files.delete(directory); + } + } catch (IOException e) { + LOGGER.warn("Unable to count files in directory", e); } - } catch (IOException e) { - LOGGER.warn("Unable to count files in directory", e); + path = directory.toString(); } }