Skip to content

Conversation

@TimothyMothra
Copy link

@TimothyMothra TimothyMothra commented Jun 23, 2021

Issue #2190

Changes

  • new class: AuthenticationTransmissionPolicy with retry rules for AAD scenarios. Off by default.
  • change to TransmissionPolicyCollection to enable AuthenticationTransmissionPolicy
  • refactor Unit Test ThrottlingTransmissionPolicyTest. My new tests are based on this.
  • new Unit Tests that verify AuthenticationTransmissionPolicy triggers throttling for only specific HTTP StatusCodes.

Note: Exponential backoff is removed from scope of this PR and will be addressed in a following PR.

Checklist

  • I ran Unit Tests locally.
  • CHANGELOG.md updated with one line description of the fix, and a link to the original issue if available.

For significant contributions please make sure you have completed the following items:

  • Design discussion issue #
  • Changes in public surface reviewed

The PR will trigger build, unit tests, and functional tests automatically. Please follow these instructions to build and test locally.

Notes for authors:

  • FxCop and other analyzers will fail the build. To see these errors yourself, compile localy using the Release configuration.

Notes for reviewers:

  • We support comment build triggers
    • /AzurePipelines run will queue all builds
    • /AzurePipelines run <pipeline-name> will queue a specific build

this.Transmitter.Enqueue(e.Transmission);

// Ingestion service does not provide a retry value. We use our own here.
this.pauseTimer.Delay = TimeSpan.FromSeconds(30);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think we should do exponential backoffs, similar to how its used in other existing policies.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have a recommendation from Azure Identity on the retry timeframe?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/core/Azure.Core/src/RetryOptions.cs

Exponential back-off. Maximum of 3 retries. Initial delay 0.8s; maximum delay 1 minute.

        /// <summary>
        /// The maximum number of retry attempts before giving up.
        /// </summary>
        public int MaxRetries { get; set; } = 3;

        /// <summary>
        /// The delay between retry attempts for a fixed approach or the delay
        /// on which to base calculations for a backoff-based approach.
        /// </summary>
        public TimeSpan Delay { get; set; } = TimeSpan.FromSeconds(0.8);

        /// <summary>
        /// The maximum permissible delay between retry attempts.
        /// </summary>
        public TimeSpan MaxDelay { get; set; } = TimeSpan.FromMinutes(1);

        /// <summary>
        /// The approach to use for calculating retry delays.
        /// </summary>
        public RetryMode Mode { get; set; } = RetryMode.Exponential;

        /// <summary>
        /// The timeout applied to an individual network operations.
        /// </summary>
        public TimeSpan NetworkTimeout { get; set; } = TimeSpan.FromSeconds(100);

Also, the following is relevant (note the randomness applied).

    private TimeSpan CalculateExponentialDelay(int attempted)
    {
        return TimeSpan.FromMilliseconds(
            Math.Min(
                (1 << (attempted - 1)) * _random.Next((int)(_delay.TotalMilliseconds * 0.8), (int)(_delay.TotalMilliseconds * 1.2)),
                _maxDelay.TotalMilliseconds));
    }

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the BackoffLogicManager handles the exponential retries.
https://github.com/microsoft/ApplicationInsights-dotnet/blob/develop/BASE/src/ServerTelemetryChannel/Implementation/BackoffLogicManager.cs

Let me spend some time understanding how this works.
In my local testing the retry is a fixed interval, so maybe I've configured something incorrectly.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The BackoffLogicManager is not documented so I'm still trying to understand how this works.

It seems that the exponential backoff is triggered when it parses the retry value from the response header in GetBackOffTimeInterval().

public TimeSpan GetBackOffTimeInterval(string headerValue)
{
TimeSpan backOffTime = this.GetBackOffTime(headerValue);
this.CurrentDelay = backOffTime;
return backOffTime;
}
// Calculates the time to wait before retrying in case of an error based on
// http://en.wikipedia.org/wiki/Exponential_backoff
protected virtual TimeSpan GetBackOffTime(string headerValue)
{
if (!TryParseRetryAfter(headerValue, out TimeSpan retryAfterTimeSpan))
{
double delayInSeconds;
if (this.ConsecutiveErrors <= 1)
{
delayInSeconds = SlotDelayInSeconds;
}
else
{
double backOffSlot = (Math.Pow(2, this.ConsecutiveErrors) - 1) / 2;
var backOffDelay = Random.Next(1, (int)Math.Min(backOffSlot * SlotDelayInSeconds, int.MaxValue));
delayInSeconds = Math.Max(Math.Min(backOffDelay, MaxDelayInSeconds), SlotDelayInSeconds);
}
TelemetryChannelEventSource.Log.BackoffTimeSetInSeconds(delayInSeconds);
retryAfterTimeSpan = TimeSpan.FromSeconds(delayInSeconds);
}
TelemetryChannelEventSource.Log.BackoffInterval(retryAfterTimeSpan.TotalSeconds);
return retryAfterTimeSpan;
}

