Windows Azure Table Storage returns "412 Precondition Failed" Error

Recently Windows Azure Table Storage access code which was working fine started giving the following error:

412 Precondition Failed

The server does not meet one of the preconditions that the requester put on the request

Stack Trace:

 System.Data.Services.Client.DataServiceRequestException was unhandled
 Message=An error occurred while processing this request.
 Source=Microsoft.WindowsAzure.StorageClient
 StackTrace:
 at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
 at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
 at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry[T](Func`2 impl, RetryPolicy policy)
 at Microsoft.WindowsAzure.StorageClient.TableServiceContext.SaveChangesWithRetries(SaveChangesOptions options)
 at Microsoft.WindowsAzure.StorageClient.TableServiceContext.SaveChangesWithRetries()
 …….
 ……..
 at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
 at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
 at System.Threading.ThreadHelper.ThreadStart(Object obj)
 InnerException: System.Data.Services.Client.DataServiceClientException
 Message=<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <error xmlns="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
 <code>ConditionNotMet</code>
 <message xml:lang="en-US">The condition specified using HTTP conditional header(s) is not met.
 RequestId:43b34531-c1ed-34ab-654a-53b3f3238764
 Time:2011-08-12T12:27:13.6404017Z</message>
 </error>
 Source=System.Data.Services.Client
 StatusCode=412
 StackTrace:
 at System.Data.Services.Client.DataServiceContext.SaveResult.<HandleBatchResponse>d__1e.MoveNext()
 InnerException:
 

 

The potential problem could be that you have a context which is tracking table update process. Later due to eTag mismatch this updated is failed and now that context is reused (even for other changes), it will continue sending the failed update.