Microsoft Transient Fault Handling Application Block ("Topaz") - August 2012 Update
We removed the hard dependency on the Windows Azure Shared Caching core assembly (Microsoft.ApplicationServer.Caching.Core, Version=126.96.36.199). This was causing build/deployment issues
for users who wanted to use the Windows Azure Caching Preview (Microsoft.ApplicationServer.Caching.Core, Version=188.8.131.52) even when not using Topaz to handle transient faults accessing the Caching service, as the preview is not yet supported by Topaz.
v..5.0.1208.0 and v.5.0.1208.1
In this August wave of updates we are releasing two service updates to Topaz
– the Transient Fault Handling Application Block
v.5.0.1208.0 and v.5.0.1208.1 targeting the Windows Azure SDK for .NET 1.6 Nov 2011
and 1.7 June 2012
- Topaz v.5.0.1208.1 and later will only support the Windows Azure SDK 1.7 June 2012 client libraries.
- To make the update experience as simple as possible for users and to avoid the need for assembly binding redirects, we chose to only increment the assembly file and NuGet package versions, not the .NET assembly version. The assembly version is still 5.0.1118.0.
The updates include fixes to the following:
- Service Bus transient error detection strategy:
- Critical bug fix: The previous version of Topaz incorrectly treated every WebException (many of which are wrapped in higher level exceptions) as transient and retried them. Now WebExceptions are only treated as transient if they contain a status code of InternalServerError, GatewayTimeout, ServiceUnavailable, or RequestTimeout.
- Edge case fix: The block treats UnauthorizedAccessException only with a specific status code (HttpStatusCode.Unauthorized) as transient.
- Azure Storage transient error detection strategy:
- High impact bug fix: When a WebException with a protocol error occurred, Topaz treated it as transient, which was causing some non-transient exceptions to be treated as transient (for example, a NotFound HTTP status). Now WebExceptions are only treated as transient if they contain a status code of InternalServerError, GatewayTimeout, ServiceUnavailable, RequestTimeout. The issue reported here is now fixed.
- Edge case fix: In addition to the previously handled codes for the DataServiceRequestException, StorageServerException, and StorageClientException, the block now treats the following codes as transient also: TableErrorCodeStrings.TableServerOutOfMemory or TableErrorCodeStrings.TableBeingDeleted
- Edge case fix: The block treats IOException as transient. IOExceptions could manifest themselves under extremely high load ("Unable to read data from the transport connection: The connection was closed").
To update to the version 5.0.1208.1 targeting SDK1.7, follow the usual way of updating a package either via the UI
or via the Package Manager console
To update to the version 5.0.1208.0 targeting SDK1.6, the Package Manager UI cannot be used (since it only allows updating to the latest version). Follow these steps:
- Open the Package Manager Console (Tools menu, select Library Package Manager and then click Package Manager Console).
- For each of the projects you want to install/update the block:
- select the project in the Default Project dropdown box
- run one of the following commands:
Install-Package EnterpriseLibrary.WindowsAzure.TransientFaultHandling -Version 5.0.1208.0
Update-Package EnterpriseLibrary.WindowsAzure.TransientFaultHandling -Version 5.0.1208.0