THIS won't work for us because in the AAD scenarios, our Ingestion Service does not provide a retry header.

The only example I've found of this is in the PartialSuccessTransmissionPolicy:

private void DelayFutureProcessing(HttpWebResponseWrapper response, int statusCode)
{
// Disable sending and buffer capacity (=EnqueueAsync will enqueue to the Storage)
this.MaxSenderCapacity = 0;
this.MaxBufferCapacity = 0;
this.LogCapacityChanged();
this.Apply();
// Back-off for the Delay duration and enable sending capacity
this.backoffLogicManager.ReportBackoffEnabled(statusCode);
this.pauseTimer.Delay = this.backoffLogicManager.GetBackOffTimeInterval(response.RetryAfterHeader);

I need more time to find a different way to use the existing code.


@cijothomas would it be possible to merge this as-is, without the exponential backoff?
If so, this would unblock Beta3 and give me more time to work on a solution.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may be overthinking this.

If it's just about AAD auth, really all you need to be concerned with is this:
If you get a response that indicates the token is invalid (401 Unauthorized), then you should go back to the TokenCredential and ask for a new token and immediately retry. No need for any delay. If you get another 401, then fail the call (your credential is bad).

You can probably see why caching inside the TokenCredential is a hard to cope with. If you ask for a new token, but you get back the exact same token (because it was cached and it isn't close enough to expiration), you're hosed. How do you deal with that? I think you just have to fail on the spot.

For 403s (forbidden), the situation is subtle. That indicates that, while the token was good, you just don't have access (Metrics Publisher role is missing). It could be that you just added the role and it hasn't propagated to all regions yet. So, buffering on disk and retrying later might be the right thing -- but that's a long-cycle retry loop. Minutes, not seconds. It would be great if the SDK did that, but I wouldn't grumble if telemetry got dropped in this situation.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @pharring.
In this case, I'm advocating for avoiding the exponential backoff. And I'll change the retry to at least a minute.

I agree, I think data loss is going to be inevitable in most of these situations.

}
}

private void ApplyHaltPolicy(TransmissionProcessedEventArgs e)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we receive HTTP 400 from the ingestion service, This method will block sender/buffer for the lifetime of an app. Storage will max out in short span of time as not transmissions are not sent to the service. Why are we planning to store transmissions offline in this scenario anyways we will lose data at later point.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think data loss is inevitable in each of these scenarios.

Thinking about 400 specifically, I think it is recoverable if the customer disables AAD on their AI Resource.
For that reason, I think storage-only is inappropriate here.

this.Transmitter.Enqueue(e.Transmission);

// Ingestion service does not provide a retry value. We use our own here.
this.pauseTimer.Delay = TimeSpan.FromSeconds(30);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have a recommendation from Azure Identity on the retry timeframe?

@TimothyMothra
Copy link
Author

Do we have a recommendation from Azure Identity on the retry timeframe?

We do not. In each of these cases, Azure Identity is working as expected.
If a customer reaches one of these cases, this means that the configuration between Azure & SDK are not in sync.

