mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
10.17.2018 feff94fdffe67ba32b92e932704d2352c7778543
First cache migrated successfully to JSC.
1 files deleted
1 files renamed
16 files modified
176 ■■■■■ changed files
README.adoc 2 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java 28 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/JCSCache.java 27 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java 46 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java 4 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java 4 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java 6 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java 5 ●●●● patch | view | raw | blame | history
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java 6 ●●●● patch | view | raw | blame | history
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java 8 ●●●● patch | view | raw | blame | history
README.adoc
@@ -28,7 +28,7 @@
}
----
* `cache_max_disc_size_mb` specifies the cache size BorgButler may use for caching borg results (such as repository
information, archive information and also file list of archive content.
information, archive information and also file list of archive content).
* `repo-configs`: You may add a list of all your repos with the borg variables. The name is only used for displaying
purposes.
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -1,6 +1,7 @@
package de.micromata.borgbutler.cache;
import com.fasterxml.jackson.annotation.JsonIgnore;
import de.micromata.borgbutler.BorgCommands;
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.ConfigurationHandler;
import de.micromata.borgbutler.json.borg.Archive;
@@ -8,6 +9,7 @@
import de.micromata.borgbutler.json.borg.RepoInfo;
import de.micromata.borgbutler.json.borg.Repository;
import lombok.Getter;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,8 +23,8 @@
    public static final String CACHE_DIR_NAME = "caches";
    private static ButlerCache instance = new ButlerCache();
    @Getter
    private RepoInfoCache repoInfoCache;
    private JCSCache jcsCache = JCSCache.getInstance();
    private CacheAccess<String, RepoInfo> repoInfoCacheAccess;
    @Getter
    private RepoListCache repoListCache;
    private ArchiveListCache archiveListCache;
@@ -43,21 +45,31 @@
    }
    public Repository getRepository(String idOrName) {
        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
        RepoInfo repoInfo = repoInfoCache.get(repoConfig, idOrName);
        RepoInfo repoInfo = getRepoInfo(idOrName);
        if (repoInfo == null) {
            log.warn("Repo with name or id '" + idOrName + "' not found.");
            return null;
        }
        return repoInfo.getRepository();
    }
    public RepoInfo getRepoInfo(String idOrName) {
        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
        RepoInfo repoInfo = repoInfoCacheAccess.get(repoConfig.getRepo());
        if (repoInfo == null) {
            repoInfo = BorgCommands.info(repoConfig);
            repoInfoCacheAccess.put(repoConfig.getRepo(), repoInfo);
        }
        if (repoInfo == null) {
            log.warn("Repo with name '" + idOrName + "' not found.");
        }
        return repoInfo;
    }
    public List<Repository> getAllRepositories() {
        List<Repository> repositories = new ArrayList<>();
        for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
            RepoInfo repoInfo = repoInfoCache.get(repoConfig, repoConfig.getName());
            RepoInfo repoInfo = getRepoInfo(repoConfig.getName());
            if (repoInfo == null) {
                log.warn("Repo with name '" + repoConfig.getName() + "' not found.");
                continue;
            }
            repositories.add(repoInfo.getRepository());
@@ -106,9 +118,9 @@
            cacheDir.mkdir();
        }
        caches = new ArrayList<>();
        caches.add(repoInfoCache = new RepoInfoCache(cacheDir));
        caches.add(repoListCache = new RepoListCache(cacheDir));
        caches.add(archiveListCache = new ArchiveListCache(cacheDir));
        archiveFileListCaches = new ArrayList<>();
        this.repoInfoCacheAccess = jcsCache.getJCSCache();
    }
}
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/JCSCache.java
File was renamed from borgbutler-core/src/main/java/de/micromata/borgbutler/jcs/JCSCache.java
@@ -1,4 +1,4 @@
package de.micromata.borgbutler.jcs;
package de.micromata.borgbutler.cache;
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
@@ -18,6 +18,30 @@
    private static final String CONFIG_FILE = "jcs-basic-config.properties";
    public static final String CACHE_DIR_NAME = "cache";
    public enum Region {DEFAULT, ARCHIVE_CONTENT}
    public static JCSCache getInstance() {
        return instance;
    }
    /**
     * @param <K>
     * @param <V>
     * @return JCS cache for default region.
     */
    public <K, V> CacheAccess<K, V> getJCSCache() {
        return JCS.getInstance("default");
    }
    public <K, V> CacheAccess<K, V> getJCSCache(Region region) {
        switch (region) {
            case ARCHIVE_CONTENT:
                return JCS.getInstance("default");
            default:
                return getJCSCache();
        }
    }
    private JCSCache() {
        Configuration configuration = ConfigurationHandler.getConfiguration();
        File cacheDir = new File(ConfigurationHandler.getInstance().getWorkingDir(), CACHE_DIR_NAME);
@@ -32,7 +56,6 @@
        } catch (IOException ex) {
            log.error("Error while loading jcs config file '" + CONFIG_FILE + "': " + ex.getMessage(), ex);
        }
        CacheAccess<String, String> jcs = JCS.getInstance("default");
        props.setProperty("jcs.auxiliary.DC.attributes.DiskPath", cacheDir.getAbsolutePath());
        props.setProperty("jcs.auxiliary.DC2.attributes.DiskPath", cacheDir.getAbsolutePath());
        int cacheMaxDiscSizeMB = configuration.getCacheMaxDiscSizeMB();
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java
File was deleted
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
@@ -5,10 +5,13 @@
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * This object is given by <tt>borg list repo</tt>.
 */
