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