Add a control option to disable sliding window limiter

This commit is contained in:
Abhishek Pandey 2023-11-14 00:43:01 -08:00
parent ac0fa41c9c
commit 42ae33c436
6 changed files with 50 additions and 19 deletions

View File

@ -85,6 +85,7 @@ func addExchangeCommands(cmd *cobra.Command) *cobra.Command {
flags.AddDisableConcurrencyLimiterFlag(c) flags.AddDisableConcurrencyLimiterFlag(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

@ -109,6 +109,7 @@ func (suite *ExchangeUnitSuite) TestBackupCreateFlags() {
"--" + flags.DisableDeltaFN, "--" + flags.DisableDeltaFN,
"--" + flags.EnableImmutableIDFN, "--" + flags.EnableImmutableIDFN,
"--" + flags.DisableConcurrencyLimiterFN, "--" + flags.DisableConcurrencyLimiterFN,
"--" + flags.DisableSlidingWindowLimiterFN,
}, },
flagsTD.PreparedGenericBackupFlags(), flagsTD.PreparedGenericBackupFlags(),
flagsTD.PreparedProviderFlags(), flagsTD.PreparedProviderFlags(),
@ -126,6 +127,7 @@ func (suite *ExchangeUnitSuite) TestBackupCreateFlags() {
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.DisableConcurrencyLimiter) assert.True(t, co.ToggleFeatures.DisableConcurrencyLimiter)
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,22 +5,23 @@ import (
) )
const ( const (
AlertsFN = "alerts" AlertsFN = "alerts"
DeltaPageSizeFN = "delta-page-size" DeltaPageSizeFN = "delta-page-size"
DisableConcurrencyLimiterFN = "disable-concurrency-limiter" DisableConcurrencyLimiterFN = "disable-concurrency-limiter"
DisableDeltaFN = "disable-delta" DisableDeltaFN = "disable-delta"
DisableIncrementalsFN = "disable-incrementals" DisableIncrementalsFN = "disable-incrementals"
ForceItemDataDownloadFN = "force-item-data-download" ForceItemDataDownloadFN = "force-item-data-download"
EnableImmutableIDFN = "enable-immutable-id" EnableImmutableIDFN = "enable-immutable-id"
FailFastFN = "fail-fast" FailFastFN = "fail-fast"
FailedItemsFN = "failed-items" FailedItemsFN = "failed-items"
FetchParallelismFN = "fetch-parallelism" FetchParallelismFN = "fetch-parallelism"
NoStatsFN = "no-stats" NoStatsFN = "no-stats"
RecoveredErrorsFN = "recovered-errors" RecoveredErrorsFN = "recovered-errors"
NoPermissionsFN = "no-permissions" NoPermissionsFN = "no-permissions"
RunModeFN = "run-mode" RunModeFN = "run-mode"
SkippedItemsFN = "skipped-items" SkippedItemsFN = "skipped-items"
SkipReduceFN = "skip-reduce" SkipReduceFN = "skip-reduce"
DisableSlidingWindowLimiterFN = "disable-sliding-limiter"
) )
var ( var (
@ -39,9 +40,10 @@ var (
NoStatsFV bool 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
NoPermissionsFV bool NoPermissionsFV bool
SkipReduceFV bool SkipReduceFV bool
DisableSlidingWindowLimiterFV bool
) )
// well-known flag values // well-known flag values
@ -174,3 +176,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. Default: false")
cobra.CheckErr(fs.MarkHidden(DisableSlidingWindowLimiterFN))
}

View File

@ -27,6 +27,7 @@ func Control() control.Options {
opt.ToggleFeatures.DisableDelta = flags.DisableDeltaFV opt.ToggleFeatures.DisableDelta = flags.DisableDeltaFV
opt.ToggleFeatures.ExchangeImmutableIDs = flags.EnableImmutableIDFV opt.ToggleFeatures.ExchangeImmutableIDs = flags.EnableImmutableIDFV
opt.ToggleFeatures.DisableConcurrencyLimiter = flags.DisableConcurrencyLimiterFV opt.ToggleFeatures.DisableConcurrencyLimiter = flags.DisableConcurrencyLimiterFV
opt.ToggleFeatures.DisableSlidingWindowLimiter = flags.DisableSlidingWindowLimiterFV
opt.Parallelism.ItemFetch = flags.FetchParallelismFV opt.Parallelism.ItemFetch = flags.FetchParallelismFV
return opt return opt

View File

@ -37,6 +37,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
assert.Equal(t, 2, flags.FetchParallelismFV, flags.FetchParallelismFN) assert.Equal(t, 2, flags.FetchParallelismFV, flags.FetchParallelismFN)
assert.True(t, flags.DisableConcurrencyLimiterFV, flags.DisableConcurrencyLimiterFN) assert.True(t, flags.DisableConcurrencyLimiterFV, flags.DisableConcurrencyLimiterFN)
assert.Equal(t, 499, flags.DeltaPageSizeFV, flags.DeltaPageSizeFN) assert.Equal(t, 499, flags.DeltaPageSizeFV, flags.DeltaPageSizeFN)
assert.True(t, flags.DisableSlidingWindowLimiterFV, flags.DisableSlidingWindowLimiterFN)
}, },
} }
@ -52,6 +53,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
flags.AddFetchParallelismFlag(cmd) flags.AddFetchParallelismFlag(cmd)
flags.AddDisableConcurrencyLimiterFlag(cmd) flags.AddDisableConcurrencyLimiterFlag(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{
@ -66,6 +68,7 @@ func (suite *OptionsUnitSuite) TestAddExchangeCommands() {
"--" + flags.FetchParallelismFN, "2", "--" + flags.FetchParallelismFN, "2",
"--" + flags.DisableConcurrencyLimiterFN, "--" + flags.DisableConcurrencyLimiterFN,
"--" + flags.DeltaPageSizeFN, "499", "--" + flags.DeltaPageSizeFN, "499",
"--" + flags.DisableSlidingWindowLimiterFN,
}) })
err := cmd.Execute() err := cmd.Execute()

View File

@ -91,4 +91,11 @@ 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.
// 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.
DisableSlidingWindowLimiter bool `json:"disableSlidingWindowLimiter"`
} }