/// <summary> /// Deletes the snapshot identified by <paramref name="metadata" />. /// This call is protected with a circuit-breaker /// </summary> /// <param name="metadata">TBD</param> /// <returns> /// TBD /// </returns> protected override async Task DeleteAsync(SnapshotMetadata metadata) { IQueryable <SnapshotEntry> query = documentClient.Value.CreateDocumentQuery <SnapshotEntry> (snapShotCollection.Value.SelfLink); query = query.Where(a => a.PersistenceId == metadata.PersistenceId); if (metadata.SequenceNr > 0 && metadata.SequenceNr < long.MaxValue) { query = query.Where(a => a.SequenceNr == metadata.SequenceNr); } if (metadata.Timestamp != DateTime.MinValue && metadata.Timestamp != DateTime.MaxValue) { var dateTimeAsJson = new DateTimeJsonObject(metadata.Timestamp); query = query.Where(a => a.Timestamp.Date == dateTimeAsJson.Date && a.Timestamp.Ticks == dateTimeAsJson.Ticks); } var document = query.ToList().FirstOrDefault(); if (document != null) { await documentClient.Value.DeleteDocumentAsync( UriFactory.CreateDocumentUri(documentDbDatabase.Value.Id, snapShotCollection.Value.Id, document.Id)); } }
public SnapshotEntry(SnapshotMetadata metadata, object snapshot, Akka.Serialization.Serialization serialization) { Snapshot = snapshot; Id = $"{DocumentType}-{metadata.PersistenceId}-{metadata.SequenceNr}"; SequenceNr = metadata.SequenceNr; Timestamp = new DateTimeJsonObject(metadata.Timestamp); PersistenceId = metadata.PersistenceId; Manifest = snapshot.GetType().AssemblyQualifiedName; Serializer serializer = serialization.FindSerializerFor(snapshot); if (serializer != null) { SerializerId = serializer.Identifier; if (serializer is SerializerWithStringManifest) { Manifest = ((SerializerWithStringManifest)serializer).Manifest(snapshot); } if (SerializerId.HasValue && SerializerId.Value == 1) { Snapshot = snapshot; } else { Snapshot = Convert.ToBase64String(serializer.ToBinary(snapshot)); } } }
public SnapshotEntry(SnapshotMetadata metadata, object snapshot) { Snapshot = snapshot; Id = $"{metadata.PersistenceId}_{metadata.SequenceNr}"; SequenceNr = metadata.SequenceNr; Timestamp = new DateTimeJsonObject(metadata.Timestamp); PersistenceId = metadata.PersistenceId; }
private IQueryable <SnapshotEntry> GetSnapshotQuery(string persistenceId, SnapshotSelectionCriteria criteria) { IQueryable <SnapshotEntry> query = documentClient.Value.CreateDocumentQuery <SnapshotEntry>(snapShotCollection.Value.SelfLink); query = query.Where(a => a.PersistenceId == persistenceId); if (criteria.MaxSequenceNr > 0 && criteria.MaxSequenceNr < long.MaxValue) { query = query.Where(a => a.SequenceNr <= criteria.MaxSequenceNr); } if (criteria.MaxTimeStamp != DateTime.MinValue && criteria.MaxTimeStamp != DateTime.MaxValue) { var dateTimeAsJson = new DateTimeJsonObject(criteria.MaxTimeStamp); query = query.Where(a => a.Timestamp.Date < dateTimeAsJson.Date || a.Timestamp.Ticks <= dateTimeAsJson.Ticks); } return(query); }