Esempio n. 1
0
    public void TestDecodeThrottlingReasonCode()
    {
        SqlError            err       = FakeSqlExceptionGenerator.GenerateFakeSqlError(ThrottlingCondition.ThrottlingErrorNumber, Resources.SampleThrottlingErrorMsg);
        ThrottlingCondition condition = ThrottlingCondition.FromError(err);

        Assert.AreEqual(ThrottlingMode.RejectAll, condition.ThrottlingMode, "Unexpected throttling mode.");

        ThrottlingType throttlingType = condition.ThrottledResources.Where(x => x.Item1 == ThrottledResourceType.Cpu).Select(x => x.Item2).FirstOrDefault();

        Assert.AreEqual(ThrottlingType.Hard, throttlingType, "Unexpected throttling type.");
    }
Esempio n. 2
0
    [Ignore]    // REVIEW - Test will continue throwing the exception so the action will eventually run out of retry attempts
    public void TestThrottlingConditionSimulation()
    {
        // Instantiate a retry policy capable of detecting transient faults that are specific to SQL Database. Use the default retry count.
        RetryPolicy retryPolicy = new RetryPolicy <SqlDatabaseTransientErrorDetectionStrategy>(RetryStrategy.DefaultClientRetryCount);

        // Register a custom event handler that will be invoked by the policy whenever a retry condition is encountered.
        retryPolicy.Retrying += (sender, args) =>
        {
            // Log a warning message to indicate that a retry loop kicked in.
            Trace.TraceWarning("Retry condition encountered. Reason: {0} (retry count: {1}, retry delay: {2})", args.LastException.Message, args.CurrentRetryCount, args.Delay);

            // Make sure we are dealing with a SQL exception.
            if (args.LastException is SqlException sqlException)
            {
                // Parse the exception to find out whether it is indicative of any throttling conditions.
                ThrottlingCondition throttlingCondition = ThrottlingCondition.FromException(sqlException);

                // Verify whether throttling condition were detected.
                if (!throttlingCondition.IsUnknown)
                {
                    // Log a further warning message with details on throttling conditions encountered.
                    Trace.TraceWarning("Throttling condition detected. Details: {0}", throttlingCondition);
                }
            }
        };

        // Invoke a database operation or set of database operations against SQL Database.
        retryPolicy.ExecuteAction(() =>
        {
            // Open a connection, execute a SQL query or stored procedure, perform any kind of database operations.
            // ...

            SqlException sqlEx = FakeSqlExceptionGenerator.GenerateFakeSqlException(ThrottlingCondition.ThrottlingErrorNumber, Resources.SampleThrottlingErrorMsg);
            throw sqlEx;
        });
    }