diff --git a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala index aa1577058d..38813be899 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSystem.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSystem.scala @@ -13,6 +13,7 @@ import akka.dispatch._ import akka.japi.Util.immutableSeq import akka.actor.dungeon.ChildrenContainer import akka.util._ +import akka.util.Helpers.toRootLowerCase import scala.annotation.tailrec import scala.collection.immutable import scala.concurrent.duration.{ Duration } @@ -180,7 +181,7 @@ object ActorSystem { final val LoggingFilter: String = getString("akka.logging-filter") final val LoggerStartTimeout: Timeout = Timeout(config.getMillisDuration("akka.logger-startup-timeout")) final val LogConfigOnStart: Boolean = config.getBoolean("akka.log-config-on-start") - final val LogDeadLetters: Int = config.getString("akka.log-dead-letters").toLowerCase(Locale.ROOT) match { + final val LogDeadLetters: Int = toRootLowerCase(config.getString("akka.log-dead-letters")) match { case "off" | "false" ⇒ 0 case "on" | "true" ⇒ Int.MaxValue case _ ⇒ config.getInt("akka.log-dead-letters") diff --git a/akka-actor/src/main/scala/akka/event/Logging.scala b/akka-actor/src/main/scala/akka/event/Logging.scala index de95d0aaa0..587f31c0c6 100644 --- a/akka-actor/src/main/scala/akka/event/Logging.scala +++ b/akka-actor/src/main/scala/akka/event/Logging.scala @@ -11,6 +11,7 @@ import akka.actor.ActorSystem.Settings import akka.actor._ import akka.dispatch.RequiresMessageQueue import akka.util.ReentrantGuard +import akka.util.Helpers.toRootLowerCase import akka.{ AkkaException, ConfigurationException } import scala.annotation.implicitNotFound @@ -442,7 +443,7 @@ object Logging { * valid inputs are upper or lowercase (not mixed) versions of: * "error", "warning", "info" and "debug" */ - def levelFor(s: String): Option[LogLevel] = s.toLowerCase(Locale.ROOT) match { + def levelFor(s: String): Option[LogLevel] = toRootLowerCase(s) match { case "off" ⇒ Some(OffLevel) case "error" ⇒ Some(ErrorLevel) case "warning" ⇒ Some(WarningLevel) diff --git a/akka-actor/src/main/scala/akka/util/Helpers.scala b/akka-actor/src/main/scala/akka/util/Helpers.scala index d4318f09a1..bd9add550b 100644 --- a/akka-actor/src/main/scala/akka/util/Helpers.scala +++ b/akka-actor/src/main/scala/akka/util/Helpers.scala @@ -14,7 +14,9 @@ import java.util.Locale object Helpers { - val isWindows: Boolean = System.getProperty("os.name", "").toLowerCase(Locale.ROOT).indexOf("win") >= 0 + def toRootLowerCase(s: String) = s.toLowerCase(Locale.ROOT) + + val isWindows: Boolean = toRootLowerCase(System.getProperty("os.name", "")).indexOf("win") >= 0 def makePattern(s: String): Pattern = Pattern.compile("^\\Q" + s.replace("?", "\\E.\\Q").replace("*", "\\E.*\\Q") + "\\E$") diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala index 711e7de8da..ed9731de03 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterSettings.scala @@ -11,8 +11,7 @@ import scala.concurrent.duration.Duration import akka.actor.Address import akka.actor.AddressFromURIString import akka.dispatch.Dispatchers -import akka.util.Helpers.Requiring -import akka.util.Helpers.ConfigOps +import akka.util.Helpers.{Requiring, ConfigOps, toRootLowerCase} import scala.concurrent.duration.FiniteDuration import akka.japi.Util.immutableSeq @@ -40,7 +39,7 @@ final class ClusterSettings(val config: Config, val systemName: String) { val SeedNodeTimeout: FiniteDuration = cc.getMillisDuration("seed-node-timeout") val RetryUnsuccessfulJoinAfter: Duration = { val key = "retry-unsuccessful-join-after" - cc.getString(key).toLowerCase(Locale.ROOT) match { + toRootLowerCase(cc.getString(key)) match { case "off" ⇒ Duration.Undefined case _ ⇒ cc.getMillisDuration(key) requiring (_ > Duration.Zero, key + " > 0s, or off") } @@ -54,7 +53,7 @@ final class ClusterSettings(val config: Config, val systemName: String) { val UnreachableNodesReaperInterval: FiniteDuration = cc.getMillisDuration("unreachable-nodes-reaper-interval") val PublishStatsInterval: Duration = { val key = "publish-stats-interval" - cc.getString(key).toLowerCase(Locale.ROOT) match { + toRootLowerCase(cc.getString(key)) match { case "off" ⇒ Duration.Undefined case _ ⇒ cc.getMillisDuration(key) requiring (_ >= Duration.Zero, key + " >= 0s, or off") } @@ -63,7 +62,7 @@ final class ClusterSettings(val config: Config, val systemName: String) { // specific to the [[akka.cluster.DefaultDowningProvider]] val AutoDownUnreachableAfter: Duration = { val key = "auto-down-unreachable-after" - cc.getString(key).toLowerCase(Locale.ROOT) match { + toRootLowerCase(cc.getString(key)) match { case "off" ⇒ Duration.Undefined case _ ⇒ cc.getMillisDuration(key) requiring (_ >= Duration.Zero, key + " >= 0s, or off") } @@ -77,7 +76,7 @@ final class ClusterSettings(val config: Config, val systemName: String) { @deprecated("Use Cluster.downingProvider.downRemovalMargin", since = "2.4.5") val DownRemovalMargin: FiniteDuration = { val key = "down-removal-margin" - cc.getString(key).toLowerCase(Locale.ROOT) match { + toRootLowerCase(cc.getString(key)) match { case "off" ⇒ Duration.Zero case _ ⇒ cc.getMillisDuration(key) requiring (_ >= Duration.Zero, key + " >= 0s, or off") } diff --git a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala index 9e067c70be..417d20f565 100644 --- a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala +++ b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala @@ -9,6 +9,7 @@ import scala.concurrent.duration._ import akka.actor._ import akka.pattern.pipe import akka.persistence._ +import akka.util.Helpers.toRootLowerCase import scala.collection.immutable import scala.concurrent.Future import scala.util.{ Failure, Success, Try } @@ -36,7 +37,7 @@ trait AsyncWriteJournal extends Actor with WriteJournalBase with AsyncRecovery { } private val replayFilterMode: ReplayFilter.Mode = - config.getString("replay-filter.mode").toLowerCase(Locale.ROOT) match { + toRootLowerCase(config.getString("replay-filter.mode")) match { case "off" ⇒ ReplayFilter.Disabled case "repair-by-discard-old" ⇒ ReplayFilter.RepairByDiscardOld case "fail" ⇒ ReplayFilter.Fail diff --git a/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala b/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala index f6138bb5fb..5638ac1806 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteSettings.scala @@ -7,8 +7,7 @@ import com.typesafe.config.Config import scala.concurrent.duration._ import akka.util.Timeout import scala.collection.immutable -import akka.util.Helpers.ConfigOps -import akka.util.Helpers.Requiring +import akka.util.Helpers.{ConfigOps, Requiring, toRootLowerCase} import akka.japi.Util._ import akka.actor.Props import akka.event.Logging @@ -29,7 +28,7 @@ final class RemoteSettings(val config: Config) { val TrustedSelectionPaths: Set[String] = immutableSeq(getStringList("akka.remote.trusted-selection-paths")).toSet - val RemoteLifecycleEventsLogLevel: LogLevel = getString("akka.remote.log-remote-lifecycle-events").toLowerCase(Locale.ROOT) match { + val RemoteLifecycleEventsLogLevel: LogLevel = toRootLowerCase(getString("akka.remote.log-remote-lifecycle-events")) match { case "on" ⇒ Logging.DebugLevel case other ⇒ Logging.levelFor(other) match { case Some(level) ⇒ level diff --git a/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala b/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala index 00211faec2..4f06227db3 100644 --- a/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala +++ b/akka-stream/src/main/scala/akka/stream/ActorMaterializer.scala @@ -9,6 +9,7 @@ import java.util.concurrent.atomic.{ AtomicBoolean } import akka.actor.{ ActorContext, ActorRef, ActorRefFactory, ActorSystem, ExtendedActorSystem, Props } import akka.event.LoggingAdapter +import akka.util.Helpers.toRootLowerCase import akka.stream.ActorMaterializerSettings.defaultMaxFixedBufferSize import akka.stream.impl._ import com.typesafe.config.Config @@ -477,7 +478,7 @@ object StreamSubscriptionTimeoutSettings { def apply(config: Config): StreamSubscriptionTimeoutSettings = { val c = config.getConfig("subscription-timeout") StreamSubscriptionTimeoutSettings( - mode = c.getString("mode").toLowerCase(Locale.ROOT) match { + mode = toRootLowerCase(c.getString("mode")) match { case "no" | "off" | "false" | "noop" ⇒ NoopTermination case "warn" ⇒ WarnTermination case "cancel" ⇒ CancelTermination