Open nawab-alam opened 3 years ago
Is this known issue?
No, we've never seen this issue before.
Here application do not have any control on these errors. - Does Azure SDK provide ways to retry such failed task?
Yes. Every API takes a blob_request_options as parameter, which has a member function of set_retry_policy.
- How application should handle such issues?
We are still unclear about how this issue happened. It'd be too early to say how to handle it. We need some more information to further investigate.
Thank you for your response. We are currently working on retry policy. Below are the answers of queries you asked for further investigation.
What's the typical HTTP request concurrency when this issue happened?
We were not sure about concurrency count. So it took time to gather required information. HTTP request concurrency is around 40.
What's the hardware like?
We are using shared hardware that consist of 144 processors and 1TB memory.
How often does it happen? Like one out of how many requests failed with this exception?
Issue is intermittent. We can consider failing frequency is hardly 1%-2%.
Query/Question Our application using Azure SDK C++ library to perform upload blocks on block blob. Application perform upload on different blobs in parallel on Azurite emulator. Each blob may contain multiple blocks. Blocks uploaded using asynchronous version and periodically application checks pplx task whether upload successfully or not. We observed that intermittently application receive exception from pplx task get() API. We confirmed there is no any PUT request received at Azurite side when application get write failed error. On error application needs to restart complete upload operation.
Exception error as follows -
Questions as below -
Below is code snippet for reference.
API used to Initialize context. There is pool of AzureClient object. Every upload operation get client from pool. If no client available then new client created.
class AzureClient { azure::storage::cloud_storage_account _storageAccount; azure::storage::cloud_blob_client _blobClient; azure::storage::cloud_blob_container _container; azure::storage:: cloud_block_blob _cloudBlob; }
//Create storage account object _storageAccount = new azure::storage::cloud_storage_account(azure::storage::cloud_storage_account::parse(utility::string_t(connStr)));
//Create blob client object _blobClient = new azure::storage::cloud_blob_client(_storageAccount->blob_endpoint(),_storageAccount->credentials());
//Retrieve container reference using connection string. _container = new azure::storage::cloud_blob_container(utility::string_t(_containerName), *_blobClient)
//If container exist then create blob reference _cloudBlob = new azure::storage::cloud_block_blob(cloudBlob);
API used to check completed task
for (auto writeTask = _writeTasks->begin(); writeTask != _writeTasks->end(); ++writeTask) { writeTask->task.get(); }
Why is this not a Bug or a feature Request? This seem appropriate template for my issue. I am not looking for additional enhancement so it is not feature request. I am not sure whether it is Bug or not.
Setup (please complete the following information if applicable):
Version of the Library used - Azure Storage Client Library for C++ 7.5.0 - cpprestsdk 2.10.18
Information Checklist Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report