Base automatically changed from tilee/refactor_transmissionpolicy to develop June 24, 2021 00:25
@TimothyMothra TimothyMothra changed the title WIP: AAD: new AuthenticationTransmissionPolicy for retry scenarios. AAD: new AuthenticationTransmissionPolicy for retry scenarios. Jun 25, 2021
@TimothyMothra TimothyMothra marked this pull request as ready for review June 25, 2021 01:33
{
switch (e.Response.StatusCode)
{
case ResponseStatusCodes.BadRequest:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you confirm if BadRequest is not thrown by ingestion for anything else like a invalid json, or json exceeding size etc?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I confirmed that none of our other Policies are handling 400.
I tested using invalid json and received;
{"itemsReceived":1,"itemsAccepted":0,"errors":[{"index":0,"statusCode":400,"message":"Unknown domain type 'undefined'"}]}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean that, if we sent a bad json, ingestion responds with 400, and AuthenticationTransmissionPolicy would queue this item to be retried...400...retries..400...retries. (and forever, as the bad json will be forever a bad json)?

(The current behavior is - we drop the item if Ingestion responds with 400, and rightly so, as its pointless to retry a invalid json).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AuthenticationTransmissionPolicy can ignore 400 as well and drop the data. If user disables AAD in portal, telemetry could be sent, but there is no way to distinguish this vs invalid jsob. So it might be better off not supporting retry for 400

…icy/AuthenticationTransmissionPolicy.cs

Co-authored-by: Cijo Thomas <[email protected]>
this.backoffLogicManager.ReportBackoffEnabled(e.Response.StatusCode);
this.Transmitter.Enqueue(e.Transmission);

// Ingestion service does not provide a retry value for these scenarios.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can still use the BackOffLogicManager - its smart enough to deal with the situation where the ingestion service does not provide a 'retry-after" value, and picks a default, and then do the exponential back offs.

this.LogCapacityChanged();
this.Apply();

this.backoffLogicManager.ReportBackoffEnabled(e.Response.StatusCode);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it doesn't look like the backofflogicmanager is used anywhere but in this line.. which seems incorrect.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have multiple threads now about BackoffLogicManager... , so i'm sorry if i've lost the current thread. This may be easier to discuss on a call.

I based my implementation off of ThrottlingTransmissionPolicy

this.backoffLogicManager.ReportBackoffEnabled((int)httpWebResponse.StatusCode);
this.Transmitter.Enqueue(e.Transmission);
this.pauseTimer.Delay = this.backoffLogicManager.GetBackOffTimeInterval(httpWebResponse.RetryAfterHeader);
this.pauseTimer.Start(
() =>
{
this.ResetPolicy();
return Task.FromResult<object>(null);
});
}

At line 65, ThrottlingTransmissionPolicy calls this.backoffLogicManager.GetBackOffTimeInterval and provides the value from the retry header.
This triggers the backofflogicmanager to begin the exponential backoff.
I tried to discribe this above.

I can probably fake this by providing a custom formatted value. But I'll need to do more testing around this specifically.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's strange to me is that in the entire SDK, we only have one implementation of TransmissionPolicy that is correctly resetting the backoff:

PartialSuccessTransmissionPolicy is the only class that calls this.backoffLogicManager.ResetConsecutiveErrors();

private void HandleTransmissionSentEvent(object sender, TransmissionProcessedEventArgs args)
{
if (args.Exception == null && (args.Response == null || args.Response.StatusCode == ResponseStatusCodes.Success))
{
// We successfully sent transmittion
this.backoffLogicManager.ResetConsecutiveErrors();
return;
}

I don't have an explanation for this and would need more time to fully investigate

Copy link
Member

@rajkumar-rangaraj rajkumar-rangaraj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR looks good. We could take exponential backoff on a different issue/conversation.

Currently, AI SDK enables exponential backoff for server(ingestion) side issues. All AAD error codes sent by ingestion service is for client issue. I don't think we should be enabling exponential backoff for client errors, rather trying to reach out the service at a constant time would be a good approach.

/// </summary>
/// <remarks>
/// AN EXPLANATION OF THE STATUS CODES:
/// - <see cref="ResponseStatusCodes.BadRequest"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This policy does not handle BadRequest, let us remove it from the comment.

@TimothyMothra TimothyMothra merged commit 649264d into develop Jun 30, 2021
@TimothyMothra TimothyMothra deleted the tilee/aad_retry branch June 30, 2021 22:58
tokaplan added a commit to tokaplan/ApplicationInsights-dotnet that referenced this pull request Jul 22, 2021
* Added support for FlushAsync API

* Added more test cases

* Corrections to test case

* fixed merge conflicts

* Fixed an issue with IsEnqueueSuccess

* Bumping CurrentInvariantVersion for QuickPulse. (microsoft#2123)

* Endpoint and ping interval hints for QuickPulseModule.

* Updating changelog.md with the PR link for the change.

* StyleCop error fix.

* Bumping CurrentInvariantVersion for QuickPulse.

* Unit test fixes.

* Update how BuildNumbers are calculated (microsoft#2125)

* Update _GlobalStaticVersion.props

Change to the way we calculate the build number.

Formerly, we calculated builds as the TotalMinutes between DateTime.Now and the semantic version time stamp, divided by 5.
This meant that every 5 minutes the build number changes.
This was hurting nightly nupkgs because our assembly version and packages weren't matching.

This PR changes the calculation to be TotalHours / 12.

* Update release_NupkgAudit.ps1

* Update Changelog, prep 2.17.0-beta1 (microsoft#2126)

* Update release_NupkgAudit.ps1 (microsoft#2128)

* Update release_NupkgAudit.ps1

removing the hardcoded hash.
will put the value in the build definition. This will be easier to update when certs rotate.

* Update release_NupkgAudit.ps1

punctuation

* upgrade log4net 2.0.10 (microsoft#2150)

* Fix: telemetry parent id when using W3C activity format (microsoft#2145)

* Fix telemetry parent id when using W3C activity format

* Add unit tests

* Added InFlightTransmission struct

* Add response duration to TransmissionStatusEventArgs

* Update ChangeLog

* Update profiler and snapshot endpoints
Fixes microsoft#2166

* bump version 2.17 Stable (microsoft#2171)

* bump version

* Update CHANGELOG.md

* finalize public API

* remove outdated NuGet.Config files

* Update CONTRIBUTING.md (microsoft#2177)

* remove comment

* Update Readme.md (microsoft#2182)

Adding Support policy to readme

* Update bug_report.md (microsoft#2183)

* Update bug_report.md

Adding Immediate support policy to the bug template

* Removing item check in serializer

* Fix tests

* New Implementation

* Added Increment to pause storage dequeue

* thread sync support for move transmissions

* Create dependabot.yml (microsoft#2201)

* Fix PropertyFetcher error when used with multiple types (microsoft#2197)

* Fix PropertyFetcher error when used with multiple types

* Fix build errors

Co-authored-by: Timothy Mothra <[email protected]>

* remove Microsoft.TestPlatform.TestHost (microsoft#2208)

* Bump Microsoft.NET.Test.Sdk from 16.7.1 to 16.9.4 (microsoft#2206)

* Bump Microsoft.NET.Test.Sdk from 16.7.1 to 16.9.4

Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.7.1 to 16.9.4.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](microsoft/vstest@v16.7.1...v16.9.4)

Signed-off-by: dependabot[bot] <[email protected]>

* Update Microsoft.ApplicationInsights.Isolated.Tests.csproj

remove System.Reflection.Metadata

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Timothy Mothra <[email protected]>

* Bump NETStandard.HttpListener from 1.0.2 to 1.0.3.5 (microsoft#2205)

Bumps [NETStandard.HttpListener](https://github.com/StefH/NETStandard.HttpListener) from 1.0.2 to 1.0.3.5.
- [Release notes](https://github.com/StefH/NETStandard.HttpListener/releases)
- [Commits](https://github.com/StefH/NETStandard.HttpListener/commits)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Newtonsoft.Json from 10.0.3 to 13.0.1 (microsoft#2209)

* Bump Newtonsoft.Json from 10.0.3 to 13.0.1

Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 10.0.3 to 13.0.1.
- [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases)
- [Commits](JamesNK/Newtonsoft.Json@10.0.3...13.0.1)

Signed-off-by: dependabot[bot] <[email protected]>

* Update Microsoft.ApplicationInsights.Tests.csproj

* Update Microsoft.ApplicationInsights.Isolated.Tests.csproj

* Update TelemetryChannel.Nuget.Tests.csproj

* Update TelemetryChannel.Tests.csproj

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Timothy Mothra <[email protected]>

* Bump log4net from 2.0.10 to 2.0.12 (microsoft#2204)

Bumps [log4net](https://github.com/apache/logging-log4net) from 2.0.10 to 2.0.12.
- [Release notes](https://github.com/apache/logging-log4net/releases)
- [Changelog](https://github.com/apache/logging-log4net/blob/master/ReleaseInstructions.txt)
- [Commits](apache/logging-log4net@rel/2.0.10...rc/2.0.12)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump System.Text.Encoding.CodePages from 4.3.0 to 5.0.0 (microsoft#2211)

* Bump Microsoft.AspNetCore.Identity from 2.1.1 to 2.1.2 (microsoft#2215)

* Bump Microsoft.AspNetCore.StaticFiles from 2.1.1 to 2.2.0 (microsoft#2216)

* Bump Microsoft.AspNetCore.Mvc.TagHelpers from 2.1.1 to 2.2.0 (microsoft#2212)

* update and consolidate xunit dependencies (microsoft#2222)

* update and consolidate xunit dependencies

* fix xunit analyzer

* Bump MSTest.TestAdapter from 2.1.2 to 2.2.3 (microsoft#2223)

* Bump System.Console from 4.3.0 to 4.3.1 (microsoft#2224)

* Bump Microsoft.AspNetCore.Server.IISIntegration from 2.1.1 to 2.2.1 (microsoft#2226)

* Saving work in progress.

* API changes

* Additional tests

* spaces

* Review changes

* Fix flaky test.

* PR feedback

* InternalsVisibleTo Microsoft.AI.ServerTelemetryChannel (microsoft#2229)

* Add CancellationToken check for MoveTransmissions

* Bump Microsoft.AspNetCore.Server.Kestrel from 1.1.2 to 2.2.0 (microsoft#2207)

* Bump System.Data.SqlClient from 4.7.0 to 4.8.2 (microsoft#2231)

Bumps [System.Data.SqlClient](https://github.com/dotnet/corefx) from 4.7.0 to 4.8.2.
- [Release notes](https://github.com/dotnet/corefx/releases)
- [Commits](https://github.com/dotnet/corefx/commits)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* examples sln (microsoft#2233)

* new solution

* fix path

* additional properties in props

* adding AspNetCore WebApp to Examples

* simplify property

* PR feedback

* Initialization code and entry point for Self Diagnostics Module

* Adding access modifier

* Add APIs as declared API list

* Fix flaky test - FlushAsyncTransmissionWithThrottle (microsoft#2247)

* Add ManualResetEventSlim.Wait

* Fix warning

* general maintenance (microsoft#2250)

* general maintenance

* fix date

* update analyzers (microsoft#2198)

* update analyzers

* remove default case, tests should pass

* fxcop

* cleanup

* testing fix

* remove net452 and net46 from aspnetcore (microsoft#2252)

* remove net452 and net46 from aspnetcore

* changelog

* consolidate package references

* cleanup unnecessary dependencies in AspNetCore SDK (microsoft#2253)

* Move location of Initialization

* [SDL] update packages (microsoft#2243)

* update packages

* update test dependencies

* testing fix for version conflicts

* Update IntegrationTests.Tests.csproj

* cleanup

* cleanup

* Remove "Module" in class name. Change class to internal.

* Update CHANGELOG.md (microsoft#2254)

* Add config parser class for SelfDiagnostics

* Rename SelfDiagnostics class to SelfDiagnosticsInitializer, and SelfDiagnosticsInternals names to SelfDiagnostics.

* Rename test class namespace. Remove xunit dependency.

* Add EventListener for SelfDiagnostics (microsoft#2259)

* Add EventListener for SelfDiagnostics

* Match with EventSource name's prefix

* troubleshooting (microsoft#2264)

* troubleshooting guides

* update

* update

* update

* Update Readme.md

* Update Readme.md

* Update PostTelemetry.ps1

* Update Readme.md

* Encode event and write to file in SelfDiagnosticsEventListener (microsoft#2265)

* Encode event and write to file in SelfDiagnosticsEventListener

* Fix compile error

* Add MemoryMappedFileHandler for SelfDiagnostics (microsoft#2258)

* Add MemoryMappedFileHandler for SelfDiagnostics

* Rename classes and namespace.

* -

* Use CollectionAssert.AreEqual to compare byte[]

* Add circular write logic into MemoryMappedFileHandler class

* Fix trivial compile errors

* Fix trivial compile errors

* Update EventSource method implementation

* Update EventSource method implementation

* -

* Special requirement for last argument in method definition and last parameter for WriteEvent call

* update typo in comment

* Add ConfigRefresher for SelfDiagnostics (microsoft#2262)

* Add MemoryMappedFileHandler for SelfDiagnostics

* Rename classes and namespace.

* -

* Use CollectionAssert.AreEqual to compare byte[]

* Add circular write logic into MemoryMappedFileHandler class

* Add ConfigRefresher for SelfDiagnostics

* Fix trivial compile errors

* Fix trivial compile errors

* Update EventSource method implementation

* Update EventSource method implementation

* -

* Special requirement for last argument in method definition and last parameter for WriteEvent call

* Add new line at end of file

* Change namespace for SelfDiagnosticsInitializer

* Remove redundant using namespace statement.

* Remove blank line

* Cosmetics/technical debt  - use pattern matching (microsoft#2268)

* Fix ReSharper's "Convert 'as' expression type check and the following null check into pattern matching" / Code Smell

* Update changelog with description

* Update Readme and changelog for SelfDiagnostics (microsoft#2267)

* Add Readme and changelog for Self Diagnostics

* Fix failed test cases

* Add changelog entry

* Update troubleshooting/ETW/Readme.md with Self Diagnostics section

* Remove unused code

* Add "as of version 2.18.0"

* Update Self-Diagnostics instructions (microsoft#2271)

* Update Self-Diagnostics instructions

* Update Readme.md

* Update Readme.md

* add Net5.0 to Test Infra and Bask SDK Tests (microsoft#2272)

* add support for net461 to Tests (microsoft#2274)

* fix Test projects dependency, Microsoft.AspNetCore.App (microsoft#2276)

* cleanup frameworks in AspNetCore (microsoft#2278)

* cleanup frameworks in AspNetCore

* fix fxcop

* remove unused dependency (microsoft#2281)

* AAD: Handling Azure.Core.TokenCredential (microsoft#2191)

* Bump Microsoft.AspNetCore.Mvc.Core from 1.0.3 to 1.0.4 (microsoft#2285)

Bumps Microsoft.AspNetCore.Mvc.Core from 1.0.3 to 1.0.4.

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* disable flaky tests (microsoft#2289)

* AAD: refactor (microsoft#2288)

* AAD: refactor

* change property to internal

* AAD: with InMemoryChannel (microsoft#2290)

* aad with InMemoryChannel

* Fix AzureSdkDiagnosticListener from crashing user app (microsoft#2294)

* Fix AzureSdkDiagnosticListener from crashing user app

* changelog

* Read Azure SDK Success status (microsoft#2200)

* Read Azure SDK Success status

* cleanup Base SDK Frameworks (microsoft#2280)

Co-authored-by: Cijo Thomas <[email protected]>

* AAD: with QuickPulse (microsoft#2291)

* AAD: with QuickPulse

* AAD: with ServerTelemetryChannel (microsoft#2292)

* AAD: with ServerTelemetryChannel

* bump version 2.18-beta2 (microsoft#2296)

* disable these tests on linux (microsoft#2298)

* Updated link to performance counters docs (microsoft#2301)

* Updated link to performance counters docs

* Update WEB/Src/PerformanceCollector/README.md

Co-authored-by: Cijo Thomas <[email protected]>

* aad: detect type (microsoft#2303)

* Enable the self diagnostics and fix a NullReferenceException bug (microsoft#2302)

* Enable the self diagnostics and fix a NullReferenceException bug

* Fix compilation warnings.

* enable self-diagnostics in example app (microsoft#2305)

* AAD: change to CredentialEnvelope to expose Expiration  (microsoft#2306)

* refactor TransmissionPolicy (microsoft#2311)

* Remove OpenCover. CVE-2018-1285 (microsoft#2313)

* Update Microsoft.Extensions.Logging to 2.1.1

* AAD: new AuthenticationTransmissionPolicy for retry scenarios. (microsoft#2312)

* update version for beta3 (microsoft#2316)

* AAD: Misc changes (microsoft#2317)

* initialize cache inside constructor

* remove todo. not pursing caching right now

* cleanup comment

* update changelog

* Update ReflectionCredentialEnvelope.cs

* log to indicated Authentication Policy caught the response from ingestion (microsoft#2319)

* Update linux-build.yml (microsoft#2329)

update version of dotnet 5

* Self-Diagnostics: include datetimestamp in filename (microsoft#2325)

* include datetimestamp in self-diagnostics filename

* come review comments

* update readme

* update readme

* Update Readme.md

* Update CHANGELOG.md (microsoft#2332)

* prune public api (microsoft#2336)

* prep 2.18 (microsoft#2337)

* Tilee/examples (microsoft#2339)

* move example projects to root. change to project reference

* update packages

* remove release config

* rename projects

* build definition for examples solution

* cleanup yml

* fix yml

* test fix for yml

* test fix yml

* Update examples-sanity.yml (microsoft#2340)

correct branch name

Co-authored-by: Rajkumar Rangaraj <[email protected]>
Co-authored-by: Cijo Thomas <[email protected]>
Co-authored-by: Timothy Mothra <[email protected]>
Co-authored-by: ylabade <[email protected]>
Co-authored-by: Paul Harrington <[email protected]>
Co-authored-by: Paul Harrington <[email protected]>
Co-authored-by: Oskar Klintrot <[email protected]>
Co-authored-by: ank3it <[email protected]>
Co-authored-by: James Newton-King <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: xiang17 <[email protected]>
Co-authored-by: Martin <[email protected]>
Co-authored-by: Pavel Krymets <[email protected]>
Co-authored-by: Lev Yastrebov <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants