Exemplo n.º 1
0
 protected override async Task SaveAsync(SnapshotMetadata metadata, object snapshot)
 {
     try
     {
         CloudBlobClient    blobClient = _extension.BlobSnapshotStoreSettings.GetBlobClient(metadata.PersistenceId);
         CloudBlobContainer container  = blobClient.GetContainerReference(_extension.BlobSnapshotStoreSettings.ContainerName);
         CloudBlockBlob     blockBlob  = container.GetBlockBlobReference(metadata.PersistenceId + "." + SnapshotVersionHelper.ToVersionKey(metadata.SequenceNr) + ".json");
         var snap = JsonConvert.SerializeObject(new SelectedSnapshot(metadata, snapshot), _settings);
         using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(snap)))
         {
             memoryStream.Position = 0;
             blockBlob.Metadata.Add("SnapshotTimestamp", metadata.Timestamp.Ticks.ToString());
             blockBlob.Metadata.Add("Version", SnapshotVersionHelper.ToVersionKey(metadata.SequenceNr));
             await blockBlob.UploadFromStreamAsync(memoryStream);
         }
     }
     catch (Exception ex)
     {
         _log.Error(ex, ex.Message);
     }
 }
Exemplo n.º 2
0
        protected override async Task DeleteAsync(SnapshotMetadata metadata)
        {
            try
            {
                IEnumerable <CloudBlockBlob> blobs = _extension
                                                     .BlobSnapshotStoreSettings
                                                     .GetBlobClient(metadata.PersistenceId)
                                                     .GetContainerReference(_extension.BlobSnapshotStoreSettings.ContainerName)
                                                     .ListBlobs(metadata.PersistenceId + "." + SnapshotVersionHelper.ToVersionKey(metadata.SequenceNr) + ".json", true, BlobListingDetails.All).Cast <CloudBlockBlob>();

                var deleteTasks = blobs.Select(clob =>
                {
                    _log.Debug("Found snapshot to delete for {0}", metadata.PersistenceId);
                    return(clob.DeleteIfExistsAsync());
                });

                await Task.WhenAll(deleteTasks);
            }
            catch (Exception ex)
            {
                _log.Error(ex, ex.Message);
            }
        }