public class Archive {
public class Archive implements Serializable {
    private static final long serialVersionUID = -7872260170265536732L;
    @Getter
    private String archive;
    @Getter
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
@@ -4,10 +4,13 @@
import de.micromata.borgbutler.json.JsonUtils;
import lombok.Getter;
import java.io.Serializable;
/**
 * This object is given by <tt>borg list archive</tt>.
 */
public class Archive2 {
public class Archive2 implements Serializable {
    private static final long serialVersionUID = 4734056884088174992L;
    @Getter
    @JsonProperty("chunker_params")
    private int[] chunkerParams;
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
@@ -4,12 +4,14 @@
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
 * Result of <tt>borg list repo</tt>.
 */
public class ArchiveInfo extends RepositoryMatcher {
public class ArchiveInfo extends RepositoryMatcher implements Serializable {
    private static final long serialVersionUID = -4200553322856662346L;
    @Getter
    private List<Archive2> archives;
    @Getter
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
@@ -3,7 +3,10 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
public class ArchiveStats {
import java.io.Serializable;
public class ArchiveStats implements Serializable {
    private static final long serialVersionUID = -7603297185652222010L;
    @Getter
    @JsonProperty("compressed_size")
    private long compressedSize;
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
@@ -2,7 +2,10 @@
import lombok.Getter;
public class Cache {
import java.io.Serializable;
public class Cache implements Serializable {
    private static final long serialVersionUID = -1728825838475013561L;
    @Getter
    private String path;
    @Getter
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
@@ -2,7 +2,10 @@
import lombok.Getter;
public class Encryption {
import java.io.Serializable;
public class Encryption implements Serializable {
    private static final long serialVersionUID = -4867140003118289187L;
    @Getter
    private String mode;
}
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java
@@ -2,7 +2,10 @@
import lombok.Getter;
public class FilesystemItem {
import java.io.Serializable;
public class FilesystemItem implements Serializable {
    private static final long serialVersionUID = -5545350851640655468L;
    /**
     * d (directory), - (file)
     */
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
@@ -3,7 +3,10 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
public class RepoInfo extends RepositoryMatcher {
import java.io.Serializable;
public class RepoInfo extends RepositoryMatcher implements Serializable {
    private static final long serialVersionUID = -1588038325129799400L;
    @Getter
    @JsonProperty("security_dir")
    private String securityDir;
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
@@ -2,9 +2,11 @@
import lombok.Getter;
import java.io.Serializable;
import java.util.List;
public class RepoList extends RepositoryMatcher {
public class RepoList extends RepositoryMatcher implements Serializable {
    private static final long serialVersionUID = 1006757749929526034L;
    @Getter
    private List<Archive> archives;
    @Getter
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
@@ -6,7 +6,10 @@
import lombok.Getter;
import lombok.Setter;
public class Repository {
import java.io.Serializable;
public class Repository implements Serializable {
    private static final long serialVersionUID = 1278802519434516280L;
    /**
     * A name describing this config. Only used for displaying purposes. This is automatically set with the name
     * of the repository configuration.
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java
@@ -5,7 +5,11 @@
import lombok.Getter;
import lombok.Setter;
public abstract class RepositoryMatcher {
import java.io.Serializable;
public abstract class RepositoryMatcher implements Serializable {
    private static final long serialVersionUID = -3672403959096363628L;
    @Getter
    protected Repository repository;
    @Getter
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
@@ -3,7 +3,10 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
public class Stats {
import java.io.Serializable;
public class Stats implements Serializable {
    private static final long serialVersionUID = 9141985857856734073L;
    @Getter
    @JsonProperty("total_chunks")
    private long totalChunks;
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -32,15 +32,15 @@
        //butlerCache.removeAllCacheFiles();
        {
            for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
                RepoInfo repoInfo = ButlerCache.getInstance().getRepoInfoCache().get(repoConfig, repoConfig.getRepo());
                RepoInfo repoInfo = ButlerCache.getInstance().getRepoInfo(repoConfig.getRepo());
            }
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getRepoInfoCache().getElements().size());
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
        }
        {
            for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
                RepoList repoList = ButlerCache.getInstance().getRepoListCache().get(repoConfig, repoConfig.getRepo());
            }
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getRepoInfoCache().getElements().size());
            assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
        }
        List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs();
        Archive archive = null;
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
@@ -4,6 +4,8 @@
import de.micromata.borgbutler.json.JsonUtils;
import de.micromata.borgbutler.json.borg.Repository;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -14,6 +16,8 @@
@Path("/repos")
public class ReposRest {
    private static Logger log = LoggerFactory.getLogger(ReposRest.class);
    @GET
    @Path("refresh")
    @Produces(MediaType.TEXT_PLAIN)
@@ -22,8 +26,8 @@
     * @return "OK"
     */
    public String refresh() {
        ButlerCache.getInstance().getRepoInfoCache().clearAndReset();
        return "OK";
        log.error("refresh not yet implemented.");
        return "FAILED";
    }
    @GET