2014-05-20 16:02:09 +02:00
|
|
|
/**
|
|
|
|
|
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
|
|
|
|
|
*/
|
|
|
|
|
package akka.stream
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a strategy that decides how to deal with a buffer that is full but is about to receive a new element.
|
|
|
|
|
*/
|
|
|
|
|
sealed abstract class OverflowStrategy
|
|
|
|
|
|
|
|
|
|
object OverflowStrategy {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INTERNAL API
|
|
|
|
|
*/
|
|
|
|
|
private[akka] final case object DropHead extends OverflowStrategy
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INTERNAL API
|
|
|
|
|
*/
|
|
|
|
|
private[akka] final case object DropTail extends OverflowStrategy
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INTERNAL API
|
|
|
|
|
*/
|
|
|
|
|
private[akka] final case object DropBuffer extends OverflowStrategy
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INTERNAL API
|
|
|
|
|
*/
|
|
|
|
|
private[akka] final case object Backpressure extends OverflowStrategy
|
|
|
|
|
|
2014-10-22 11:05:38 +02:00
|
|
|
/**
|
|
|
|
|
* INTERNAL API
|
|
|
|
|
*/
|
2015-01-30 10:30:56 +01:00
|
|
|
private[akka] final case object Fail extends OverflowStrategy {
|
2014-10-22 11:05:38 +02:00
|
|
|
final case class BufferOverflowException(msg: String) extends RuntimeException(msg)
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-20 16:02:09 +02:00
|
|
|
/**
|
|
|
|
|
* If the buffer is full when a new element arrives, drops the oldest element from the buffer to make space for
|
|
|
|
|
* the new element.
|
|
|
|
|
*/
|
|
|
|
|
def dropHead: OverflowStrategy = DropHead
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If the buffer is full when a new element arrives, drops the youngest element from the buffer to make space for
|
|
|
|
|
* the new element.
|
|
|
|
|
*/
|
|
|
|
|
def dropTail: OverflowStrategy = DropTail
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If the buffer is full when a new element arrives, drops all the buffered elements to make space for the new element.
|
|
|
|
|
*/
|
|
|
|
|
def dropBuffer: OverflowStrategy = DropBuffer
|
|
|
|
|
|
|
|
|
|
/**
|
2014-07-22 12:21:53 +02:00
|
|
|
* If the buffer is full when a new element is available this strategy backpressures the upstream publisher until
|
2014-05-20 16:02:09 +02:00
|
|
|
* space becomes available in the buffer.
|
|
|
|
|
*/
|
|
|
|
|
def backpressure: OverflowStrategy = Backpressure
|
2014-10-22 11:05:38 +02:00
|
|
|
|
|
|
|
|
/**
|
2015-01-30 10:30:56 +01:00
|
|
|
* If the buffer is full when a new element is available this strategy completes the stream with failure.
|
2014-10-22 11:05:38 +02:00
|
|
|
*/
|
2015-01-30 10:30:56 +01:00
|
|
|
def fail: OverflowStrategy = Fail
|
2014-05-20 16:02:09 +02:00
|
|
|
}
|