Skip to content

Freeze/Delay occurs when uploading blobs to Iot Edge Blob Storage Module #2647

@kc-95-scg

Description

@kc-95-scg

Describe the bug
Freeze/Delay occurs when uploading blobs to Iot Edge Blob Storage Module.
The delay/freeze is not random, and it happens exactly every 100 blob operations (ie UploadFrom( ), SetMetadata( ), etc) to the IoT Edge Blob Storage module.

This is an example of the delay when uploading blobs to this module.
Screenshot from 2021-07-16 10-09-02

The delay only occurs when we are using this Azure SDK for CPP to upload to Iot Edge Blob Storage Module, (which is running locally on an Iot Edge device.)

The delay doesnt occur when using the same code to upload to a cloud storage account, or the development azurite container.
The delay doesnt occur when using another storage SDK (tested with python and javascript) to the Iot Edge Blob Storage Module.

Exception or Stack Trace
No errors are thrown when the freeze/delay occurs.
The program just hangs and awaits for the blob operation to complete.
No error information in the logs of the blob storage module.
No error information in the logs of the Iot Edge edgeHub & edgeAgent module.

To Reproduce

Create an Iotedge device and deploy the iotedge blob storage module.
The following parameters were used in the deployment manifest

"modules": {
        "local-azure-storage": {
        "version": "1.0",
        "type": "docker",
        "status": "running",
        "restartPolicy": "always",
        "startupOrder": 1,
        "settings": {
            "image": "mcr.microsoft.com/azure-blob-storage:1.4.1-linux-amd64",
            "createOptions": {
            "Env": [
                "LOCAL_STORAGE_ACCOUNT_NAME=localstorageacc",
                "LOCAL_STORAGE_ACCOUNT_KEY=password"
            ],
            "HostConfig": {
                "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-size": "10m",
                    "max-file": "3"
                    }
                },
                "Binds": [
                    "/localblob:/blobroot"
                ],
                "PortBindings": {
                    "11002/tcp": [
                        {
                            "HostPort": "11002"
                        }
                    ]
                }
            }
            }
        }
    }
}

"local-azure-storage": {
    "properties.desired": {
    "deviceAutoDeleteProperties": {
        "deleteOn": false,
        "deleteAfterMinutes": 3600,
        "retainWhileUploading": false
    },
    "deviceToCloudUploadProperties": {
        "uploadOn": false,
        "uploadOrder": "OldestFirst",
        "cloudStorageConnectionString": "",
        "storageContainersForUpload": {
            }
        },
        "deleteAfterUpload": true
    }
    }
},

Code Snippet

int main(int argc, char** argv)
{
    std::ifstream t("test_buffstring_createdfromimage.txt");
    std::stringstream buffer;
    buffer << t.rdbuf();

    const std::string connectionString=getenv("LOCAL_CONNECTION_STRING");
    //connection string in this case it is "AccountName=localstorageacc;AccountKey=password;BlobEndpoint=http://localhost:11002/localstorageacc"
    const std::string containerName=getenv("LOCAL_CONTAINER_NAME");
    std::string blobName;
    int n=0;

    while(1){

        blobName=std::to_string(n);
        auto start = std::chrono::high_resolution_clock::now();

        auto cClient =  Azure::Storage::Blobs::BlobContainerClient::CreateFromConnectionString(connectionString, containerName);
        auto blobClient = cClient.GetBlockBlobClient(blobName);
        blobClient.UploadFrom(reinterpret_cast<const uint8_t*>(buffer.c_str()), buffer.size());

        auto finish = std::chrono::high_resolution_clock::now();
        std::chrono::duration<double> time_elapsed = finish - start;
        std::cout << blobName << ", Elapsed time: " << time_elapsed.count() << " s" << std::endl;
        n=n+1;
    }
}

Took reference from this sample code https://github.com/Azure/azure-sdk-for-cpp/blob/main/sdk/storage/azure-storage-blobs/sample/blob_getting_started.cpp
Buffer stringstream can be any string. The error still occurs when no matter the blob size.

Expected behavior
A Elapsed time of 4.5 to 5 seconds will be shown every 100 blobs uploaded.

Screenshots
Screenshot from 2021-07-16 10-09-02

Setup (please complete the following information):

Additional context
A ticket has been raised under TrackingID#2106230060000825

Metadata

Metadata

Labels

ClientThis issue points to a problem in the data-plane of the library.blocking-releaseBlocks releasecustomer-reportedIssues that are reported by GitHub users external to the Azure organization.questionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions