Skip to main content

AdaptiveThrottleManager

  • Namespace: PPDS.Dataverse.BulkOperations
  • Assembly: PPDS.Dataverse
  • Kind: Class

Summary​

Dynamically adjusts the degree of parallelism (DOP) for bulk DML operations in response to Dataverse 429 (service protection limit) errors. Complementary to PPDS.Dataverse.BulkOperations.AdaptiveBatchSizer which adjusts batch SIZE; this class adjusts thread COUNT.

Members​

Constructors​

AdaptiveThrottleManager(int maxDop, int initialDop, int successThreshold, Nullable<TimeSpan> cooldownPeriod, Func<DateTime> clock)​

AdaptiveThrottleManager(int maxDop, int initialDop, int successThreshold, Nullable<TimeSpan> cooldownPeriod, Func<DateTime> clock)

Initializes a new instance of the PPDS.Dataverse.BulkOperations.AdaptiveThrottleManager class.

  • Param maxDop: Maximum degree of parallelism (upper bound). Must be at least 1.

  • Param initialDop: Initial active DOP. If zero or negative, defaults to maxDop. Clamped to [1, maxDop].

  • Param successThreshold: Number of consecutive successes required before DOP can increase. Default: 5.

  • Param cooldownPeriod: Minimum time after a throttle before DOP can increase. Default: 30 seconds. If null, uses PPDS.Dataverse.BulkOperations.AdaptiveThrottleManager.DefaultCooldownPeriod.

  • Param clock: Optional clock function for testability. Returns UTC now. If null, uses System.DateTime.UtcNow.

Methods​

RecordSuccess​

void RecordSuccess()

Records a successful batch execution. After PPDS.Dataverse.BulkOperations.AdaptiveThrottleManager.SuccessThreshold consecutive successes AND PPDS.Dataverse.BulkOperations.AdaptiveThrottleManager.CooldownPeriod since the last throttle, increments the active DOP by one (up to PPDS.Dataverse.BulkOperations.AdaptiveThrottleManager.MaxDop).

RecordThrottle​

void RecordThrottle()

Records a throttle (429) event. Halves the active DOP (minimum 1), resets the consecutive success counter, and records the throttle timestamp.

Properties​

ActiveDop​

int ActiveDop { get; }

Gets the current active degree of parallelism.

ConsecutiveSuccesses​

int ConsecutiveSuccesses { get; }

Gets the number of consecutive successes since the last throttle or DOP increase.

CooldownPeriod​

TimeSpan CooldownPeriod { get; }

Gets the cooldown period after a throttle before DOP can increase.

LastThrottleTime​

DateTime LastThrottleTime { get; }

Gets the timestamp of the last throttle event, or System.DateTime.MinValue if no throttle has occurred.

MaxDop​

int MaxDop { get; }

Gets the maximum degree of parallelism (upper bound for recovery).

SuccessThreshold​

int SuccessThreshold { get; }

Gets the number of consecutive successes required before DOP can increase.

Fields​

DefaultCooldownPeriod​

TimeSpan DefaultCooldownPeriod

Default cooldown period after a throttle before DOP can increase.

DefaultSuccessThreshold​

int DefaultSuccessThreshold

Default number of consecutive successes required before increasing DOP.