in src/ccf/ccf-provider-common/AzFileShare.cs [194:280]
public static async Task<string?> FindShareWithLatestSnapshot(
string networkName,
JsonObject providerConfig,
IProgress<string> progress)
{
FileServiceResource fileService = await GetFileService(providerConfig);
FileShareCollection fileShareCollection = fileService.GetFileShares();
AsyncPageable<FileShareResource> response = fileShareCollection.GetAllAsync();
string? latestShareName = null;
string? latestSnapshot = null;
int latestSnapshotSeqNo = 0;
int numberOfShares = 0;
await foreach (FileShareResource fsItem in response)
{
numberOfShares++;
// Get or else Metadata is not populated.
FileShareResource fileShare = await fsItem.GetAsync();
if (!fileShare.Data.Metadata.TryGetValue(CcfNetworkNameKey, out var value) ||
value != networkName)
{
continue;
}
progress.Report(
$"Inspecting file share '{fileShare.Data.Name}' for snapshots.");
var share = await GetShareClient(fileShare.Data.Name, providerConfig);
var dir = share.GetDirectoryClient("snapshots");
List<string> snapshotFiles = new();
if (await dir.ExistsAsync())
{
await foreach (ShareFileItem item in dir.GetFilesAndDirectoriesAsync())
{
progress.Report($"Found file {item.Name} on file share " +
$"'{fileShare.Data.Name}'.");
// fileName = snapshot_13_14.committed.
var fileName = item.Name;
if (fileName.StartsWith("snapshot_") && fileName.EndsWith(".committed"))
{
snapshotFiles.Add(fileName);
}
}
}
string shareName = fileShare.Data.Name;
var latestNodeSnapshot =
snapshotFiles.OrderBy(f => f.PadForNaturalNumberOrdering()).LastOrDefault();
if (latestNodeSnapshot != null)
{
progress.Report(
$"Latest snapshot on share '{shareName}' is: {latestNodeSnapshot}.");
int latestNodeSnapshostSeqNo = int.Parse(latestNodeSnapshot.Split("_")[1]);
if (latestNodeSnapshostSeqNo > latestSnapshotSeqNo)
{
progress.Report(
$"Snapshot '{latestNodeSnapshot}' on share '{shareName}' is the " +
$"latest seen till now. Previous latest was " +
$"'{latestSnapshot}' on share '{latestShareName}'.");
latestSnapshot = latestNodeSnapshot;
latestSnapshotSeqNo = latestNodeSnapshostSeqNo;
latestShareName = shareName;
}
}
else
{
progress.Report($"Did not find any snapshot on share '{shareName}'.");
}
}
if (latestShareName != null)
{
progress.Report(
$"Located latest snapshot with seq no {latestSnapshotSeqNo} on share " +
$"'{latestShareName}': '{latestSnapshot}'.");
}
else
{
progress.Report(
$"Did not locate any latest snapshot for network {networkName}. " +
$"Number of shares inspected: {numberOfShares}.");
}
return latestShareName;
}