diff --git a/akka-persistence-typed/src/main/scala/akka/persistence/typed/PersistenceId.scala b/akka-persistence-typed/src/main/scala/akka/persistence/typed/PersistenceId.scala index fa7a66b040..61500573e3 100644 --- a/akka-persistence-typed/src/main/scala/akka/persistence/typed/PersistenceId.scala +++ b/akka-persistence-typed/src/main/scala/akka/persistence/typed/PersistenceId.scala @@ -130,9 +130,13 @@ object PersistenceId { * If the separator `|` is not found it return the empty String (`""`). */ def extractEntityType(id: String): String = { - val i = id.indexOf(PersistenceId.DefaultSeparator) - if (i == -1) "" - else id.substring(0, i) + if (ReplicationId.isReplicationId(id)) + ReplicationId.fromString(id).typeName + else { + val i = id.indexOf(PersistenceId.DefaultSeparator) + if (i == -1) "" + else id.substring(0, i) + } } /** @@ -140,9 +144,13 @@ object PersistenceId { * If the separator `|` is not found it return the `id`. */ def extractEntityId(id: String): String = { - val i = id.indexOf(PersistenceId.DefaultSeparator) - if (i == -1) id - else id.substring(i + 1) + if (ReplicationId.isReplicationId(id)) + ReplicationId.fromString(id).entityId + else { + val i = id.indexOf(PersistenceId.DefaultSeparator) + if (i == -1) id + else id.substring(i + 1) + } } def unapply(persistenceId: PersistenceId): Option[(String, String)] = diff --git a/akka-persistence-typed/src/test/scala/akka/persistence/typed/PersistenceIdSpec.scala b/akka-persistence-typed/src/test/scala/akka/persistence/typed/PersistenceIdSpec.scala index c250af77d5..77982c7301 100644 --- a/akka-persistence-typed/src/test/scala/akka/persistence/typed/PersistenceIdSpec.scala +++ b/akka-persistence-typed/src/test/scala/akka/persistence/typed/PersistenceIdSpec.scala @@ -54,6 +54,13 @@ class PersistenceIdSpec extends AnyWordSpec with Matchers with LogCapturing { PersistenceId("SomeType", "abc").entityTypeHint should ===("SomeType") } + "be able to extract entityTypeHint from ReplicationId" in { + val replicaId = ReplicationId("SomeType", "abc", ReplicaId("A")) + val pid = replicaId.persistenceId + pid.entityTypeHint should ===("SomeType") + PersistenceId.extractEntityType(pid.id) should ===("SomeType") + } + "be able to extract entityId" in { PersistenceId.extractEntityId("SomeType|abc") should ===("abc") PersistenceId.extractEntityId("abc") should ===("abc") @@ -68,6 +75,13 @@ class PersistenceIdSpec extends AnyWordSpec with Matchers with LogCapturing { case _ => fail() } } + + "be able to extract entityId from ReplicationId" in { + val replicaId = ReplicationId("SomeType", "abc", ReplicaId("A")) + val pid = replicaId.persistenceId + pid.entityId should ===("abc") + PersistenceId.extractEntityId(pid.id) should ===("abc") + } } }