mirror of
https://github.com/kopia/kopia.git
synced 2026-01-27 15:58:03 -05:00
* testing: KOPIA_TEST_LOG_OUTPUT logs subcommand outputs * cli: additional flags for 'blob list' * Makefile: run all tests against epoch-based index manager * epoch: added support for deletion watermark, which keeps track of latest maintenance which dropped index entries * content: added deletion watermark to content manager * maintenance: improved maintenance without safety to force rewrites * maintenance: skip quick maintenance when epoch manager is enabled * maintenance: do not enable quick maintenance when epoch manager is used * testing: skip TestIndexOptimize when running against epoch manager-backed index strutures
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/repo"
|
|
"github.com/kopia/kopia/repo/maintenance"
|
|
)
|
|
|
|
func maybeAutoUpgradeRepository(ctx context.Context, r repo.Repository) error {
|
|
// only upgrade repository when it's directly connected, not via API.
|
|
dr, _ := r.(repo.DirectRepository)
|
|
if dr == nil {
|
|
return nil
|
|
}
|
|
|
|
has, err := maintenance.HasParams(ctx, r)
|
|
if err != nil {
|
|
return errors.Wrap(err, "error looking for maintenance parameters")
|
|
}
|
|
|
|
if has {
|
|
return nil
|
|
}
|
|
|
|
log(ctx).Debugf("Setting default maintenance parameters...")
|
|
|
|
// nolint:wrapcheck
|
|
return repo.DirectWriteSession(ctx, dr, repo.WriteSessionOptions{
|
|
Purpose: "setDefaultMaintenanceParameters",
|
|
}, func(ctx context.Context, w repo.DirectRepositoryWriter) error {
|
|
return setDefaultMaintenanceParameters(ctx, w)
|
|
})
|
|
}
|
|
|
|
func setDefaultMaintenanceParameters(ctx context.Context, rep repo.RepositoryWriter) error {
|
|
p := maintenance.DefaultParams()
|
|
p.Owner = rep.ClientOptions().UsernameAtHost()
|
|
|
|
if dw, ok := rep.(repo.DirectRepositoryWriter); ok {
|
|
if _, ok := dw.ContentReader().EpochManager(); ok {
|
|
// disable quick maintenance cycle
|
|
p.QuickCycle.Enabled = false
|
|
}
|
|
}
|
|
|
|
if err := maintenance.SetParams(ctx, rep, &p); err != nil {
|
|
return errors.Wrap(err, "unable to set maintenance params")
|
|
}
|
|
|
|
log(ctx).Infof(`
|
|
NOTE: Kopia will perform quick maintenance of the repository automatically every %v
|
|
and full maintenance every %v when running as %v.
|
|
|
|
See https://kopia.io/docs/advanced/maintenance/ for more information.
|
|
`, p.QuickCycle.Interval, p.FullCycle.Interval, p.Owner)
|
|
|
|
return nil
|
|
}
|