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.AddEnableImmutableIDFlag(c)
flags.AddDeltaPageSizeFlag(c) flags.AddDeltaPageSizeFlag(c)
flags.AddGenericBackupFlags(c) flags.AddGenericBackupFlags(c)
flags.AddDisableSlidingWindowLimiterFlag(c)
case listCommand: case listCommand:
c, fs = utils.AddCommand(cmd, exchangeListCmd()) c, fs = utils.AddCommand(cmd, exchangeListCmd())

View File

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

View File

@ -5,36 +5,38 @@ import (
) )
const ( const (
AlertsFN = "alerts" AlertsFN = "alerts"
DeltaPageSizeFN = "delta-page-size" DeltaPageSizeFN = "delta-page-size"
DisableDeltaFN = "disable-delta" DisableDeltaFN = "disable-delta"
DisableIncrementalsFN = "disable-incrementals" DisableIncrementalsFN = "disable-incrementals"
ForceItemDataDownloadFN = "force-item-data-download" DisableSlidingWindowLimiterFN = "disable-sliding-window-limiter"
EnableImmutableIDFN = "enable-immutable-id" ForceItemDataDownloadFN = "force-item-data-download"
FailFastFN = "fail-fast" EnableImmutableIDFN = "enable-immutable-id"
FailedItemsFN = "failed-items" FailFastFN = "fail-fast"
FetchParallelismFN = "fetch-parallelism" FailedItemsFN = "failed-items"
NoStatsFN = "no-stats" FetchParallelismFN = "fetch-parallelism"
RecoveredErrorsFN = "recovered-errors" NoStatsFN = "no-stats"
NoPermissionsFN = "no-permissions" RecoveredErrorsFN = "recovered-errors"
RunModeFN = "run-mode" NoPermissionsFN = "no-permissions"
SkippedItemsFN = "skipped-items" RunModeFN = "run-mode"
SkipReduceFN = "skip-reduce" SkippedItemsFN = "skipped-items"
SkipReduceFN = "skip-reduce"
) )
var ( var (
DeltaPageSizeFV int DeltaPageSizeFV int
DisableDeltaFV bool DisableDeltaFV bool
DisableIncrementalsFV bool DisableIncrementalsFV bool
ForceItemDataDownloadFV bool DisableSlidingWindowLimiterFV bool
EnableImmutableIDFV bool ForceItemDataDownloadFV bool
FailFastFV bool EnableImmutableIDFV bool
FetchParallelismFV int FailFastFV bool
ListAlertsFV string FetchParallelismFV int
ListFailedItemsFV string ListAlertsFV string
ListSkippedItemsFV string ListFailedItemsFV string
ListRecoveredErrorsFV string ListSkippedItemsFV string
NoStatsFV bool ListRecoveredErrorsFV string
NoStatsFV bool
// RunMode describes the type of run, such as: // RunMode describes the type of run, such as:
// flagtest, dry, run. Should default to 'run'. // flagtest, dry, run. Should default to 'run'.
RunModeFV string 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.") fs.StringVar(&RunModeFV, RunModeFN, "run", "What mode to run: dry, test, run. Defaults to run.")
cobra.CheckErr(fs.MarkHidden(RunModeFN)) 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.DisableIncrementals = flags.DisableIncrementalsFV
opt.ToggleFeatures.ForceItemDataDownload = flags.ForceItemDataDownloadFV opt.ToggleFeatures.ForceItemDataDownload = flags.ForceItemDataDownloadFV
opt.ToggleFeatures.DisableDelta = flags.DisableDeltaFV opt.ToggleFeatures.DisableDelta = flags.DisableDeltaFV
opt.ToggleFeatures.DisableSlidingWindowLimiter = flags.DisableSlidingWindowLimiterFV
opt.ToggleFeatures.ExchangeImmutableIDs = flags.EnableImmutableIDFV opt.ToggleFeatures.ExchangeImmutableIDs = flags.EnableImmutableIDFV
opt.Parallelism.ItemFetch = flags.FetchParallelismFV opt.Parallelism.ItemFetch = flags.FetchParallelismFV

View File

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

View File

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