Skip to content

Commit af51fad

Browse files
DataMovement StorageResource construction refactor | Part 1 (Azure#38086)
* removed old rehydration code * "provider" apis added * implement local file StorageResourceProvider * StorageResourceProvider apis async | basic blobs implementation * implement blobstorageresourceprovider "from" methods * move away from constructors to providers. can't make blob resource constructors internal yet without a massive test refactor * provider cred infra * republic local fil resources * undo smaple changes * remove cred functionality from blob provider * restore old rehydration files * tests rehydration * exportapi * unrecord rehydration tests * rename arg * exportapi
1 parent 236b1e2 commit af51fad

11 files changed

+634
-40
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
6+
namespace Azure.Storage.Tests
7+
{
8+
public static class RandomExtensions
9+
{
10+
private const string _alphanumeric = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
11+
12+
public static string NextString(this Random random, int length)
13+
{
14+
var buffer = new char[length];
15+
for (var i = 0; i < length; i++)
16+
{
17+
buffer[i] = _alphanumeric[random.Next(_alphanumeric.Length)];
18+
}
19+
return new string(buffer);
20+
}
21+
}
22+
}

sdk/storage/Azure.Storage.DataMovement.Blobs/api/Azure.Storage.DataMovement.Blobs.net6.0.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,19 @@ public BlobContainerClientTransferOptions() { }
4141
public Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions BlobContainerOptions { get { throw null; } set { } }
4242
public Azure.Storage.DataMovement.DataTransferOptions TransferOptions { get { throw null; } set { } }
4343
}
44+
public partial class BlobsStorageResourceProvider : Azure.Storage.DataMovement.StorageResourceProvider
45+
{
46+
public BlobsStorageResourceProvider() { }
47+
protected override string TypeId { get { throw null; } }
48+
public Azure.Storage.DataMovement.StorageResource FromBlob(string blobUri, Azure.Storage.DataMovement.Blobs.BlobStorageResourceOptions options = null) { throw null; }
49+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.BlobContainerClient client, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { throw null; }
50+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.AppendBlobClient client, Azure.Storage.DataMovement.Blobs.AppendBlobStorageResourceOptions options = null) { throw null; }
51+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.BlockBlobClient client, Azure.Storage.DataMovement.Blobs.BlockBlobStorageResourceOptions options = null) { throw null; }
52+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.PageBlobClient client, Azure.Storage.DataMovement.Blobs.PageBlobStorageResourceOptions options = null) { throw null; }
53+
public Azure.Storage.DataMovement.StorageResource FromContainer(string containerUri, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { throw null; }
54+
protected override System.Threading.Tasks.Task<Azure.Storage.DataMovement.StorageResource> FromDestinationAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; }
55+
protected override System.Threading.Tasks.Task<Azure.Storage.DataMovement.StorageResource> FromSourceAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; }
56+
}
4457
public partial class BlobStorageResourceContainer : Azure.Storage.DataMovement.StorageResourceContainer
4558
{
4659
public BlobStorageResourceContainer(Azure.Storage.Blobs.BlobContainerClient blobContainerClient, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { }

sdk/storage/Azure.Storage.DataMovement.Blobs/api/Azure.Storage.DataMovement.Blobs.netstandard2.0.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,19 @@ public BlobContainerClientTransferOptions() { }
4141
public Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions BlobContainerOptions { get { throw null; } set { } }
4242
public Azure.Storage.DataMovement.DataTransferOptions TransferOptions { get { throw null; } set { } }
4343
}
44+
public partial class BlobsStorageResourceProvider : Azure.Storage.DataMovement.StorageResourceProvider
45+
{
46+
public BlobsStorageResourceProvider() { }
47+
protected override string TypeId { get { throw null; } }
48+
public Azure.Storage.DataMovement.StorageResource FromBlob(string blobUri, Azure.Storage.DataMovement.Blobs.BlobStorageResourceOptions options = null) { throw null; }
49+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.BlobContainerClient client, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { throw null; }
50+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.AppendBlobClient client, Azure.Storage.DataMovement.Blobs.AppendBlobStorageResourceOptions options = null) { throw null; }
51+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.BlockBlobClient client, Azure.Storage.DataMovement.Blobs.BlockBlobStorageResourceOptions options = null) { throw null; }
52+
public Azure.Storage.DataMovement.StorageResource FromClient(Azure.Storage.Blobs.Specialized.PageBlobClient client, Azure.Storage.DataMovement.Blobs.PageBlobStorageResourceOptions options = null) { throw null; }
53+
public Azure.Storage.DataMovement.StorageResource FromContainer(string containerUri, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { throw null; }
54+
protected override System.Threading.Tasks.Task<Azure.Storage.DataMovement.StorageResource> FromDestinationAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; }
55+
protected override System.Threading.Tasks.Task<Azure.Storage.DataMovement.StorageResource> FromSourceAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; }
56+
}
4457
public partial class BlobStorageResourceContainer : Azure.Storage.DataMovement.StorageResourceContainer
4558
{
4659
public BlobStorageResourceContainer(Azure.Storage.Blobs.BlobContainerClient blobContainerClient, Azure.Storage.DataMovement.Blobs.BlobStorageResourceContainerOptions options = null) { }

sdk/storage/Azure.Storage.DataMovement.Blobs/src/BlobContainerClientExtensions.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ namespace Azure.Storage.Blobs
1515
public static class BlobContainerClientExtensions
1616
{
1717
private static Lazy<TransferManager> s_defaultTransferManager = new Lazy<TransferManager>(() => new TransferManager(default));
18+
private static Lazy<LocalFilesStorageResourceProvider> s_filesProvider = new();
19+
private static Lazy<BlobsStorageResourceProvider> s_blobsProvider = new();
1820

1921
/// <summary>
2022
/// Uploads the entire contents of local directory to the blob container.
@@ -47,8 +49,8 @@ public static Task<DataTransfer> StartUploadDirectoryAsync(
4749
/// <returns>A <see cref="DataTransfer"/> instance which can be used track progress and wait for completion with <see cref="DataTransfer.WaitForCompletionAsync"/>.</returns>
4850
public static async Task<DataTransfer> StartUploadDirectoryAsync(this BlobContainerClient client, string localDirectoryPath, BlobContainerClientTransferOptions options)
4951
{
50-
StorageResourceContainer localDirectory = new LocalDirectoryStorageResourceContainer(localDirectoryPath);
51-
StorageResourceContainer blobDirectory = new BlobStorageResourceContainer(client, options?.BlobContainerOptions);
52+
StorageResource localDirectory = s_filesProvider.Value.FromPath(localDirectoryPath);
53+
StorageResource blobDirectory = s_blobsProvider.Value.FromClient(client, options?.BlobContainerOptions);
5254

5355
return await s_defaultTransferManager.Value.StartTransferAsync(localDirectory, blobDirectory, options?.TransferOptions).ConfigureAwait(false);
5456
}
@@ -84,8 +86,8 @@ public static Task<DataTransfer> StartDownloadToDirectoryAsync(
8486
/// <returns></returns>
8587
public static async Task<DataTransfer> StartDownloadToDirectoryAsync(this BlobContainerClient client, string localDirectoryPath, BlobContainerClientTransferOptions options)
8688
{
87-
StorageResourceContainer localDirectory = new LocalDirectoryStorageResourceContainer(localDirectoryPath);
88-
StorageResourceContainer blobDirectory = new BlobStorageResourceContainer(client, options?.BlobContainerOptions);
89+
StorageResource localDirectory = s_filesProvider.Value.FromPath(localDirectoryPath);
90+
StorageResource blobDirectory = s_blobsProvider.Value.FromClient(client, options?.BlobContainerOptions);
8991

9092
return await s_defaultTransferManager.Value.StartTransferAsync(blobDirectory, localDirectory, options?.TransferOptions).ConfigureAwait(false);
9193
}

0 commit comments

Comments
 (0)