From df12a3a8864d167fb300dd09e645dda430d24164 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 15 Dec 2018 16:55:56 +0000
Subject: [PATCH] ...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 56 insertions(+), 1 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index fe2fa22..bfd1cd2 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -4,6 +4,7 @@
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
+import de.micromata.borgbutler.data.Archive;
import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.BorgArchive;
import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
@@ -26,6 +27,7 @@
private JCSCache jcsCache;
private CacheAccess<String, Repository> repoCacheAccess;
private CacheAccess<String, Repository> repoArchivesCacheAccess;
+ private CacheAccess<String, Archive> archivesCacheAccess;
private ArchiveFilelistCache archiveFilelistCache;
public static ButlerCache getInstance() {
@@ -89,6 +91,8 @@
clearRepoArchicesCacheAccess();
log.info("Clearing cache with file lists of archives...");
this.archiveFilelistCache.removeAllCacheFiles();
+ log.info("Clearing archives cache...");
+ this.archivesCacheAccess.clear();
}
public void clearRepoCacheAccess() {
@@ -121,13 +125,63 @@
return repository;
}
+ public Archive getArchive(String repoName, String archiveIdOrName) {
+ return getArchive(repoName, archiveIdOrName, false);
+ }
+
+ /**
+ * @param repoName
+ * @param archiveIdOrName
+ * @param forceReload If true, any cache value will be ignored. Default is false.
+ * @return
+ */
+ public Archive getArchive(String repoName, String archiveIdOrName, boolean forceReload) {
+ BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repoName);
+ if (repoConfig == null) {
+ log.error("Can't find configured repo '" + repoName + "'.");
+ return null;
+ }
+ return getArchive(repoConfig, archiveIdOrName, forceReload);
+ }
+
+ public Archive getArchive(BorgRepoConfig repoConfig, String archiveIdOrName, boolean forceReload) {
+ Repository masterRepository = getRepositoryArchives(repoConfig.getRepo());
+ if (masterRepository == null) {
+ log.error("Repository '" + repoConfig.getRepo() + "' not found.");
+ return null;
+ }
+ String archiveName = archiveIdOrName;
+ if (CollectionUtils.isEmpty(masterRepository.getArchives())) {
+ log.warn("Repository '" + repoConfig.getRepo() + "' doesn't contain archives.");
+ } else {
+ for (BorgArchive borgArchive : masterRepository.getArchives()) {
+ if (StringUtils.equals(borgArchive.getArchive(), archiveIdOrName)
+ || StringUtils.equals(borgArchive.getId(), archiveIdOrName)) {
+ archiveName = borgArchive.getArchive();
+ break;
+ }
+ }
+ }
+ String archiveFullname = repoConfig.getRepo() + "::" + archiveName;
+ if (!forceReload) {
+ Archive archive = this.archivesCacheAccess.get(archiveFullname);
+ if (archive != null) {
+ return archive;
+ }
+ }
+ Archive archive = BorgCommands.info(repoConfig, archiveName, masterRepository);
+ if (archive != null)
+ this.archivesCacheAccess.put(archiveFullname, archive);
+ return archive;
+ }
+
public BorgFilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) {
if (archive == null || StringUtils.isBlank(archive.getArchive())) {
return null;
}
BorgFilesystemItem[] items = archiveFilelistCache.load(repoConfig, archive);
if (items == null) {
- List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive);
+ List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive.getArchive());
if (CollectionUtils.isNotEmpty(list)) {
archiveFilelistCache.save(repoConfig, archive, list);
items = list.toArray(new BorgFilesystemItem[0]);
@@ -156,6 +210,7 @@
this.jcsCache = JCSCache.getInstance();
this.repoCacheAccess = jcsCache.getJCSCache("repositories");
this.repoArchivesCacheAccess = jcsCache.getJCSCache("repositoriesArchives");
+ this.archivesCacheAccess = jcsCache.getJCSCache("archives");
this.archiveFilelistCache = new ArchiveFilelistCache(getCacheDir(), configuration.getCacheArchiveContentMaxDiscSizeMB());
}
}
--
Gitblit v1.10.0