/// <summary> /// TBD /// </summary> /// <param name="snapshot">TBD</param> /// <param name="command">TBD</param> protected virtual void SetPayloadParameter(object snapshot, DbCommand command) { var snapshotType = snapshot.GetType(); var serializer = Serialization.FindSerializerForType(snapshotType); var binary = serializer.ToBinary(snapshot); AddParameter(command, "@Payload", DbType.Binary, binary); }
private JournalEntry ToJournalEntry(IPersistentRepresentation message) { var payloadType = message.Payload.GetType(); var serializer = _serialization.FindSerializerForType(payloadType); return(new JournalEntry(message.PersistenceId, message.SequenceNr, message.IsDeleted, payloadType.QualifiedTypeName(), serializer.ToBinary(message.Payload))); }
private object GetPayload(DbDataReader reader, string manifest) { var type = Type.GetType(manifest, true); var binary = (byte[])reader[PayloadIndex]; var serializer = _serialization.FindSerializerForType(type); return(serializer.FromBinary(binary, type)); }
private object GetPayload(DbDataReader reader) { var payloadType = reader.GetString(3); var type = Type.GetType(payloadType, true); var binary = (byte[])reader[4]; var serializer = _serialization.FindSerializerForType(type); return(serializer.FromBinary(binary, type)); }
private object GetSnapshot(DbDataReader reader) { var type = Type.GetType(reader.GetString(3), true); var serializer = _serialization.FindSerializerForType(type); var binary = (byte[])reader[4]; var obj = serializer.FromBinary(binary, type); return(obj); }
private Serialization.Snapshot Deserialize(Stream stream) { var buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); var snapshotType = typeof(Serialization.Snapshot); var serializer = _serialization.FindSerializerForType(snapshotType, _defaultSerializer); var snapshot = (Serialization.Snapshot)serializer.FromBinary(buffer, snapshotType); return(snapshot); }
public void MessageSerializer_when_given_payload_serializer_with_string_manifest_should_be_able_to_evolve_the_data_type() { var oldEvent = new MyPayload("a"); var serializer1 = _serialization.FindSerializerFor(oldEvent); var bytes = serializer1.ToBinary(oldEvent); // now the system is updated to version 2 with new class MyPayload2 // and MyPayload2Serializer that handles migration from old MyPayload var serializer2 = _serialization.FindSerializerForType(typeof(MyPayload2)); var deserialized = serializer2.FromBinary(bytes, oldEvent.GetType()); deserialized.ShouldBe(new MyPayload2(".a.", 0)); }
private IPersistentRepresentation Map(JournalEntry e) { var persistenceId = e.PersistenceId; var sequenceNr = e.SequenceNr; var isDeleted = e.IsDeleted; var payloadType = e.PayloadType; var type = Type.GetType(payloadType, true); var serializer = _serialization.FindSerializerForType(type); var payload = serializer.FromBinary(e.Payload, type); return(new Persistent(payload, sequenceNr, persistenceId, isDeleted)); }
protected virtual IPersistentRepresentation ReadEvent(DbDataReader reader) { var persistenceId = reader.GetString(PersistenceIdIndex); var sequenceNr = reader.GetInt64(SequenceNrIndex); var timestamp = reader.GetInt64(TimestampIndex); var isDeleted = reader.GetBoolean(IsDeletedIndex); var manifest = reader.GetString(ManifestIndex); var payload = reader[PayloadIndex]; var type = Type.GetType(manifest, true); var deserializer = Serialization.FindSerializerForType(type); var deserialized = deserializer.FromBinary((byte[])payload, type); return(new Persistent(deserialized, sequenceNr, persistenceId, manifest, isDeleted, ActorRefs.NoSender, null)); }
/// <summary> /// Creates a new <see cref="LocalSnapshotStore"/> instance. /// </summary> public LocalSnapshotStore() { var config = Context.System.Settings.Config.GetConfig("akka.persistence.snapshot-store.local"); _maxLoadAttempts = config.GetInt("max-load-attempts"); _streamDispatcher = Context.System.Dispatchers.Lookup(config.GetString("stream-dispatcher")); _dir = new DirectoryInfo(config.GetString("dir")); _defaultSerializer = config.GetString("serializer"); _serialization = Context.System.Serialization; _wrapperSerializer = _serialization.FindSerializerForType(WrapperType); _saving = new SortedSet <SnapshotMetadata>(SnapshotMetadata.Comparer); // saving in progress _log = Context.GetLogger(); }
public SelectedSnapshot Map(SnapshotEntry e) { if (e == null) { return(null); } var persistenceId = e.PersistenceId; var sequenceNr = e.SequenceNr; var timestamp = e.Timestamp; var metadata = new SnapshotMetadata(persistenceId, sequenceNr, timestamp); var type = Type.GetType(e.SnapshotType, true); var serializer = _serialization.FindSerializerForType(type); var binary = e.Snapshot; var snapshot = serializer.FromBinary(binary, type); return(new SelectedSnapshot(metadata, snapshot)); }
/// <summary> /// Creates a new <see cref="LocalSnapshotStore"/> instance. /// </summary> public LocalSnapshotStore() { var config = Context.System.Settings.Config.GetConfig("akka.persistence.snapshot-store.local"); /* * if (config.IsNullOrEmpty()) * throw new ConfigurationException($"Cannot create {typeof(LocalSnapshotStore)}: akka.persistence.snapshot-store.local configuration node not found"); */ _maxLoadAttempts = config.GetInt("max-load-attempts", 0); _streamDispatcher = Context.System.Dispatchers.Lookup(config.GetString("stream-dispatcher", null)); _dir = new DirectoryInfo(config.GetString("dir", null)); _defaultSerializer = config.GetString("serializer", null); _serialization = Context.System.Serialization; _wrapperSerializer = _serialization.FindSerializerForType(WrapperType); _saving = new SortedSet <SnapshotMetadata>(SnapshotMetadata.Comparer); // saving in progress _log = Context.GetLogger(); }
public void Serialization_must_resolve_DaemonMsgCreateSerializer() { _ser.FindSerializerForType(typeof(DaemonMsgCreate)).GetType().ShouldBe(typeof(DaemonMsgCreateSerializer)); }
private Persistent ToPersistenceRepresentation(JournalEntry entry, IActorRef sender) { if (_settings.LegacySerialization) { var manifest = string.IsNullOrEmpty(entry.Manifest) ? entry.Payload.GetType().TypeQualifiedName() : entry.Manifest; return(new Persistent( entry.Payload, entry.SequenceNr, entry.PersistenceId, manifest, entry.IsDeleted, sender, timestamp: ToTicks(entry.Ordering))); // MongoDb timestamps are stored as Unix Epoch } var legacy = entry.SerializerId.HasValue || !string.IsNullOrEmpty(entry.Manifest); if (!legacy) { var ser = _serialization.FindSerializerForType(typeof(Persistent)); var output = ser.FromBinary <Persistent>((byte[])entry.Payload); // backwards compatibility for https://github.com/akkadotnet/akka.net/pull/4680 // it the timestamp is not defined in the binary payload if (output.Timestamp == 0L) { output = (Persistent)output.WithTimestamp(ToTicks(entry.Ordering)); } return(output); } int? serializerId = null; Type type = null; // legacy serialization if (!entry.SerializerId.HasValue && !string.IsNullOrEmpty(entry.Manifest)) { type = Type.GetType(entry.Manifest, true); } else { serializerId = entry.SerializerId; } if (entry.Payload is byte[] bytes) { object deserialized = null; if (serializerId.HasValue) { deserialized = _serialization.Deserialize(bytes, serializerId.Value, entry.Manifest); } else { var deserializer = _serialization.FindSerializerForType(type); deserialized = deserializer.FromBinary(bytes, type); } if (deserialized is Persistent p) { return((Persistent)p.WithTimestamp(ToTicks(entry.Ordering))); } return(new Persistent(deserialized, entry.SequenceNr, entry.PersistenceId, entry.Manifest, entry.IsDeleted, sender, timestamp: ToTicks(entry.Ordering))); } else // backwards compat for object serialization - Payload was already deserialized by BSON { return(new Persistent(entry.Payload, entry.SequenceNr, entry.PersistenceId, entry.Manifest, entry.IsDeleted, sender, timestamp: ToTicks(entry.Ordering))); } }
private SelectedSnapshot ToSelectedSnapshot(SnapshotEntry entry) { if (_settings.LegacySerialization) { return(new SelectedSnapshot( new SnapshotMetadata( entry.PersistenceId, entry.SequenceNr, new DateTime(entry.Timestamp)), entry.Snapshot)); } var legacy = entry.SerializerId.HasValue || !string.IsNullOrEmpty(entry.Manifest); if (!legacy) { var ser = _serialization.FindSerializerForType(typeof(Serialization.Snapshot)); var snapshot = ser.FromBinary <Serialization.Snapshot>((byte[])entry.Snapshot); return(new SelectedSnapshot(new SnapshotMetadata(entry.PersistenceId, entry.SequenceNr), snapshot.Data)); } int? serializerId = null; Type type = null; // legacy serialization if (!entry.SerializerId.HasValue && !string.IsNullOrEmpty(entry.Manifest)) { type = Type.GetType(entry.Manifest, true); } else { serializerId = entry.SerializerId; } if (entry.Snapshot is byte[] bytes) { object deserialized; if (serializerId.HasValue) { deserialized = _serialization.Deserialize(bytes, serializerId.Value, entry.Manifest); } else { var deserializer = _serialization.FindSerializerForType(type); deserialized = deserializer.FromBinary(bytes, type); } if (deserialized is Serialization.Snapshot snap) { return(new SelectedSnapshot( new SnapshotMetadata(entry.PersistenceId, entry.SequenceNr, new DateTime(entry.Timestamp)), snap.Data)); } return(new SelectedSnapshot( new SnapshotMetadata(entry.PersistenceId, entry.SequenceNr, new DateTime(entry.Timestamp)), deserialized)); } // backwards compat - loaded an old snapshot using BSON serialization. No need to deserialize via Akka.NET return(new SelectedSnapshot( new SnapshotMetadata(entry.PersistenceId, entry.SequenceNr, new DateTime(entry.Timestamp)), entry.Snapshot)); }