private JournalEntry ToJournalEntry(IPersistentRepresentation message)
        {
            object payload = message.Payload;

            if (message.Payload is Tagged tagged)
            {
                payload = tagged.Payload;
                message = message.WithPayload(payload); // need to update the internal payload when working with tags
            }


            var serializer = _serialization.FindSerializerFor(message);
            var binary     = serializer.ToBinary(message);


            return(new JournalEntry
            {
                Id = message.PersistenceId + "_" + message.SequenceNr,
                Ordering = new BsonTimestamp(0), // Auto-populates with timestamp
                IsDeleted = message.IsDeleted,
                Payload = binary,
                PersistenceId = message.PersistenceId,
                SequenceNr = message.SequenceNr,
                Manifest = string.Empty, // don't need a manifest here - it's embedded inside the PersistentMessage
                Tags = tagged.Tags?.ToList(),
                SerializerId = null      // don't need a serializer ID here either; only for backwards-comat
            });
        }
Beispiel #2
0
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed

        private (byte[], IImmutableSet <string>) Extract(IPersistentRepresentation pr)
        {
            if (pr.Payload is Tagged tag)
            {
                return(_journalHelper.PersistentToBytes(pr.WithPayload(tag.Payload)), tag.Tags);
            }
            else
            {
                return(_journalHelper.PersistentToBytes(pr), ImmutableHashSet <string> .Empty);
            }
        }
Beispiel #3
0
        public Akka.Util.Try <T> Serialize(IPersistentRepresentation persistentRepr, long timeStamp = 0)
        {
            switch (persistentRepr.Payload)
            {
            case Tagged t:
                return(Serialize(persistentRepr.WithPayload(t.Payload), t.Tags, timeStamp));

            default:
                return(Serialize(persistentRepr,
                                 ImmutableHashSet <string> .Empty, timeStamp));
            }
        }
Beispiel #4
0
        /// <summary>
        /// INTERNAL API
        /// </summary>
        protected IPersistentRepresentation AdaptToJournal(IPersistentRepresentation representation)
        {
            var payload = representation.Payload;
            var adapter = _eventAdapters.Get(payload.GetType());

            // IdentityEventAdapter returns "" as manifest and normally the incoming IPersistentRepresentation
            // doesn't have an assigned manifest, but when WriteMessages is sent directly to the
            // journal for testing purposes we want to preserve the original manifest instead of
            // letting IdentityEventAdapter clearing it out.
            return((Equals(adapter, IdentityEventAdapter.Instance) || adapter is NoopWriteEventAdapter)
                ? representation
                : representation.WithPayload(adapter.ToJournal(payload)).WithManifest(adapter.Manifest(payload)));
        }
Beispiel #5
0
        protected IPersistentRepresentation AdaptToJournal(IPersistentRepresentation representation)
        {
            var payload = representation.Payload;
            var adapter = _eventAdapters.Get(payload.GetType());
            representation = representation.WithPayload(adapter.ToJournal(payload));

            // IdentityEventAdapter returns "" as manifest and normally the incoming PersistentRepr
            // doesn't have an assigned manifest, but when WriteMessages is sent directly to the
            // journal for testing purposes we want to preserve the original manifest instead of
            // letting IdentityEventAdapter clearing it out.
            return Equals(adapter, IdentityEventAdapter.Instance) 
                ? representation
                : representation.WithManifest(adapter.Manifest(payload));
        }
Beispiel #6
0
        private JournalEntry ToJournalEntry(IPersistentRepresentation message)
        {
            object payload = message.Payload;

            if (message.Payload is Tagged tagged)
            {
                payload = tagged.Payload;
                message = message.WithPayload(payload); // need to update the internal payload when working with tags
            }

            // per https://github.com/akkadotnet/Akka.Persistence.MongoDB/issues/107
            // BSON serialization
            if (_settings.LegacySerialization)
            {
                var manifest = string.IsNullOrEmpty(message.Manifest) ? payload.GetType().TypeQualifiedName() : message.Manifest;
                return(new JournalEntry
                {
                    Id = message.PersistenceId + "_" + message.SequenceNr,
                    Ordering = new BsonTimestamp(0), // Auto-populates with timestamp
                    IsDeleted = message.IsDeleted,
                    Payload = payload,
                    PersistenceId = message.PersistenceId,
                    SequenceNr = message.SequenceNr,
                    Manifest = manifest,
                    Tags = tagged.Tags?.ToList(),
                    SerializerId = null // don't need a serializer ID here either; only for backwards-compat
                });
            }

            // default serialization
            var serializer = _serialization.FindSerializerFor(message);
            var binary     = serializer.ToBinary(message);


            return(new JournalEntry
            {
                Id = message.PersistenceId + "_" + message.SequenceNr,
                Ordering = new BsonTimestamp(0), // Auto-populates with timestamp
                IsDeleted = message.IsDeleted,
                Payload = binary,
                PersistenceId = message.PersistenceId,
                SequenceNr = message.SequenceNr,
                Manifest = string.Empty, // don't need a manifest here - it's embedded inside the PersistentMessage
                Tags = tagged.Tags?.ToList(),
                SerializerId = null      // don't need a serializer ID here either; only for backwards-compat
            });
        }