예제 #1
0
        public AzureAtomicReader(CloudBlobClient storageClient, IDocumentStrategy strategy)
        {
            this._strategy = strategy;
            var folder = strategy.GetEntityBucket <TEntity>();

            this._containerDirectory = storageClient.GetBlobDirectory(folder);
            this._logger             = NetcoLogger.GetLogger(this.GetType());
            this._ap = ActionPolicyAsync.From((exception =>
            {
                var storageException = exception as StorageException;
                if (storageException == null)
                {
                    return(false);
                }

                switch (storageException.RequestInformation.HttpStatusCode)
                {
                case ( int )HttpStatusCode.InternalServerError:
                case ( int )HttpStatusCode.ServiceUnavailable:
                    return(true);

                default:
                    return(false);
                }
            })).Retry(200, (ex, i) =>
            {
                this._logger.Log().Trace(ex, "Retrying Azure API GET call: {0}/200", i);
                var secondsDelay = 0.2 + 0.1 * _random.Next(-1, 1);                   // randomize wait time
                Task.Delay(TimeSpan.FromSeconds(secondsDelay)).Wait();
            });
        }
예제 #2
0
        public AzureAtomicWriter(CloudBlobClient storageClient, IDocumentStrategy strategy)
        {
            this._strategy = strategy;
            var folder = strategy.GetEntityBucket <TEntity>();

            this._containerDirectory = storageClient.GetBlobDirectory(folder);
        }
예제 #3
0
 public StatelessAzureQueueReader(
     string name,
     CloudQueue primaryQueue,
     AzureBlobDirectory container,
     Lazy <CloudQueue> poisonQueue,
     TimeSpan visibilityTimeout)
 {
     this._cloudBlob         = container;
     this._queue             = primaryQueue;
     this._posionQueue       = poisonQueue;
     this._queueName         = name;
     this._visibilityTimeout = visibilityTimeout;
 }
예제 #4
0
        public async Task TestUri()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();

            const string       dirName   = "dir";
            CloudBlobDirectory directory = await CreateNonEmptyDirectory(container, dirName);

            AzureBlobDirectory azureBlobDirectory = new AzureBlobDirectory(container.GetDirectoryReference(dirName));

            Assert.AreEqual(directory.Uri.ToString(), azureBlobDirectory.Uri);
        }
예제 #5
0
        public async Task TestGetFile()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();

            CloudBlobDirectory directory = await CreateNonEmptyDirectory(container, "dir");

            await CreateEmptyBlob(directory.GetBlockBlobReference("blob1"));

            AzureBlobDirectory azureBlobDirectory = new AzureBlobDirectory(directory);

            Assert.AreEqual("blob1", (await azureBlobDirectory.GetFile("blob1")).Name);
        }
예제 #6
0
        public async Task TestExists()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();
            await CreateEmptyBlob(container.GetBlockBlobReference("blob1"));

            CloudBlobDirectory directory = await CreateNonEmptyDirectory(container, "dir");

            AzureBlobDirectory azureBlobDirectory = new AzureBlobDirectory(directory);

            Assert.IsTrue(await azureBlobDirectory.Exists());

            await DeleteDirectory(directory);

            Assert.IsFalse(await azureBlobDirectory.Exists());
        }
예제 #7
0
        public async Task TestFiles()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();

            CloudBlobDirectory directory = container.GetDirectoryReference("dir");

            await Task.WhenAll(
                CreateEmptyBlob(directory.GetBlockBlobReference("blob1")),
                CreateEmptyBlob(directory.GetBlockBlobReference("blob2")));

            AzureBlobDirectory   azureBlobDirectory = new AzureBlobDirectory(directory);
            IEnumerable <string> files = (await azureBlobDirectory.ListFiles()).Select(d => d.Name);

            Assert.AreEqual(2, files.Count());
            Assert.IsTrue(files.Contains("blob1"));
            Assert.IsTrue(files.Contains("blob2"));
        }
예제 #8
0
        public async Task TestDirectories()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();

            CloudBlobDirectory directory = await CreateNonEmptyDirectory(container, "dir");

            await Task.WhenAll(
                CreateNonEmptyDirectory(directory, "dir1"),
                CreateNonEmptyDirectory(directory, "dir2"));

            AzureBlobDirectory   azureBlobDirectory = new AzureBlobDirectory(directory);
            IEnumerable <string> directories        = (await azureBlobDirectory.ListDirectories()).Select(d => d.Name);

            Assert.AreEqual(2, directories.Count());
            Assert.IsTrue(directories.Contains("dir1"));
            Assert.IsTrue(directories.Contains("dir2"));
        }
예제 #9
0
        public async Task TestDownload()
        {
            CloudBlobContainer container = _blobClient.GetContainerReference("container");

            container.CreateIfNotExists();

            CloudBlobDirectory directory = await CreateNonEmptyDirectory(container, "dir");

            AzureBlobDirectory azureBlobDirectory = new AzureBlobDirectory(directory);

            string path = Path.Combine(Path.GetTempPath(), "azureblobdirectorydownloadtest");

            if (Directory.Exists(path))
            {
                Directory.Delete(path, recursive: true);
            }

            await azureBlobDirectory.Download(path);

            Assert.IsTrue(Directory.Exists(path));
        }
예제 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BlobStreamingContainer"/> class.
 /// </summary>
 /// <param name="directory">The directory.</param>
 public BlobStreamingContainer(AzureBlobDirectory directory)
 {
     this._directory = directory;
 }