Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 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());
         }
     }
 }
Exemplo n.º 3
0
        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;
            }
        }