Added throttling to reduce Bamboo peak load and number of concurrent connections

This commit is contained in:
Šesták Vít
2017-06-21 10:18:39 +02:00
parent c55c37fa9a
commit b00857368a
3 changed files with 27 additions and 17 deletions

View File

@@ -14,21 +14,6 @@ import slick.jdbc.TransactionIsolation
import scala.concurrent.{ExecutionContext, Future}
final class SingleFutureExecutionThrottler() (implicit executionContext: ExecutionContext){
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){
def throttle[T](f: => Future[T]): Future[T] = f
}
class VulnerabilityNotificationService @Inject() (protected val dbConfigProvider: DatabaseConfigProvider)(implicit executionContext: ExecutionContext) extends HasDatabaseConfigProvider[models.profile.type]{
import dbConfig.driver.api._
import models.tables._

View 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
}