Exemple #1
0
        /// <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;
 }
Exemple #4
0
        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);
        }