Skip to content

Commit

Permalink
Configurable Kopia Maintenance Interval
Browse files Browse the repository at this point in the history
Signed-off-by: Tiger Kaovilai <[email protected]>
  • Loading branch information
kaovilai committed Jan 15, 2025
1 parent 3eaa739 commit 569c2ef
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 deletions.
11 changes: 10 additions & 1 deletion pkg/repository/udmrepo/kopialib/lib_repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ const (
defaultMaintainCheckPeriod = time.Hour
overwriteFullMaintainInterval = time.Duration(0)
overwriteQuickMaintainInterval = time.Duration(0)
eagerGCFullInterval = time.Duration(12)
eagerGCQuickInterval = time.Duration(6)
)

var kopiaRepoOpen = repo.Open
Expand Down Expand Up @@ -600,7 +602,14 @@ func writeInitParameters(ctx context.Context, repoOption udmrepo.RepoOptions, lo
logger.Infof("Quick maintenance interval change from %v to %v", p.QuickCycle.Interval, overwriteQuickMaintainInterval)
p.QuickCycle.Interval = overwriteQuickMaintainInterval
}

if repoOption.FullMaintenanceInterval == udmrepo.FastGC {
logger.Infof("Full maintenance interval change from %v to %v", p.FullCycle.Interval, udmrepo.FastGCInterval)
p.FullCycle.Interval = udmrepo.FastGCInterval
}

Check warning on line 608 in pkg/repository/udmrepo/kopialib/lib_repo.go

View check run for this annotation

Codecov / codecov/patch

pkg/repository/udmrepo/kopialib/lib_repo.go#L606-L608

Added lines #L606 - L608 were not covered by tests
if repoOption.FullMaintenanceInterval == udmrepo.EagerGC {
logger.Infof("Full maintenance interval change from %v to %v", p.FullCycle.Interval, udmrepo.EagerGCInterval)
p.FullCycle.Interval = udmrepo.EagerGCInterval
}

Check warning on line 612 in pkg/repository/udmrepo/kopialib/lib_repo.go

View check run for this annotation

Codecov / codecov/patch

pkg/repository/udmrepo/kopialib/lib_repo.go#L610-L612

Added lines #L610 - L612 were not covered by tests
p.Owner = r.ClientOptions().UsernameAtHost()

if err := maintenance.SetParams(ctx, w, &p); err != nil {
Expand Down
28 changes: 23 additions & 5 deletions pkg/repository/udmrepo/repo_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"os"
"path/filepath"
"strings"
"time"
)

const (
Expand Down Expand Up @@ -65,13 +66,19 @@ const (

StoreOptionCacheLimit = "cacheLimitMB"

ThrottleOptionReadOps = "readOPS"
ThrottleOptionWriteOps = "writeOPS"
ThrottleOptionListOps = "listOPS"
ThrottleOptionUploadBytes = "uploadBytes"
ThrottleOptionDownloadBytes = "downloadBytes"
ThrottleOptionReadOps = "readOPS"
ThrottleOptionWriteOps = "writeOPS"
ThrottleOptionListOps = "listOPS"
ThrottleOptionUploadBytes = "uploadBytes"
ThrottleOptionDownloadBytes = "downloadBytes"
FastGC FullMaintenanceIntervalOptions = "fastGC"
FastGCInterval time.Duration = 12 * time.Hour
EagerGC FullMaintenanceIntervalOptions = "eagerGC"
EagerGCInterval time.Duration = 6 * time.Hour
)

type FullMaintenanceIntervalOptions string

const (
defaultUsername = "default"
defaultDomain = "default"
Expand All @@ -88,6 +95,9 @@ type RepoOptions struct {
GeneralOptions map[string]string
// StorageOptions takes storage specific options
StorageOptions map[string]string
// FullMaintenanceInterval will overwrite kopia maintenance interval
// options are fastGC for 12 hours, eagerGC for 6 hours
FullMaintenanceInterval FullMaintenanceIntervalOptions

// Description is a description of the backup repository/backup repository operation.
// It is for logging/debugging purpose only and doesn't control any behavior of the backup repository.
Expand Down Expand Up @@ -156,6 +166,14 @@ func WithGenOptions(genOptions map[string]string) func(*RepoOptions) error {
}
}

// WithFullMaintenanceInterval
func WithFullMaintenanceInterval(interval FullMaintenanceIntervalOptions) func(*RepoOptions) error {
return func(options *RepoOptions) error {
options.FullMaintenanceInterval = interval
return nil
}

Check warning on line 174 in pkg/repository/udmrepo/repo_options.go

View check run for this annotation

Codecov / codecov/patch

pkg/repository/udmrepo/repo_options.go#L170-L174

Added lines #L170 - L174 were not covered by tests
}

// WithStoreOptions sets the StorageOptions to RepoOptions, the store options are acquired through
// the provided interface
func WithStoreOptions(getter StoreOptionsGetter, param interface{}) func(*RepoOptions) error {
Expand Down

0 comments on commit 569c2ef

Please sign in to comment.