in ratis-server/src/main/java/org/apache/ratis/server/storage/RaftStorageDirectoryImpl.java [132:173]
StorageState analyzeStorage(boolean toLock) throws IOException {
Objects.requireNonNull(root, "root directory is null");
String rootPath = root.getCanonicalPath();
try { // check that storage exists
if (!root.exists()) {
LOG.info("The storage directory {} does not exist. Creating ...", rootPath);
FileUtils.createDirectories(root);
}
// or is inaccessible
if (!root.isDirectory()) {
LOG.warn("{} is not a directory", rootPath);
return StorageState.NON_EXISTENT;
}
if (!Files.isWritable(root.toPath())) {
LOG.warn("The storage directory {} is not writable.", rootPath);
return StorageState.NON_EXISTENT;
}
} catch(SecurityException ex) {
LOG.warn("Cannot access storage directory " + rootPath, ex);
return StorageState.NON_EXISTENT;
}
if (toLock) {
this.lock(); // lock storage if it exists
}
// check enough space
final long freeSpace = root.getFreeSpace();
if (freeSpace < freeSpaceMin.getSize()) {
LOG.warn("{} in directory {}: free space = {} < required = {}",
StorageState.NO_SPACE, rootPath, freeSpace, freeSpaceMin);
return StorageState.NO_SPACE;
}
// check whether current directory is valid
if (isHealthy()) {
return StorageState.NORMAL;
} else {
return StorageState.NOT_FORMATTED;
}
}