Add a control option to disable sliding window limiter (#4676)

<!-- PR description-->

Add a killswitch for sliding window limiter.  This is only relevant for exchange backups  Setting this flag switches exchange backups to use the default token bucket rate limiter.

---

#### 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. -->
* #<issue>

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
This commit is contained in:
Abhishek Pandey 2023-11-15 13:54:46 -08:00 committed by GitHub
parent bc9d258ca0
commit 71b0831c7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 57 additions and 27 deletions

View File

@ -84,6 +84,7 @@ func addExchangeCommands(cmd *cobra.Command) *cobra.Command {
flags.AddEnableImmutableIDFlag(c)
flags.AddDeltaPageSizeFlag(c)
flags.AddGenericBackupFlags(c)
flags.AddDisableSlidingWindowLimiterFlag(c)
case listCommand:
c, fs = utils.AddCommand(cmd, exchangeListCmd())

View File

@ -108,6 +108,7 @@ func (suite *ExchangeUnitSuite) TestBackupCreateFlags() {
// bool flags
"--" + flags.DisableDeltaFN,
"--" + flags.EnableImmutableIDFN,
"--" + flags.DisableSlidingWindowLimiterFN,
},
flagsTD.PreparedGenericBackupFlags(),
flagsTD.PreparedProviderFlags(),
@ -124,6 +125,7 @@ func (suite *ExchangeUnitSuite) TestBackupCreateFlags() {
assert.True(t, co.ToggleFeatures.ForceItemDataDownload)
assert.True(t, co.ToggleFeatures.DisableDelta)
assert.True(t, co.ToggleFeatures.ExchangeImmutableIDs)
assert.True(t, co.ToggleFeatures.DisableSlidingWindowLimiter)
flagsTD.AssertGenericBackupFlags(t, cmd)
flagsTD.AssertProviderFlags(t, cmd)
flagsTD.AssertStorageFlags(t, cmd)

View File

@ -5,36 +5,38 @@ import (
)
const (
AlertsFN = "alerts"
DeltaPageSizeFN = "delta-page-size"
DisableDeltaFN = "disable-delta"
DisableIncrementalsFN = "disable-incrementals"
ForceItemDataDownloadFN = "force-item-data-download"
EnableImmutableIDFN = "enable-immutable-id"
FailFastFN = "fail-fast"
FailedItemsFN = "failed-items"
FetchParallelismFN = "fetch-parallelism"
NoStatsFN = "no-stats"
RecoveredErrorsFN = "recovered-errors"
NoPermissionsFN = "no-permissions"
RunModeFN = "run-mode"
SkippedItemsFN = "skipped-items"
SkipReduceFN = "skip-reduce"
AlertsFN = "alerts"
DeltaPageSizeFN = "delta-page-size"
DisableDeltaFN = "disable-delta"
DisableIncrementalsFN = "disable-incrementals"
DisableSlidingWindowLimiterFN = "disable-sliding-window-limiter"
ForceItemDataDownloadFN = "force-item-data-download"
EnableImmutableIDFN = "enable-immutable-id"
FailFastFN = "fail-fast"
FailedItemsFN = "failed-items"
FetchParallelismFN = "fetch-parallelism"
NoStatsFN = "no-stats"
RecoveredErrorsFN = "recovered-errors"
NoPermissionsFN = "no-permissions"
RunModeFN = "run-mode"
SkippedItemsFN = "skipped-items"
SkipReduceFN = "skip-reduce"
)
var (
DeltaPageSizeFV int
DisableDeltaFV bool
DisableIncrementalsFV bool
ForceItemDataDownloadFV bool
EnableImmutableIDFV bool
FailFastFV bool
FetchParallelismFV int
ListAlertsFV string
ListFailedItemsFV string
ListSkippedItemsFV string
ListRecoveredErrorsFV string
NoStatsFV bool
DeltaPageSizeFV int
DisableDeltaFV bool
DisableIncrementalsFV bool
DisableSlidingWindowLimiterFV bool
ForceItemDataDownloadFV bool
EnableImmutableIDFV bool
FailFastFV bool
FetchParallelismFV int
ListAlertsFV string
ListFailedItemsFV string
ListSkippedItemsFV string
ListRecoveredErrorsFV string
NoStatsFV bool
// RunMode describes the type of run, such as:
// flagtest, dry, run. Should default to 'run'.
RunModeFV string
@ -159,3 +161,18 @@ func AddRunModeFlag(cmd *cobra.Command, persistent bool) {
fs.StringVar(&RunModeFV, RunModeFN, "run", "What mode to run: dry, test, run. Defaults to run.")
cobra.CheckErr(fs.MarkHidden(RunModeFN))
}
// AddDisableSlidingWindowLimiterFN disables the experimental sliding window rate
// limiter for graph API requests. This is only relevant for exchange backups.
// Exchange restores continue to use the default token bucket rate limiter.
// Setting this flag switches exchange backups to use the default token bucket
// rate limiter.
func AddDisableSlidingWindowLimiterFlag(cmd *cobra.Command) {
fs := cmd.Flags()
fs.BoolVar(
&DisableSlidingWindowLimiterFV,
DisableSlidingWindowLimiterFN,
false,
"Disable sliding window rate limiter.")
cobra.CheckErr(fs.MarkHidden(DisableSlidingWindowLimiterFN))
}

View File

@ -25,6 +25,7 @@ func Control() control.Options {
opt.ToggleFeatures.DisableIncrementals = flags.DisableIncrementalsFV
opt.ToggleFeatures.ForceItemDataDownload = flags.ForceItemDataDownloadFV
opt.ToggleFeatures.DisableDelta = flags.DisableDeltaFV
opt.ToggleFeatures.DisableSlidingWindowLimiter = flags.DisableSlidingWindowLimiterFV
opt.ToggleFeatures.ExchangeImmutableIDs = flags.EnableImmutableIDFV
opt.Parallelism.ItemFetch = flags.FetchParallelismFV

View File

@ -36,6 +36,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
assert.True(t, flags.SkipReduceFV, flags.SkipReduceFN)
assert.Equal(t, 2, flags.FetchParallelismFV, flags.FetchParallelismFN)
assert.Equal(t, 499, flags.DeltaPageSizeFV, flags.DeltaPageSizeFN)
assert.True(t, flags.DisableSlidingWindowLimiterFV, flags.DisableSlidingWindowLimiterFN)
},
}
@ -50,6 +51,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
flags.AddSkipReduceFlag(cmd)
flags.AddFetchParallelismFlag(cmd)
flags.AddDeltaPageSizeFlag(cmd)
flags.AddDisableSlidingWindowLimiterFlag(cmd)
// Test arg parsing for few args
cmd.SetArgs([]string{
@ -63,6 +65,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
"--" + flags.SkipReduceFN,
"--" + flags.FetchParallelismFN, "2",
"--" + flags.DeltaPageSizeFN, "499",
"--" + flags.DisableSlidingWindowLimiterFN,
})
err := cmd.Execute()

View File

@ -87,4 +87,10 @@ type Toggles struct {
// the protected resource. PreviewBackups are used to demonstrate value by
// being quick to create.
PreviewBackup bool `json:"previewBackup"`
// 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"`
}