protected override async Task <SelectedSnapshot> LoadAsync(string persistenceId, SnapshotSelectionCriteria criteria) { IEnumerable <CloudBlockBlob> blobs = _extension .BlobSnapshotStoreSettings .GetBlobClient(persistenceId) .GetContainerReference(_extension.BlobSnapshotStoreSettings.ContainerName) .ListBlobs(persistenceId, true, BlobListingDetails.All).Cast <CloudBlockBlob>(); var results = blobs.OrderByDescending(t => SnapshotVersionHelper.Parse(t.Name)); if (results.Count() > 0) { _log.Debug("Found {0} snapshots for {1}", results.Count(), persistenceId); foreach (CloudBlockBlob clob in results) { if (SnapshotVersionHelper.Parse(clob.Name) <= criteria.MaxSequenceNr && long.Parse(clob.Metadata["SnapshotTimestamp"]) <= criteria.MaxTimeStamp.Ticks) { using (var memoryStream = new MemoryStream()) { clob.DownloadToStream(memoryStream); var snapshot = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(memoryStream.ToArray()), typeof(SelectedSnapshot), _settings); return((SelectedSnapshot)snapshot); } } } return(null); } else { return(null); } }
private IEnumerable <Task> TryDeleteAsync(string persistenceId, SnapshotSelectionCriteria criteria, IOrderedEnumerable <CloudBlockBlob> results) { foreach (CloudBlockBlob clob in results) { if (SnapshotVersionHelper.Parse(clob.Name) <= criteria.MaxSequenceNr && long.Parse(clob.Metadata["SnapshotTimestamp"]) <= criteria.MaxTimeStamp.Ticks) { _log.Debug("Found snapshot to remove for {0}", persistenceId); yield return(clob.DeleteIfExistsAsync()); } } }
protected override async Task DeleteAsync(string persistenceId, SnapshotSelectionCriteria criteria) { try { IEnumerable <CloudBlockBlob> blobs = _extension .BlobSnapshotStoreSettings .GetBlobClient(persistenceId) .GetContainerReference(_extension.BlobSnapshotStoreSettings.ContainerName) .ListBlobs(persistenceId, true, BlobListingDetails.All).Cast <CloudBlockBlob>(); var results = blobs.OrderByDescending(t => SnapshotVersionHelper.Parse(t.Name)); if (results.Count() > 0) { var deleteTasks = TryDeleteAsync(persistenceId, criteria, results); await Task.WhenAll(deleteTasks); } } catch (Exception ex) { _log.Error(ex, ex.Message); throw; } }