2017-11-02 12 views
0

다른 프로세스가 추가중인 azure storage append BLOB을 읽으려고하면 Cpprest가 어설 션합니다. 아래 코드는 관련 스 니펫입니다. assert는 while 루프의 반복 횟수 이후에 .get() 동안 발생하고 blob 끝까지 도달합니다.blob을 추가하려고하면 cpprest가 어설트합니다.

myapp: /usr/local/include/cpprest/containerstream.h:120: size_t 
Concurrency::streams::details::basic_container_buffer<_CollectionType>::in_avail() const 
[with _CollectionType = std::vector<unsigned char>; size_t = long unsigned int]: 
Assertion `m_current_position <= m_data.size()' failed. 

가 어떻게이 해결할 수 : 여기

auto blob = container.get_append_blob_reference("asdf"); 
auto stream = blob.open_read(); 

while (true) 
{ 
    auto cb = concurrency::streams::container_buffer<vector<uint8_t>>({}, ios_base::out); 
    if (stream.read(cb, 1024 * 1024).get() == 0) 
    { 
     break; 
    } 
} 

은 어설 션 메시지인가?

답변

1

open_read()에는 다운로드 중에 모양이 변경되지 않아야합니다. etag 조건을 생성하여 각 다운로드가 동일한 blob에서 온 것인지 확인합니다.이 blob은 변경되지 않습니다. 코드 참조 : https://github.com/Azure/azure-storage-cpp/blob/24219e816b088fbb64a359d92ff590245ccf0b90/Microsoft.WindowsAzure.Storage/src/cloud_blob.cpp#L137

이 문제를 해결하려면이 코드 줄을 해제하고 라이브러리를 수동으로 빌드하면됩니다.