UNPKG

azure-storage

Version:

Microsoft Azure Storage Client Library for Node.js

181 lines (147 loc) 5.38 kB
// // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // limitations under the License. // /** * Demonstrates how to define a customized retry policy. * * In this sample, we define a customized retry policy which retries on the "The specified container is being deleted" * exception besides the server exceptions. * * Note that only in the cloud(not the storage emulator), "The specified container is being deleted" exceptions will be * sent if users immediately recreate a container after delete it. */ var fs = require('fs'); if (!fs.existsSync) { fs.existsSync = require('path').existsSync; } var azure; if (fs.existsSync('absolute path to azure-storage.js')) { azure = require('absolute path to azure-storage'); } else { azure = require('azure-storage'); } var RetryPolicyFilter = azure.RetryPolicyFilter; var LocationMode = azure.StorageUtilities.LocationMode; var container = 'customretrypolicysample'; var blobService; function setRetryPolicy() { console.log('Starting continuationSample.'); // Step 1 : Set the retry policy to customized retry policy which will // not retry on any failing status code other than the excepted one. var retryOnContainerBeingDeleted = new RetryPolicyFilter(); retryOnContainerBeingDeleted.retryCount = 5; retryOnContainerBeingDeleted.retryInterval = 5000; retryOnContainerBeingDeleted.shouldRetry = function(statusCode, retryData) { console.log(' Made the request at ' + new Date().toUTCString() + ', received StatusCode: ' + statusCode); retryInfo = {}; // retries on any bad status code other than 409 if (statusCode >= 300 && statusCode != 409 && statusCode != 500) { retryInfo.retryable = false; } else { var currentCount = (retryData && retryData.retryCount) ? retryData.retryCount : 0; var retryInfo = { retryInterval: this.retryInterval + 2000 * currentCount, retryable: currentCount < this.retryCount, }; } return retryInfo; }; blobService = azure.createBlobService().withFilter(retryOnContainerBeingDeleted); // optionally set a proxy /*var proxy = { protocol: 'http:', host: '127.0.0.1', port: 8888 }; blobService.setProxy(proxy);*/ // Step 2: Create the container createContainer(function () { // Step 3: Fetch attributes from the container using LocationMode.SECONDARY_THEN_PRIMARY fetchAttributesContainer(function () { // Step 4: Lease the container leaseContainer(function () { // Step 5: Lease the container again, retrying until it succeeds leaseContainer(function () { // Step 6: Delete the container deleteContainer(function () { console.log('Ending continuationSample.'); }); }); }); }); }); } function createContainer (callback) { console.log('Entering createContainer.'); // Create the container. blobService.createContainerIfNotExists(container, function (error, containerResult) { if (error) { console.log(error); } else { console.log(' Container info ' + containerResult.headers); console.log('Created the container ' + container); callback(); } }); } function fetchAttributesContainer (callback) { console.log('Entering fetchAttributesContainer.'); var options = { locationMode: LocationMode.SECONDARY_THEN_PRIMARY }; // Get the properties of the container. blobService.getContainerProperties(container, options, function(error) { if (error) { console.log(error); } else { console.log('Downloaded container properties from ' + container); callback(); } }); } function leaseContainer(callback) { console.log('Entering leaseContainer.'); // Try to acquire the lease. blobService.acquireLease(container, null, {leaseDuration: 15}, function (error, lease) { if (error) { console.log(error); } else { console.log('Acquired lease from ' + container + ' with leaseid' + lease.id); callback(); } }); } function deleteContainer (callback) { console.log('Entering deleteContainer.'); // Break the lease. blobService.breakLease(container, null, {leaseBreakPeriod: 0}, function (error) { if (error) { console.log(error); } else { console.log(' Broke the lease on the container ' + container); } // Delete the container. blobService.deleteContainer(container, function (error) { if (error) { console.log(error); } else { console.log('Deleted the container ' + container); callback(); } }); }); } setRetryPolicy();