You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by ma...@apache.org on 2023/02/22 20:13:59 UTC
[james-project] 02/08: Simplify PerRecipientRateLimit init
This is an automated email from the ASF dual-hosted git repository.
matthieu pushed a commit to branch refactorings-5
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 8e12bd0dc7a3d4bc585b3939b3292fa753cb8023
Author: Matthieu Baechler <ma...@baechler-craftsmanship.fr>
AuthorDate: Thu Feb 9 21:41:05 2023 +0100
Simplify PerRecipientRateLimit init
---
.../scala/org/apache/james/transport/mailets/EntityType.scala | 8 ++++++--
.../james/transport/mailets/PerRecipientRateLimit.scala | 11 ++++-------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
index 4fbbebd009..cf9d87b979 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
@@ -33,11 +33,15 @@ import scala.util.Try
case class KeyPrefix(value: String)
object ConfigurationOps {
+
+ implicit class OptionOps(mailetConfig: MailetConfig) {
+ def getOptionalString(key: String): Option[String] = Option(mailetConfig.getInitParameter(key))
+ }
+
implicit class DurationOps(mailetConfig: MailetConfig) {
- def getDuration(key: String): Option[Duration] = Option(mailetConfig.getInitParameter(key))
+ def getDuration(key: String): Option[Duration] = mailetConfig.getOptionalString(key)
.map(string => DurationParser.parse(string, ChronoUnit.SECONDS))
}
-
}
diff --git a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
index 0e0a4b16a9..13b0f17fb7 100644
--- a/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
+++ b/server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
@@ -28,7 +28,7 @@ import javax.inject.Inject
import org.apache.james.core.MailAddress
import org.apache.james.lifecycle.api.LifecycleUtil
import org.apache.james.rate.limiter.api.{AcceptableRate, RateExceeded, RateLimiter, RateLimiterFactory, RateLimitingKey, RateLimitingResult}
-import org.apache.james.transport.mailets.ConfigurationOps.DurationOps
+import org.apache.james.transport.mailets.ConfigurationOps.{DurationOps, OptionOps}
import org.apache.james.util.ReactorUtils.DEFAULT_CONCURRENCY
import org.apache.mailet.base.GenericMailet
import org.apache.mailet.{Mail, ProcessingState}
@@ -100,15 +100,12 @@ class PerRecipientRateLimit @Inject()(rateLimiterFactory: RateLimiterFactory) ex
override def init(): Unit = {
val duration: Duration = parseDuration()
val precision: Option[Duration] = getMailetConfig.getDuration("precision")
- val keyPrefix: Option[KeyPrefix] = Option(getInitParameter("keyPrefix")).map(KeyPrefix)
- exceededProcessor = getInitParameter("exceededProcessor", Mail.ERROR)
+ val keyPrefix: Option[KeyPrefix] = getMailetConfig.getOptionalString("keyPrefix").map(KeyPrefix)
+ exceededProcessor = getMailetConfig.getOptionalString("exceededProcessor").getOrElse(Mail.ERROR)
def perRecipientRateLimiter(entityType: EntityType): Option[PerRecipientRateLimiter] = createRateLimiter(entityType, duration, precision, rateLimiterFactory, keyPrefix)
- rateLimiters = Seq(perRecipientRateLimiter(Size),
- perRecipientRateLimiter(Count))
- .filter(limiter => limiter.isDefined)
- .map(limiter => limiter.get)
+ rateLimiters = Seq(Size, Count).flatMap(perRecipientRateLimiter)
}
override def service(mail: Mail): Unit = {
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org