복사 얼룩을 시작하는 데 사용하고 복사가 진행되는 동안 대상 얼룩의 몇 바이트 (예 : 처음 512 바이트)를 읽을 수있었습니다. copy blob을 시작한 코드를보고 복사가 진행되는 동안 처음 512 바이트를 읽습니다.CopyBlob API를 통해 시작된 복사가 진행되는 동안 Azure 얼룩 내용을 읽는 중
이제 blobStream.Read는 데이터 버퍼를 실제 바이트가 아닌 0으로 채 웁니다. 나는 최신 azure storage 클라이언트 lib도 시도했지만 출력은 동일합니다. 그러나 복사가 끝나자 마자 실제 바이트를 읽을 수 있습니다.
누군가가 최신 azure storage 서비스에 도입 된 버그인지 그리고 가능한 해결 방법 (있는 경우)을 알려주십시오.
CloudBlobClient client = CloudStorageAccount.Parse(
string.Format(
"DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2}",
"http",
"<destination-account-name>",
"<destination-account-key>"
)
).CreateCloudBlobClient();
var vhdsContainer = client.GetContainerReference("<destination-container-name>");
CloudBlob destinationBlob = vhdsContainer.GetPageBlobReference("test-1-b5c1d3f4-23d5-40e4-adc7-236553f8d62d-1.vhd");
destinationBlob.StartCopyFromBlob(
new Uri("http://<source-storage>.blob.core.windows.net/<source-container-name>/test-4-d803ca0a-5d98-4be8-8895-2a9d15ec3974-1.vhd"), null, null, null);
CloudBlob destBlob = vhdsContainer.GetBlobReference("test-1-b5c1d3f4-23d5-40e4-adc7-236553f8d62d-1.vhd");
int maxWaitTime = 3*60000;//let's wait for a maximum of 3 minute
do
{
destBlob.FetchAttributes();
if (destBlob.CopyState.BytesCopied > 2048 || maxWaitTime <= 0)
{
break;
}
maxWaitTime -= 1000;
Thread.Sleep(1000);
}
while (true);
var data = new byte[512];
using (BlobStream blobStream = destBlob.OpenRead())
{
blobStream.Seek(0, System.IO.SeekOrigin.Begin);
blobStream.Read(data, 0, 512);
}
안녕 Gaurav, 나는 ~ 30 분을 기다렸습니다. CopyState.BytesCopied에서 32212255232 중 31209816064 바이트를 복사 할 수 있습니다. 즉 96 % 복사가 복사됩니다. 이 경우에도 처음 몇 바이트를 읽으면 0이 반환됩니다. 그러나 복사 완료 후 읽기는 실제 바이트를 반환합니다. 이 시나리오는 최근에이 문제를 보았습니다. –
이상 하네. 끝까지 시험해 봅시다. 사용중인 스토리지 클라이언트 라이브러리의 버전은 무엇입니까? –
나는 1.7과 최신 버전 2.1을 모두 시험해 보았습니다. 2.1을 사용할 때 blob 서비스가 '사전 조건 실패'예외를 throw하지 않도록 if-match 헤더를 *로 설정해야합니다. 내 대답을 참조하십시오 http://stackoverflow.com/questions/5094089/azure-blob-the-condition-specified-using-http-conditional-headers-is-not-met/19278398#19278398 –