diff --git a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala index 071a8b421e..63c838179f 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Eventsourced.scala @@ -194,6 +194,7 @@ private[persistence] trait Eventsourced extends Snapshotter with PersistenceStas /** INTERNAL API. */ override protected[akka] def aroundPreStart(): Unit = { require(persistenceId ne null, s"persistenceId is [null] for PersistentActor [${self.path}]") + require(persistenceId.trim.nonEmpty, s"persistenceId cannot be empty for PersistentActor [${self.path}]") // Fail fast on missing plugins. val j = journal; val s = snapshotStore diff --git a/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala b/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala index eb16fd1659..fe022a6eee 100644 --- a/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/PersistentActorSpec.scala @@ -692,6 +692,20 @@ abstract class PersistentActorSpec(config: Config) extends PersistenceSpec(confi } } } + "fail fast if persistenceId is an empty string" in { + import akka.testkit.filterEvents + filterEvents(EventFilter[ActorInitializationException]()) { + EventFilter.error(message = "persistenceId cannot be empty for PersistentActor") intercept { + val ref = system.actorOf(Props(new NamedPersistentActor(" ") { + override def receiveRecover: Receive = Actor.emptyBehavior + + override def receiveCommand: Receive = Actor.emptyBehavior + })) + watch(ref) + expectTerminated(ref) + } + } + } "recover from persisted events" in { val persistentActor = namedPersistentActor[Behavior1PersistentActor] persistentActor ! GetState