mirror of
https://github.com/ysoftdevs/odc-analyzer.git
synced 2026-04-27 10:57:16 +02:00
Added throttling to reduce Bamboo peak load and number of concurrent connections
This commit is contained in:
22
app/services/throttlers.scala
Normal file
22
app/services/throttlers.scala
Normal file
@@ -0,0 +1,22 @@
|
||||
package services
|
||||
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
trait Throttler {
|
||||
def throttle[T](f: => Future[T]): Future[T]
|
||||
}
|
||||
|
||||
final class SingleFutureExecutionThrottler() (implicit executionContext: ExecutionContext) extends Throttler{
|
||||
private var nextFuture: Future[_] = Future.successful(null)
|
||||
|
||||
def throttle[T](f: => Future[T]): Future[T] = synchronized{
|
||||
val newFuture = nextFuture.recover{ case _ => null}.flatMap(_ => f)
|
||||
nextFuture = newFuture
|
||||
newFuture
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final class NoThrottler() (implicit executionContext: ExecutionContext) extends Throttler{
|
||||
def throttle[T](f: => Future[T]): Future[T] = f
|
||||
}
|
||||
Reference in New Issue
Block a user