mirror of
https://github.com/kopia/kopia.git
synced 2026-03-15 21:01:37 -04:00
Maintenance: support for automatic GC Moved maintenance algorithms from 'cli' to 'repo/maintenance' package Added support for CLI commands: kopia gc - performs quick maintenance kopia gc --full- perform full maintenance Full maintenance performs snapshot gc, but it's not safe to do this automatically possibly in parallel to snapshots being taken. This will be addressed ~0.7 timeframe.
38 lines
949 B
Go
38 lines
949 B
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/kopia/kopia/repo"
|
|
"github.com/kopia/kopia/repo/maintenance"
|
|
"github.com/kopia/kopia/snapshot/gc"
|
|
)
|
|
|
|
var (
|
|
maintenanceRunCommand = maintenanceCommands.Command("run", "Run repository maintenance").Default()
|
|
maintenanceRunFull = maintenanceRunCommand.Flag("full", "Full maintenance").Bool()
|
|
)
|
|
|
|
func runMaintenanceCommand(ctx context.Context, rep *repo.DirectRepository) error {
|
|
mode := maintenance.ModeQuick
|
|
if *maintenanceRunFull {
|
|
mode = maintenance.ModeFull
|
|
}
|
|
|
|
return maintenance.RunExclusive(ctx, rep, mode, func(p maintenance.RunParameters) error {
|
|
if p.Mode == maintenance.ModeFull {
|
|
if _, err := gc.Run(ctx, rep, p.Params.SnapshotGC, true); err != nil {
|
|
return errors.Wrap(err, "error running snapshot GC")
|
|
}
|
|
}
|
|
|
|
return maintenance.Run(ctx, p)
|
|
})
|
|
}
|
|
|
|
func init() {
|
|
maintenanceRunCommand.Action(directRepositoryAction(runMaintenanceCommand))
|
|
}
|