MarginaliaSearch/code/common/config/java/nu/marginalia/IndexLocations.java

68 lines
2.4 KiB
Java
Raw Normal View History

package nu.marginalia;
import nu.marginalia.storage.FileStorageService;
import nu.marginalia.storage.model.FileStorageBaseType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.SQLException;
/** The IndexLocations class is responsible for knowledge about the locations
* of various important system paths. The methods take a FileStorageService,
* as these paths are node-dependent.
*/
public class IndexLocations {
private static final Logger logger = LoggerFactory.getLogger(IndexLocations.class);
/** Return the path to the current link database */
public static Path getLinkdbLivePath(FileStorageService fileStorage) {
return getStorage(fileStorage, FileStorageBaseType.CURRENT, "ldbr");
}
/** Return the path to the next link database */
public static Path getLinkdbWritePath(FileStorageService fileStorage) {
return getStorage(fileStorage, FileStorageBaseType.CURRENT, "ldbw");
}
/** Return the path to the current live index */
public static Path getCurrentIndex(FileStorageService fileStorage) {
return getStorage(fileStorage, FileStorageBaseType.CURRENT, "ir");
}
/** Return the path to the designated index construction area */
public static Path getIndexConstructionArea(FileStorageService fileStorage) {
return getStorage(fileStorage, FileStorageBaseType.CURRENT, "iw");
}
/** Return the path to the search sets */
public static Path getSearchSetsPath(FileStorageService fileStorage) {
return getStorage(fileStorage, FileStorageBaseType.CURRENT, "ss");
}
private static Path getStorage(FileStorageService service, FileStorageBaseType baseType, String pathPart) {
try {
var base = service.getStorageBase(baseType);
if (base == null) {
throw new IllegalStateException("File storage base " + baseType + " is not configured!");
}
// Ensure the directory exists
Path ret = base.asPath().resolve(pathPart);
if (!Files.exists(ret)) {
logger.info("Creating system directory {}", ret);
Files.createDirectories(ret);
}
return ret;
}
catch (SQLException | IOException ex) {
throw new IllegalStateException("Error fetching storage " + baseType + " / " + pathPart, ex);
}
}
}