2013-05-23 7 views
5

Çok sayıda bloğu bir depolama kabından diğerine kopyaladığım ve bazı lekelerin kopyalandığı bir durum var, ancak kopyalamayı başlattığımdan iki gün sonra hala beklemede.StartCopyFromBlob?

Microsoft.WindowsAzure.StorageClient.StorageClientException : There is currently a pending copy operation. ----> System.Net.WebException : The remote server returned an error: (409) Conflict.

Bu konuda yapabileceğim bir şey var mı: Ben aşağıdaki hatayı alıyorum hedef blob ile bir şey yapmak çalışırsanız gerçeğine dayanarak bu tespiti yapıyorum? Örneğin, gerçeğin ardından kopyasını iptal edebilir miyim?

Kopyalamak için kullanıyorum kopya kod İşte.

try 
{ 
    destinationBlob.StartCopyFromBlob(
     new Uri(sourceBlob.Uri.AbsoluteUri + signature)); 
    System.Diagnostics.Trace.TraceInformation(
     "Copying: {0}", destinationEndpoint.EndpointState.BlobName); 
} 
catch (Exception ex) 
{ 
    var we = ex.InnerException as WebException; 
    if (we != null && we.Status == WebExceptionStatus.ProtocolError) 
    { 
    System.Diagnostics.Trace.TraceError(
      "conflict with blob copy for blob {0}", sourceBlob.Uri.AbsoluteUri); 
     return 0; 
    } 
} 

cevap

8

Zaten Copy Blob operation is now asynchronous olduğunu bildiği gibi. Bu nedenle, blobunda StartCopyFromBlob işlemini çağırdığınızda, Blob Storage Service, kopyalama işlemini bir sıraya koyar. Zaman uyumsuz bir işlem olduğu için ne zaman işleneceğini bilmezsiniz. Anladığım kadarıyla, bunun için maksimum süre 2 hafta 7 gün yani bir kopyalama işlemi en fazla 2 hafta sürebilir 7 gün ve 2 hafta içinde tamamlanmamışsa 7 gün, olacak Hizmet tarafından iptal edildi.

Şimdi sorularınıza dönüşünüz Sanmıyorum

Is there anything i can do about this?

. Sıra önceliğini değiştiremezsiniz.

For example can i abort the copy after the fact?

Evet, yapabilirsiniz. StartCopyFromBlob'u aradığınızda, kopyalama işlemini tanımlayan bir dizeye geri dönersiniz (buna kopya kimliği denir). Bu kopya kimliğini kullanabilir ve bu bloğa AbortCopy numaralı işletmeyi çağırabilirsiniz. Bu kopya kimliğini, FetchAttributes yöntemini kullanarak blob özelliklerini getirerek gerçeğin ardından da alabilirsiniz. İncelemek isteyeceğiniz mülk CopyState'dur.

+0

Mükemmel. sadece bilmek istediğim şey. gerçeği iptal etmek için kopya kimliğini kullanır. çok teşekkürler! – chutch

+0

son bir soru olsa da, kopyalama işlemiyle ilgili olarak sıra önceliğini nasıl değiştiriyorsunuz? Dokümanları aradım ve bu konuda herhangi bir referans göremiyorum. – chutch

+0

Bu benim kötüydü! Sıra önceliğini gerçekten değiştiremezsiniz. Bu nedenle, bir kopyalama işi kuyruğa girdikten sonra, işin bitmesini veya işini AbortCopy kullanarak iptal etmesini beklersiniz. Cevabımı güncelledim. –