public AzureAtomicReader(CloudBlobClient storage, IDocumentStrategy strategy) { _strategy = strategy; var folder = strategy.GetEntityBucket <TEntity>(); _container = storage.GetBlobDirectoryReference(folder); }
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); }
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()); }
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(); }
/// <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); }
public IStreamingContainer GetContainer(string name) { return(new BlobStreamingContainer(_client.GetBlobDirectoryReference(name))); }
public IRawViewContainer GetContainer(string containerName) { return(new AzureViewContainer(_client.GetBlobDirectoryReference(containerName))); }
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(); } }