Exemplo n.º 1
0
        public AzureAtomicReader(CloudBlobClient storage, IDocumentStrategy strategy)
        {
            _strategy = strategy;
            var folder = strategy.GetEntityBucket <TEntity>();

            _container = storage.GetBlobDirectoryReference(folder);
        }
Exemplo n.º 2
0
        public AzureAtomicWriter(CloudBlobClient directory, IDocumentStrategy strategy)
        {
            _strategy = strategy;
            var folderForEntity = strategy.GetEntityBucket <TEntity>();

            _container = directory.GetBlobDirectoryReference(folderForEntity);
        }
        public void Setup()
        {
            CloudStorageAccount cloudStorageAccount = ConnectionConfig.StorageAccount;

            name                = Guid.NewGuid().ToString().ToLowerInvariant();
            _cloudBlobClient    = cloudStorageAccount.CreateCloudBlobClient();
            _cloudBlobContainer = _cloudBlobClient.GetBlobDirectoryReference(name).Container;
            _cloudBlobContainer.CreateIfNotExist();
            _documentStrategy = new DocumentStrategy(name);
            _writer           = new AzureAtomicWriter <Guid, TestView>(_cloudBlobClient, _documentStrategy);
            _reader           = new AzureAtomicReader <Guid, TestView>(_cloudBlobClient, _documentStrategy);
        }
Exemplo n.º 4
0
        public IEnumerable <IListBlobItem> GetBlobsFromDir(string container, string [] directories)
        {
            string uriDirectories = container;

            foreach (var dirs in directories)
            {
                uriDirectories = uriDirectories + "/" + dirs;
            }

            Uri directoryUri = new Uri(blobClient.BaseUri, uriDirectories);

            var blobDir = blobClient.GetBlobDirectoryReference(directoryUri.ToString());

            return(blobDir.ListBlobs());
        }
Exemplo n.º 5
0
        public void Setup()
        {
            _name = Guid.NewGuid().ToString().ToLowerInvariant();
            CloudStorageAccount cloudStorageAccount = ConnectionConfig.StorageAccount;

            _cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
            var queue     = cloudStorageAccount.CreateCloudQueueClient().GetQueueReference(_name);
            var container = _cloudBlobClient.GetBlobDirectoryReference(_name);

            _blobContainer = _cloudBlobClient.GetContainerReference(_name);
            var poisonQueue = new Lazy <CloudQueue>(() =>
            {
                var queueReference = cloudStorageAccount.CreateCloudQueueClient().GetQueueReference(_name + "-poison");
                queueReference.CreateIfNotExist();
                return(queueReference);
            }, LazyThreadSafetyMode.ExecutionAndPublication);

            _statelessReader = new StatelessAzureQueueReader("azure-read-write-message", queue, container, poisonQueue, TimeSpan.FromMinutes(1));
            _queueReader     = new AzureQueueReader(new[] { _statelessReader }, x => TimeSpan.FromMinutes(x));
            _queueWriter     = new StatelessAzureQueueWriter(_blobContainer, queue, "azure-read-write-message");
            _queueWriter.Init();
        }
Exemplo n.º 6
0
        /// <summary>
        /// Returns the list of entities of type <see cref="T"/>.
        /// </summary>
        /// <returns>The list of entities of type <see cref="T"/>.</returns>
        public List <T> List()
        {
            string    location = @"DalEntityBase.List";
            Stopwatch watch    = Stopwatch.StartNew();

            List <T> result = new List <T>();

            // Use ConcurrentQueue to enable safe enqueueing from multiple threads.
            ConcurrentQueue <Exception> exceptions = new ConcurrentQueue <Exception>();

            try
            {
                CloudBlobClient    client    = this.storageAccount.CreateCloudBlobClient();
                CloudBlobDirectory directory = client.GetBlobDirectoryReference(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", this.container.Name, this.BlobDirectoryName));
                BlobRequestOptions options   = new BlobRequestOptions();
                options.UseFlatBlobListing = true;

                Parallel.ForEach(directory.ListBlobs(), currentBlob =>
                {
                    try
                    {
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            CloudBlob blob = container.GetBlobReference(currentBlob.Uri.ToString());
                            blob.DownloadToStream(memoryStream);
                            memoryStream.Seek(0, SeekOrigin.Begin);

                            BinaryFormatter binaryFormater = new BinaryFormatter();
                            T entity = binaryFormater.Deserialize(memoryStream) as T;
                            if (entity != null)
                            {
                                T finalEntity = this.GetExtended(entity);
                                result.Add(finalEntity);
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        exceptions.Enqueue(exception);
                    }
                });

                if (exceptions.Any())
                {
                    throw new AggregateException(exceptions);
                }
            }
            catch (Exception exception)
            {
                LoggerFactory.Logger.Warning(location, EventId.DALListItems
                                             , "Error while getting the list of items in folder {0} in container {1}: {2}."
                                             , this.BlobDirectoryName, this.container.Name, exception.ToString());
            }
            finally
            {
                watch.Stop();
                LoggerFactory.Logger.Debug(location, "List() for type {0} finished in {1} ms.", typeof(T), watch.ElapsedMilliseconds);
            }

            return(result);
        }
Exemplo n.º 7
0
 public IStreamingContainer GetContainer(string name)
 {
     return(new BlobStreamingContainer(_client.GetBlobDirectoryReference(name)));
 }
Exemplo n.º 8
0
 public IRawViewContainer GetContainer(string containerName)
 {
     return(new AzureViewContainer(_client.GetBlobDirectoryReference(containerName)));
 }
Exemplo n.º 9
0
        public void RemoveFiles(string directoryUri, string storageConnectionString, CancellationToken cancelToken, Action <string> fileDeletedAction, Action <string, Exception> fileFailedAction, Action completedAction)
        {
            storageAccount = CloudStorageAccount.Parse(storageConnectionString);
            blobClient     = storageAccount.CreateCloudBlobClient();

            var directoryPath = directoryUri;
            var searchPattern = string.Empty;
            var lastSegment   = directoryUri.Substring(directoryUri.LastIndexOf("/") + 1);

            if (lastSegment.Contains('*') ||
                lastSegment.Contains('?'))
            {
                directoryPath = directoryUri.Remove(directoryUri.Length - lastSegment.Length);
                searchPattern = lastSegment;

                var blobs = listing.ListBlobs(directoryPath, searchPattern, storageConnectionString, true);
                this.DeleteBlobs(blobs, cancelToken, fileDeletedAction, fileFailedAction);
            }
            else
            {
                try
                {
                    var container = blobClient.GetContainerReference(directoryUri);
                    container.Delete();

                    if (fileDeletedAction != null)
                    {
                        fileDeletedAction(directoryUri);
                    }
                }
                catch (StorageClientException)
                {
                    try
                    {
                        var blob = blobClient.GetBlobReference(directoryUri);
                        blob.Delete();

                        if (fileDeletedAction != null)
                        {
                            fileDeletedAction(directoryUri);
                        }
                    }
                    catch (StorageClientException)
                    {
                        try
                        {
                            var directory = blobClient.GetBlobDirectoryReference(directoryUri);
                            var blobs     = directory.ListBlobs().Select(i => i.Uri.ToString()).ToArray();

                            if (blobs.Length > 0)
                            {
                                this.DeleteBlobs(blobs, cancelToken, fileDeletedAction, fileFailedAction);
                            }
                        }
                        catch (StorageClientException ex)
                        {
                            if (fileFailedAction != null)
                            {
                                fileFailedAction(directoryUri, ex);
                            }
                        }
                    }
                }
            }

            if (completedAction != null)
            {
                completedAction();
            }
        }