This is an automated email from the ASF dual-hosted git repository.
fanningpj pushed a commit to branch 1.0.x
in repository https://gitbox.apache.org/repos/asf/incubator-pekko.git
The following commit(s) were added to refs/heads/1.0.x by this push:
new 15aee50172 support reading akka-persistence snapshots (#837)
15aee50172 is described below
commit 15aee501720195d0c986c949343628b422dc38af
Author: PJ Fanning <[email protected]>
AuthorDate: Sat Dec 9 15:57:29 2023 +0100
support reading akka-persistence snapshots (#837)
* support reading akka-persistence snapshots
* add test
* Update SnapshotSerializerSpec.scala
* Update SnapshotSerializerSpec.scala
---
.../serialization/SnapshotSerializer.scala | 10 ++++-
.../serialization/SnapshotSerializerSpec.scala | 48 ++++++++++++++++++++++
2 files changed, 57 insertions(+), 1 deletion(-)
diff --git
a/persistence/src/main/scala/org/apache/pekko/persistence/serialization/SnapshotSerializer.scala
b/persistence/src/main/scala/org/apache/pekko/persistence/serialization/SnapshotSerializer.scala
index d189c77b45..e8e1c11927 100644
---
a/persistence/src/main/scala/org/apache/pekko/persistence/serialization/SnapshotSerializer.scala
+++
b/persistence/src/main/scala/org/apache/pekko/persistence/serialization/SnapshotSerializer.scala
@@ -112,7 +112,15 @@ class SnapshotSerializer(val system: ExtendedActorSystem)
extends BaseSerializer
val (serializerId, manifest) = headerFromBinary(headerBytes)
- serialization.deserialize(snapshotBytes, serializerId, manifest).get
+ // suggested in
https://github.com/scullxbones/pekko-persistence-mongo/pull/14#issuecomment-1847223850
+ serialization
+ .deserialize(snapshotBytes, serializerId, manifest)
+ .recover {
+ case _: NotSerializableException if manifest.startsWith("akka") =>
+ serialization
+ .deserialize(snapshotBytes, serializerId,
manifest.replaceFirst("akka", "org.apache.pekko"))
+ }
+ .get
}
private def writeInt(out: OutputStream, i: Int): Unit = {
diff --git
a/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
b/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
new file mode 100644
index 0000000000..824ff9c51f
--- /dev/null
+++
b/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.pekko.persistence.serialization
+
+import org.apache.pekko
+import pekko.actor.ActorSystem
+import pekko.persistence.fsm.PersistentFSM.PersistentFSMSnapshot
+import pekko.serialization.SerializationExtension
+import pekko.testkit.PekkoSpec
+
+import java.util.Base64
+import scala.util.Success
+
+class SnapshotSerializerSpec extends PekkoSpec {
+
+ "Snapshot serializer" should {
+ "deserialize akka snapshots" in {
+ val system = ActorSystem()
+ val serialization = SerializationExtension(system)
+ //
https://github.com/apache/incubator-pekko/pull/837#issuecomment-1847320309
+ val data =
+
"PAAAAAcAAABha2thLnBlcnNpc3RlbmNlLmZzbS5QZXJzaXN0ZW50RlNNJFBlcnNpc3RlbnRGU01TbmFwc2hvdAoPdGVzdC1pZGVudGlmaWVyEg0IFBIJdGVzdC1kYXRh"
+ val bytes = Base64.getDecoder.decode(data)
+ val result = serialization.deserialize(bytes, classOf[Snapshot]).get
+ val deserialized = result.data
+ deserialized shouldBe a[Success[_]]
+ val innerResult = deserialized.asInstanceOf[Success[_]].get
+ innerResult shouldBe a[PersistentFSMSnapshot[_]]
+ val persistentFSMSnapshot =
innerResult.asInstanceOf[PersistentFSMSnapshot[_]]
+ persistentFSMSnapshot shouldEqual
PersistentFSMSnapshot[String]("test-identifier", "test-data", None)
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]