<!-- PR description--> AddDisableLazyItemReader disables lazy item reader, such that we fall back to prefetch reader. This flag is currently only meant for groups conversations backup. Although it can be utilized for other services in future. This flag should only be used if lazy item reader is the default choice and we want to fallback to prefetch reader. --- #### Does this PR need a docs update or release note? - [ ] ✅ Yes, it's included - [ ] 🕐 Yes, but in a later PR - [x] ⛔ No #### Type of change <!--- Please check the type of change your PR introduces: ---> - [ ] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [x] 🤖 Supportability/Tests - [ ] 💻 CI/Deployment - [ ] 🧹 Tech Debt/Cleanup #### Issue(s) <!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. --> * https://github.com/alcionai/corso/issues/4862 #### Test Plan <!-- How will this be tested prior to merging.--> - [ ] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
113 lines
5.2 KiB
Go
113 lines
5.2 KiB
Go
package control
|
|
|
|
import (
|
|
"github.com/alcionai/corso/src/pkg/control/repository"
|
|
"github.com/alcionai/corso/src/pkg/extensions"
|
|
)
|
|
|
|
// Options holds the optional configurations for a process
|
|
type Options struct {
|
|
// DeltaPageSize controls the quantity of items fetched in each page
|
|
// during multi-page queries, such as graph api delta endpoints.
|
|
DeltaPageSize int32 `json:"deltaPageSize"`
|
|
DisableMetrics bool `json:"disableMetrics"`
|
|
FailureHandling FailurePolicy `json:"failureHandling"`
|
|
ItemExtensionFactory []extensions.CreateItemExtensioner `json:"-"`
|
|
Parallelism Parallelism `json:"parallelism"`
|
|
Repo repository.Options `json:"repo"`
|
|
SkipReduce bool `json:"skipReduce"`
|
|
ToggleFeatures Toggles `json:"toggleFeatures"`
|
|
// PreviewItemLimits defines the number of items and/or amount of data to
|
|
// fetch on a best-effort basis. Right now it's used for preview backups.
|
|
//
|
|
// Since this is not split out by service or data categories these limits
|
|
// apply independently to all data categories that appear in a single backup
|
|
// where they are set. For example, if doing a teams backup and there's both a
|
|
// SharePoint site and Messages available, both data categories would try to
|
|
// backup data until the set limits without paying attention to what the other
|
|
// had already backed up.
|
|
PreviewLimits PreviewItemLimits `json:"previewItemLimits"`
|
|
}
|
|
|
|
// RateLimiter is the set of options applied to any external service facing rate
|
|
// limiters Corso may use during backups or restores.
|
|
type RateLimiter struct {
|
|
DisableSlidingWindowLimiter bool `json:"disableSlidingWindowLimiter"`
|
|
}
|
|
|
|
type FailurePolicy string
|
|
|
|
const (
|
|
// fails and exits the run immediately
|
|
FailFast FailurePolicy = "fail-fast"
|
|
// recovers whenever possible, reports non-zero recoveries as a failure
|
|
FailAfterRecovery FailurePolicy = "fail-after-recovery"
|
|
// recovers whenever possible, does not report recovery as failure
|
|
BestEffort FailurePolicy = "best-effort"
|
|
)
|
|
|
|
// DefaultOptions provides an Options with the default values set.
|
|
func DefaultOptions() Options {
|
|
return Options{
|
|
FailureHandling: FailAfterRecovery,
|
|
DeltaPageSize: 500,
|
|
ToggleFeatures: Toggles{},
|
|
Parallelism: Parallelism{
|
|
CollectionBuffer: 4,
|
|
ItemFetch: 4,
|
|
},
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Feature Flags and Toggles
|
|
// ---------------------------------------------------------------------------
|
|
|
|
// Toggles allows callers to force corso to behave in ways that deviate from
|
|
// the default expectations by turning on or shutting off certain features.
|
|
// The default state for every toggle is false; toggles are only turned on
|
|
// if specified by the caller.
|
|
type Toggles struct {
|
|
// DisableIncrementals prevents backups from using incremental lookups,
|
|
// forcing a new, complete backup of all data regardless of prior state.
|
|
DisableIncrementals bool `json:"exchangeIncrementals,omitempty"`
|
|
// ForceItemDataDownload disables finding cached items in previous failed
|
|
// backups (i.e. kopia-assisted incrementals). Data dedupe will still occur
|
|
// since that is based on content hashes. Items that have not changed since
|
|
// the previous backup (i.e. in the merge base) will not be redownloaded. Use
|
|
// DisableIncrementals to control that behavior.
|
|
ForceItemDataDownload bool `json:"forceItemDataDownload,omitempty"`
|
|
// DisableDelta prevents backups from using delta based lookups,
|
|
// forcing a backup by enumerating all items. This is different
|
|
// from DisableIncrementals in that this does not even makes use of
|
|
// delta endpoints with or without a delta token. This is necessary
|
|
// when the user has filled up the mailbox storage available to the
|
|
// user as Microsoft prevents the API from being able to make calls
|
|
// to delta endpoints.
|
|
DisableDelta bool `json:"exchangeDelta,omitempty"`
|
|
// ExchangeImmutableIDs denotes whether Corso should store items with
|
|
// immutable Exchange IDs. This is only safe to set if the previous backup for
|
|
// incremental backups used immutable IDs or if a full backup is being done.
|
|
ExchangeImmutableIDs bool `json:"exchangeImmutableIDs,omitempty"`
|
|
|
|
RunMigrations bool `json:"runMigrations"`
|
|
|
|
// DisableSlidingWindowLimiter disables the experimental sliding window rate
|
|
// limiter for graph API requests. This is only relevant for exchange backups.
|
|
// Setting this flag switches exchange backups to fallback to the default token
|
|
// bucket rate limiter.
|
|
DisableSlidingWindowLimiter bool `json:"disableSlidingWindowLimiter"`
|
|
|
|
// see: https://github.com/alcionai/corso/issues/4688
|
|
UseDeltaTree bool `json:"useDeltaTree"`
|
|
|
|
// AddDisableLazyItemReader disables lazy item reader, such that we fall
|
|
// back to prefetch reader. This flag is currently only meant for groups
|
|
// conversations backup. Although it can be utilized for other services
|
|
// in future.
|
|
//
|
|
// This flag should only be used if lazy item reader is the default choice
|
|
// and we want to fallback to prefetch reader.
|
|
DisableLazyItemReader bool `json:"disableLazyItemReader"`
|
|
}
|