2013-05-23 5 views
5

मेरे पास एक ऐसी स्थिति है जहां मैं एक स्टोरेज कंटेनर से दूसरे ब्लॉब्स की प्रतिलिपि बना रहा हूं और कुछ ब्लॉब्स की प्रतिलिपि बनाई गई है, लेकिन कॉपी की शुरुआत के बाद से उनमें से बहुत से दो दिनों के बाद लंबित हैं।Azure SDK 2.0 में StartCopyFromBlob दिन ले रहे हैं?

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

क्या मैं इस बारे में कुछ कर सकते हैं: मैं तथ्य यह है कि अगर मैं गंतव्य ब्लॉब मैं नीचे त्रुटि हो रही है के साथ कुछ भी करने की कोशिश के आधार पर यह निर्धारण करने कर रहा हूँ? उदाहरण के लिए मैं इस तथ्य के बाद प्रतिलिपि रोक सकता हूं?

यहां कॉपी कोड है जिसका उपयोग मैं प्रतिलिपि करने के लिए कर रहा हूं।

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

उत्तर

8

आप पहले से ही है कि Copy Blob operation is now asynchronous जानते हैं। इस प्रकार जब आप ब्लॉब पर StartCopyFromBlob ऑपरेशन को कॉल करते हैं, तो ब्लॉब स्टोरेज सर्विस कॉपी ऑपरेशन को कतार में रखती है। चूंकि यह एक एसिंक ऑपरेशन है, इसलिए आपको पता नहीं चलेगा कि इसे कब संसाधित किया जाएगा। जो मैं समझता हूं, उससे अधिकतम समय 2 सप्ताह 7 दिन यानी एक प्रतिलिपि अधिकतम 2 सप्ताह 7 दिन ले सकता है और यदि यह 2 सप्ताह 7 दिनों में पूरा नहीं हुआ है, तो यह होगा सेवा द्वारा रद्द कर दिया गया।

अब आपके प्रश्नों के लिए आ रहा:

Is there anything i can do about this?

मैं ऐसा नहीं सोचता। आप कतार प्राथमिकता नहीं बदल सकते हैं।

For example can i abort the copy after the fact?

हाँ, आप कर सकते हैं। जब आप StartCopyFromBlob पर कॉल करते हैं, तो आप एक स्ट्रिंग वापस लेते हैं जो कॉपी ऑपरेशन की पहचान करता है (इसे कॉपी आईडी कहा जाता है)। आप इस प्रतिलिपि आईडी का उपयोग कर सकते हैं और उस ब्लॉब पर ऑपरेशन को कॉल कर सकते हैं। FetchAttributes विधि का उपयोग करके ब्लॉब गुणों को प्राप्त करके आप इस प्रतिलिपि आईडी को भी प्राप्त कर सकते हैं। जिस संपत्ति का आप निरीक्षण करना चाहते हैं वह CopyState है।

+0

सही। बस मुझे क्या पता होना चाहिए। तथ्य के बाद निरस्त करने के लिए प्रतिलिपि आईडी का उपयोग करेंगे। बहुत धन्यवाद! – chutch

+0

हालांकि एक आखिरी सवाल है, आप कॉपी ऑपरेशन के संबंध में कतार प्राथमिकता कैसे बदलते हैं? मैंने दस्तावेज़ों की खोज की है और इस बारे में कोई संदर्भ नहीं दिख रहा है। – chutch

+0

वह मेरा बुरा था! आप वास्तव में कतार प्राथमिकता नहीं बदल सकते हैं। तो एक बार प्रतिलिपि नौकरी कतारबद्ध हो जाने के बाद, आप या तो नौकरी खत्म करने या AbortCopy का उपयोग करके उस नौकरी को रद्द करने की प्रतीक्षा करते हैं। मैंने अपना जवाब अपडेट कर लिया है। –

संबंधित मुद्दे