private static CloudBlob GetBlobReference(CloudBlobDirectory directory, CloudBlob blob) { CloudBlob cloudBlob = null; // [longwen] You can use cloudBlob.BlobType to check the blob type here switch (blob.GetType().Name) { case nameof(CloudBlockBlob): cloudBlob = directory.GetBlockBlobReference(blob.Name); break; case nameof(CloudPageBlob): cloudBlob = directory.GetPageBlobReference(blob.Name); break; case nameof(CloudAppendBlob): cloudBlob = directory.GetAppendBlobReference(blob.Name); break; default: throw new Exception("Unknown CloudBlob type"); } return(cloudBlob); }
public virtual CloudPageBlobEx GetPageBlobReference(string blobName) { if (blobName == null) { throw new ArgumentNullException(nameof(blobName)); } CloudPageBlob[] cloudPageBlobArray = new CloudPageBlob[this.failoverExecutor.AllElements.Length]; for (int i = 0; i < this.failoverExecutor.AllElements.Length; i++) { CloudBlobDirectory directory = this.failoverExecutor.AllElements[i]; CloudPageBlob cloudPageBlob = directory.GetPageBlobReference(blobName); cloudPageBlobArray[i] = cloudPageBlob; } CloudPageBlobEx cloudPageBlobEx = new CloudPageBlobEx(this.Container, this.failoverExecutor.FailoverToken, cloudPageBlobArray); return(cloudPageBlobEx); }
/// <summary> /// <see cref="IDevice.RemoveSegmentAsync(int, AsyncCallback, IAsyncResult)"/> /// </summary> /// <param name="segment"></param> /// <param name="callback"></param> /// <param name="result"></param> public override void RemoveSegmentAsync(int segment, AsyncCallback callback, IAsyncResult result) { CloudPageBlob pageBlob; if (blobs.TryRemove(segment, out BlobEntry blob)) { pageBlob = blob.PageBlob; } else { pageBlob = blobDirectory.GetPageBlobReference(GetSegmentBlobName(segment)); } if (!pageBlob.Exists()) { return; } if (underLease) { BlobManager.ConfirmLeaseAsync().AsTask() .GetAwaiter() .GetResult(); } if (!BlobManager.CancellationToken.IsCancellationRequested) { var t = pageBlob.DeleteAsync(cancellationToken: BlobManager.CancellationToken); t.GetAwaiter().OnCompleted(() => { if (t.IsFaulted) { BlobManager?.HandleBlobError(nameof(RemoveSegmentAsync), "could not remove page blob for segment", pageBlob?.Name, t.Exception, false); } callback(result); }); } }
public void BlobTypesWithStorageUri() { StorageUri endpoint = new StorageUri( new Uri("http://" + AccountName + BlobService + EndpointSuffix), new Uri("http://" + AccountName + SecondarySuffix + BlobService + EndpointSuffix)); CloudBlobClient client = new CloudBlobClient(endpoint, new StorageCredentials()); Assert.IsTrue(endpoint.Equals(client.StorageUri)); Assert.IsTrue(endpoint.PrimaryUri.Equals(client.BaseUri)); StorageUri containerUri = new StorageUri( new Uri(endpoint.PrimaryUri + "container"), new Uri(endpoint.SecondaryUri + "container")); CloudBlobContainer container = client.GetContainerReference("container"); Assert.IsTrue(containerUri.Equals(container.StorageUri)); Assert.IsTrue(containerUri.PrimaryUri.Equals(container.Uri)); Assert.IsTrue(endpoint.Equals(container.ServiceClient.StorageUri)); container = new CloudBlobContainer(containerUri, client.Credentials); Assert.IsTrue(containerUri.Equals(container.StorageUri)); Assert.IsTrue(containerUri.PrimaryUri.Equals(container.Uri)); Assert.IsTrue(endpoint.Equals(container.ServiceClient.StorageUri)); StorageUri directoryUri = new StorageUri( new Uri(containerUri.PrimaryUri + "/directory/"), new Uri(containerUri.SecondaryUri + "/directory/")); StorageUri subdirectoryUri = new StorageUri( new Uri(directoryUri.PrimaryUri + "subdirectory/"), new Uri(directoryUri.SecondaryUri + "subdirectory/")); CloudBlobDirectory directory = container.GetDirectoryReference("directory"); Assert.IsTrue(directoryUri.Equals(directory.StorageUri)); Assert.IsTrue(directoryUri.PrimaryUri.Equals(directory.Uri)); Assert.IsNotNull(directory.Parent); Assert.IsTrue(containerUri.Equals(directory.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(directory.ServiceClient.StorageUri)); CloudBlobDirectory subdirectory = directory.GetDirectoryReference("subdirectory"); Assert.IsTrue(subdirectoryUri.Equals(subdirectory.StorageUri)); Assert.IsTrue(subdirectoryUri.PrimaryUri.Equals(subdirectory.Uri)); Assert.IsTrue(directoryUri.Equals(subdirectory.Parent.StorageUri)); Assert.IsTrue(containerUri.Equals(subdirectory.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(subdirectory.ServiceClient.StorageUri)); StorageUri blobUri = new StorageUri( new Uri(subdirectoryUri.PrimaryUri + "blob"), new Uri(subdirectoryUri.SecondaryUri + "blob")); CloudBlockBlob blockBlob = subdirectory.GetBlockBlobReference("blob"); Assert.IsTrue(blobUri.Equals(blockBlob.StorageUri)); Assert.IsTrue(blobUri.PrimaryUri.Equals(blockBlob.Uri)); Assert.IsTrue(subdirectoryUri.Equals(blockBlob.Parent.StorageUri)); Assert.IsTrue(containerUri.Equals(blockBlob.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(blockBlob.ServiceClient.StorageUri)); blockBlob = new CloudBlockBlob(blobUri, null, client.Credentials); Assert.IsTrue(blobUri.Equals(blockBlob.StorageUri)); Assert.IsTrue(blobUri.PrimaryUri.Equals(blockBlob.Uri)); Assert.IsTrue(subdirectoryUri.Equals(blockBlob.Parent.StorageUri)); Assert.IsTrue(containerUri.Equals(blockBlob.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(blockBlob.ServiceClient.StorageUri)); CloudPageBlob pageBlob = subdirectory.GetPageBlobReference("blob"); Assert.IsTrue(blobUri.Equals(pageBlob.StorageUri)); Assert.IsTrue(blobUri.PrimaryUri.Equals(pageBlob.Uri)); Assert.IsTrue(subdirectoryUri.Equals(pageBlob.Parent.StorageUri)); Assert.IsTrue(containerUri.Equals(pageBlob.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(pageBlob.ServiceClient.StorageUri)); pageBlob = new CloudPageBlob(blobUri, null, client.Credentials); Assert.IsTrue(blobUri.Equals(pageBlob.StorageUri)); Assert.IsTrue(blobUri.PrimaryUri.Equals(pageBlob.Uri)); Assert.IsTrue(subdirectoryUri.Equals(pageBlob.Parent.StorageUri)); Assert.IsTrue(containerUri.Equals(pageBlob.Container.StorageUri)); Assert.IsTrue(endpoint.Equals(pageBlob.ServiceClient.StorageUri)); }