mirror of
https://github.com/kopia/kopia.git
synced 2026-01-25 14:58:00 -05:00
* repo: refactored connect code set up cache for server repositories - improved logic to close the cache on last connection - preemptively add all contents with a prefix to the cache - refactored how config is loaded and saved Now cache dir will be stored as relative and resolved to absolute as part of loading and saving the file, in all other places cache dir is expected to be absolute. * server: removed cache directory from the API and UI This won't be easily available and does not seem useful to expose anyway. * cli: enabled cache commands for server repositories * cli: added KOPIA_CACHE_DIRECTORY environment variable This is used on two occassions - when setting up connection (it gets persisted in the config) and later when opening (to override the cache location from config). It makes setting up docker container with mounted cache somewhat easier with one environment variable. * cli: show cache size for the server cache * tls: present more helpful error message that includes SHA256 fingerprint of the TLS server on mismatch * server: return the name of user who attempted to login when authentication fails
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/internal/units"
|
|
"github.com/kopia/kopia/repo"
|
|
)
|
|
|
|
var (
|
|
cacheSetParamsCommand = cacheCommands.Command("set", "Sets parameters local caching of repository data")
|
|
|
|
cacheSetDirectory = cacheSetParamsCommand.Flag("cache-directory", "Directory where to store cache files").String()
|
|
cacheSetContentCacheSizeMB = cacheSetParamsCommand.Flag("content-cache-size-mb", "Size of local content cache").PlaceHolder("MB").Default("-1").Int64()
|
|
cacheSetMaxMetadataCacheSizeMB = cacheSetParamsCommand.Flag("metadata-cache-size-mb", "Size of local metadata cache").PlaceHolder("MB").Default("-1").Int64()
|
|
cacheSetMaxListCacheDuration = cacheSetParamsCommand.Flag("max-list-cache-duration", "Duration of index cache").Default("-1ns").Duration()
|
|
)
|
|
|
|
func runCacheSetCommand(ctx context.Context, rep repo.RepositoryWriter) error {
|
|
opts, err := repo.GetCachingOptions(ctx, repositoryConfigFileName())
|
|
if err != nil {
|
|
return errors.Wrap(err, "error getting caching options")
|
|
}
|
|
|
|
changed := 0
|
|
|
|
if v := *cacheSetDirectory; v != "" {
|
|
log(ctx).Infof("setting cache directory to %v", v)
|
|
opts.CacheDirectory = v
|
|
changed++
|
|
}
|
|
|
|
if v := *cacheSetContentCacheSizeMB; v != -1 {
|
|
v *= 1e6 // convert MB to bytes
|
|
log(ctx).Infof("changing content cache size to %v", units.BytesStringBase10(v))
|
|
opts.MaxCacheSizeBytes = v
|
|
changed++
|
|
}
|
|
|
|
if v := *cacheSetMaxMetadataCacheSizeMB; v != -1 {
|
|
v *= 1e6 // convert MB to bytes
|
|
log(ctx).Infof("changing metadata cache size to %v", units.BytesStringBase10(v))
|
|
opts.MaxMetadataCacheSizeBytes = v
|
|
changed++
|
|
}
|
|
|
|
if v := *cacheSetMaxListCacheDuration; v != -1 {
|
|
log(ctx).Infof("changing list cache duration to %v", v)
|
|
opts.MaxListCacheDurationSec = int(v.Seconds())
|
|
changed++
|
|
}
|
|
|
|
if changed == 0 {
|
|
return errors.Errorf("no changes")
|
|
}
|
|
|
|
return repo.SetCachingOptions(ctx, repositoryConfigFileName(), opts)
|
|
}
|
|
|
|
func init() {
|
|
cacheSetParamsCommand.Action(repositoryWriterAction(runCacheSetCommand))
|
|
}
|