Skip to content

Commit

Permalink
=per akka#15131 Make LocalSnapshotStore fail if it can't create targe…
Browse files Browse the repository at this point in the history
…t directory
  • Loading branch information
bantonsson committed Jun 2, 2014
1 parent f0d18cf commit eec1b7c
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,11 @@ private[persistence] class LocalSnapshotStore extends SnapshotStore with ActorLo
}.filter(md criteria.matches(md) && !saving.contains(md)).toVector

override def preStart() {
if (!snapshotDir.exists) snapshotDir.mkdirs()
if (!snapshotDir.isDirectory) {
if (!snapshotDir.mkdirs()) {
throw new IOException(s"Failed to create snapshot directory [${snapshotDir.getCanonicalPath}]")
}
}
super.preStart()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/

package akka.persistence

import akka.testkit.{ ImplicitSender, EventFilter, TestEvent, AkkaSpec }
import java.io.{ IOException, File }
import akka.actor.{ ActorInitializationException, Props, ActorRef }

object SnapshotDirectoryFailureSpec {
val inUseSnapshotPath = "target/inUseSnapshotPath"

class TestProcessor(name: String, probe: ActorRef) extends Processor {

override def processorId: String = name

override def preStart(): Unit = ()

def receive = {
case s: String saveSnapshot(s)
case SaveSnapshotSuccess(md) probe ! md.sequenceNr
case other probe ! other
}
}
}

class SnapshotDirectoryFailureSpec extends AkkaSpec(PersistenceSpec.config("leveldb", "SnapshotDirectoryFailureSpec", extraConfig = Some(
s"""
|akka.persistence.snapshot-store.local.dir = "${SnapshotDirectoryFailureSpec.inUseSnapshotPath}"
""".stripMargin))) with ImplicitSender {

import SnapshotDirectoryFailureSpec._

val file = new File(inUseSnapshotPath)

override protected def atStartup() {
if (!file.createNewFile()) throw new IOException(s"Failed to create test file [${file.getCanonicalFile}]")
}

override protected def afterTermination() {
if (!file.delete()) throw new IOException(s"Failed to delete test file [${file.getCanonicalFile}]")
}

"A local snapshot store configured with an failing directory name " must {
"throw an exception at startup" in {
EventFilter[ActorInitializationException](occurrences = 1).intercept {
val processor = system.actorOf(Props(classOf[TestProcessor], "SnapshotDirectoryFailureSpec-1", testActor))
processor ! "blahonga"
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ object SnapshotSerializationSpec {

class SnapshotSerializationSpec extends AkkaSpec(PersistenceSpec.config("leveldb", "SnapshotSerializationSpec", serialization = "off", extraConfig = Some(
"""
|akka.logelevel = debug
|akka.actor {
| serializers {
| my-snapshot = "akka.persistence.SnapshotSerializationSpec$MySerializer"
Expand Down

0 comments on commit eec1b7c

Please sign in to comment.