2013-05-23 16 views
5

Mam sytuację, w której kopiuję wiele obiektów typu blob z jednego kontenera do drugiego, a niektóre z obiektów typu blob zostały skopiowane, ale wiele z nich nadal oczekuje po dwóch dniach od zainicjowania kopii. Robię to określenie na podstawie faktu, że jeśli staram się zrobić coś z docelowym blob otrzymuję poniżej błędu:StartCopyFromBlob w pakiecie Azure SDK 2.0 zajmuje kilka dni?

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

Czy jest coś, co mogę z tym zrobić? Na przykład czy mogę przerwać kopię po fakcie?

Oto kod, którego używam do wykonania kopii.

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; 
    } 
} 

Odpowiedz

8

Jak już wiesz, że Copy Blob operation is now asynchronous. Tak więc po wywołaniu operacji StartCopyFromBlob na obiekcie typu blob usługa Blob Storage Service umieszcza operację kopiowania w kolejce. Ponieważ jest to operacja asynchroniczna, nie wiesz, kiedy zostanie przetworzona. Z tego co rozumiem, że maksymalny czas to 2 tygodnie 7 dni tj. Operacja kopiowania może zająć maksymalnie 2 tygodnie 7 dni, a jeśli nie zostanie zakończona w ciągu 2 tygodni 7 dni, będzie anulowane przez usługę.

Teraz zbliża się do pytania:

Is there anything i can do about this?

Nie sądzę. Nie można zmienić priorytetu kolejki.

For example can i abort the copy after the fact?

Tak, można. Gdy zadzwonisz pod numer StartCopyFromBlob, otrzymasz ciąg znaków, który identyfikuje operację kopiowania (jest to tak zwany identyfikator kopiowania). Możesz użyć tego identyfikatora kopiowania i zadzwonić pod numer AbortCopy na ten obiekt typu blob. Możesz również uzyskać ten identyfikator kopii po fakcie, pobierając właściwości blobu przy użyciu metody FetchAttributes. Właściwością, którą chcesz sprawdzić, jest CopyState.

+0

doskonały. tylko to, co muszę wiedzieć. użyje id identyfikatora, aby przerwać po fakcie. dzięki wielkie! – chutch

+0

Jeszcze jedno pytanie, jak zmienić priorytet kolejki w odniesieniu do operacji kopiowania? Przeszukałem dokumenty i nie mogę znaleźć żadnego odniesienia do tego. – chutch

+0

To było moje zło! Naprawdę nie możesz zmienić priorytetu kolejki. Tak więc, gdy zadanie kopiowania zostanie umieszczone w kolejce, możesz poczekać na zakończenie zadania lub anulować to zadanie za pomocą AbortCopy. Zaktualizowałem swoją odpowiedź. –

Powiązane problemy