当我尝试读取 append blob 时 cpprest 断言
cpprest asserts when I try to read append blob
当我尝试读取另一个进程正在附加到的 azure 存储附加 blob 时,Cpprest 断言。下面是我的代码的相关片段。断言发生在 .get() 期间,在 while 循环的一些迭代之后以及到达 blob 末尾之前的方式。
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;
}
}
这是断言消息:
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.
我该如何处理?
open_read() 要求 blob 在下载期间保持不变。它将生成一个 etag 条件,以确保每次下载都来自同一个 blob,该 blob 是不变的。请参阅代码参考:https://github.com/Azure/azure-storage-cpp/blob/24219e816b088fbb64a359d92ff590245ccf0b90/Microsoft.WindowsAzure.Storage/src/cloud_blob.cpp#L137
要解决此问题,您可以禁用这行代码并手动构建一个库。
当我尝试读取另一个进程正在附加到的 azure 存储附加 blob 时,Cpprest 断言。下面是我的代码的相关片段。断言发生在 .get() 期间,在 while 循环的一些迭代之后以及到达 blob 末尾之前的方式。
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;
}
}
这是断言消息:
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.
我该如何处理?
open_read() 要求 blob 在下载期间保持不变。它将生成一个 etag 条件,以确保每次下载都来自同一个 blob,该 blob 是不变的。请参阅代码参考:https://github.com/Azure/azure-storage-cpp/blob/24219e816b088fbb64a359d92ff590245ccf0b90/Microsoft.WindowsAzure.Storage/src/cloud_blob.cpp#L137
要解决此问题,您可以禁用这行代码并手动构建一个库。