Files
kopia/cli/command_maintenance_run.go
Jarek Kowalski 4b4628a21e Repository maintenance support (#411)
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.
2020-04-14 00:11:41 -07:00

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))
}