A community member has associated this post with a similar question:
How to ignore ETag checking and fix this error
Only moderators can edit this content.
I read blob content from Azure blob storage. The same Blob content is being changed by another program at the same time while it is being downloaded (i.e., new content is written and getting appended to the existing content). I get error in the below stream.Read() line. Which I believe is because of mismatch eTag values as file is both read and writen at the same time. How can I make it ignore checking for ETag.
I am actually not setting any "conditional headers" in the request. You could see the error details at the bottom (Status: 412 - The condition specified using HTTP conditional header(s) is not met), I believe something is happening under the covers that I'm not aware of.
I tried to set conditional header ETag value as "*" as below. Thinking it would ignore checking for matching ETag values. But this does not work.
Using Azure.Storage.Blobs package.
originalETag = properties.ETag;
blobOpenReadOptions = new BlobOpenReadOptions(true)
{
Conditions = new BlobRequestConditions()
{
IfMatch = new ETag("*") // set as *, thinking this will ignore etag value when I read blob content and not throw error
//IfMatch = ETag.All
//IfNotMatch = originalETag
}
};
And used the
using (var stream = await blob.OpenReadAsync(offset, segmentSize))
{
await blob.OpenReadAsync(blobOpenReadOptions);
stream.Position = offset;
stream.Read(buffer, 0, buffer.Length); // ERROR in this line
ret.Byte = buffer;
}
Read() error below:
Azure.RequestFailedException: The condition specified using HTTP conditional header(s) is not met.
RequestId:b84cc30f-501e-009f-4596-295240000000
Time:2023-01-16T10:37:49.1672314Z
Status: 412 (The condition specified using HTTP conditional header(s) is not met.)
ErrorCode: ConditionNotMet
Content:
<?xml version="1.0" encoding="utf-8"?><Error>
RequestId:b84cc30f-501e-009f-4596-2952400000
Time:2023-01-16T10:37:49.1672314Z</Message></Error>
Headers:
Server: Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
x-ms-request-id: b84cc30f-501e-009f-4596-29524000000
x-ms-client-request-id: 70f94258-163a-464c-879f-437d5ac7be7
x-ms-version: 2021-10-04
x-ms-error-code: ConditionNotMet
Date: Mon, 16 Jan 2023 10:37:48 GMT
Content-Length: 252
Content-Type: application/xml
at Azure.Storage.Blobs.BlobRestClient.Download(String snapshot, String versionId, Nullable
at Azure.Storage.Blobs.Specialized.BlobBaseClient.StartDownloadAsync(HttpRange range, BlobRequestConditions conditions, DownloadTransferValidationOptions validationOptions, Int64 startOffset, Boolean async, CancellationToken cancellationToken)
at Azure.Storage.Blobs.Specialized.BlobBaseClient.DownloadStreamingInternal(HttpRange range, BlobRequestConditions conditions, DownloadTransferValidationOptions transferValidationOverride, IProgress`1 progressHandler, String operationName, Boolean async, CancellationToken cancellationToken)
at Azure.Storage.Blobs.Specialized.BlobBaseClient.<>c__DisplayClass97_0.<<OpenReadInternal>b__1>d.MoveNext()
--- End of stack trace from previous location ---
at Azure.Storage.LazyLoadingReadOnlyStream`1.DownloadInternal(Boolean async, CancellationToken cancellationToken)
at Azure.Storage.LazyLoadingReadOnlyStream`1.ReadInternal(Byte[] buffer, Int32 offset, Int32 count, Boolean async, CancellationToken cancellationToken)
at Azure.Core.Pipeline.TaskExtensions.EnsureCompleted[T](Task`1 task)
at Azure.Storage.LazyLoadingReadOnlyStream`1.Read(Byte[] buffer, Int32 offset, Int32 count)
at Project.Server.Models.ItemRepository.GetFile(String fileName, Int64 offset, Int64 blobLengthRemaining, Int64 prevContentLen) in C:\Users\Project\Server\Models\ItemRepository.cs:line 221
at LogViewer.Server.Controllers.ItemController.GetBlobFile(String fileName, Int64 offset, Int64 blobLengthRemaining, Int64 contentLen) in C:\Users\Project\Server\Controllers\ItemController.cs:line 60
at lambda_method60(Closure , Object )
.....
Thank you.