Include fan-out operators in the operator index (#27028)
This commit is contained in:
parent
e61703bb4a
commit
eca459e461
12 changed files with 58 additions and 19 deletions
|
|
@ -1,2 +1,4 @@
|
||||||
These have one input and multiple outputs. They might route the elements between different outputs, or emit elements on
|
These have one input and multiple outputs. They might route the elements between different outputs, or emit elements on
|
||||||
multiple outputs at the same time.
|
multiple outputs at the same time.
|
||||||
|
|
||||||
|
There is a number of fan-out operators for which currently no 'fluent' is API available. To use those you will have to use the @ref[Graph DSL](../stream-graphs.md#constructing-graphs).
|
||||||
|
|
|
||||||
|
|
@ -15,3 +15,10 @@ RedirectMatch 301 ^(.*)/project/migration-guide-stream-2\.0-2\.4.html.* $1/proje
|
||||||
RedirectMatch 301 ^(.*)/stream/stages-overview\.html$ $1/stream/operators/index.html
|
RedirectMatch 301 ^(.*)/stream/stages-overview\.html$ $1/stream/operators/index.html
|
||||||
RedirectMatch 301 ^(.*)/agents\.html$ $1/project/migration-guide-2.5.x-2.6.x.html
|
RedirectMatch 301 ^(.*)/agents\.html$ $1/project/migration-guide-2.5.x-2.6.x.html
|
||||||
RedirectMatch 301 ^(.*)/typed-actors\.html$ $1/project/migration-guide-2.5.x-2.6.x.html#typedactor
|
RedirectMatch 301 ^(.*)/typed-actors\.html$ $1/project/migration-guide-2.5.x-2.6.x.html#typedactor
|
||||||
|
|
||||||
|
|
||||||
|
RedirectMatch 301 ^(.*)/stream/operators/Source-or-Flow/balance\.html$ $1/stream/operators/Balance.html
|
||||||
|
RedirectMatch 301 ^(.*)/stream/operators/Source-or-Flow/broadcast\.html$ $1/stream/operators/Broadcast.html
|
||||||
|
RedirectMatch 301 ^(.*)/stream/operators/Source-or-Flow/partition\.html$ $1/stream/operators/Partition.html
|
||||||
|
RedirectMatch 301 ^(.*)/stream/operators/Source-or-Flow/unzip\.html$ $1/stream/operators/unzip.html
|
||||||
|
RedirectMatch 301 ^(.*)/stream/operators/Source-or-Flow/UnzipWith\.html$ $1/stream/operators/UnzipWith.html
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# balance
|
# Balance
|
||||||
|
|
||||||
Fan-out the stream to several streams.
|
Fan-out the stream to several streams.
|
||||||
|
|
||||||
@ref[Fan-out operators](../index.md#fan-out-operators)
|
@ref[Fan-out operators](index.md#fan-out-operators)
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# broadcast
|
# Broadcast
|
||||||
|
|
||||||
Emit each incoming element each of `n` outputs.
|
Emit each incoming element each of `n` outputs.
|
||||||
|
|
||||||
@ref[Fan-out operators](../index.md#fan-out-operators)
|
@ref[Fan-out operators](index.md#fan-out-operators)
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# partition
|
# Partition
|
||||||
|
|
||||||
Fan-out the stream to several streams.
|
Fan-out the stream to several streams.
|
||||||
|
|
||||||
@ref[Fan-out operators](../index.md#fan-out-operators)
|
@ref[Fan-out operators](index.md#fan-out-operators)
|
||||||
|
|
||||||
## Signature
|
## Signature
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Attaches the given `Sink` to this `Flow`, meaning that elements that pass through this `Flow` will also be sent to the `Sink`.
|
Attaches the given `Sink` to this `Flow`, meaning that elements that pass through this `Flow` will also be sent to the `Sink`.
|
||||||
|
|
||||||
@ref[Simple operators](../index.md#simple-operators)
|
@ref[Fan-out operators](../index.md#fan-out-operators)
|
||||||
|
|
||||||
@@@ div { .group-scala }
|
@@@ div { .group-scala }
|
||||||
## Signature
|
## Signature
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Each upstream element will either be diverted to the given sink, or the downstream consumer according to the predicate function applied to the element.
|
Each upstream element will either be diverted to the given sink, or the downstream consumer according to the predicate function applied to the element.
|
||||||
|
|
||||||
@ref[Simple operators](../index.md#simple-operators)
|
@ref[Fan-out operators](../index.md#fan-out-operators)
|
||||||
|
|
||||||
@@@div { .group-scala }
|
@@@div { .group-scala }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Attaches the given `Sink` to this `Flow` as a wire tap, meaning that elements that pass through will also be sent to the wire-tap `Sink`, without the latter affecting the mainline flow.
|
Attaches the given `Sink` to this `Flow` as a wire tap, meaning that elements that pass through will also be sent to the wire-tap `Sink`, without the latter affecting the mainline flow.
|
||||||
|
|
||||||
@ref[Simple operators](../index.md#simple-operators)
|
@ref[Fan-out operators](../index.md#fan-out-operators)
|
||||||
|
|
||||||
@@@div { .group-scala }
|
@@@div { .group-scala }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# unzip
|
# Unzip
|
||||||
|
|
||||||
Takes a stream of two element tuples and unzips the two elements ino two different downstreams.
|
Takes a stream of two element tuples and unzips the two elements ino two different downstreams.
|
||||||
|
|
||||||
@ref[Fan-out operators](../index.md#fan-out-operators)
|
@ref[Fan-out operators](index.md#fan-out-operators)
|
||||||
|
|
||||||
## Signature
|
## Signature
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# unzipWith
|
# UnzipWith
|
||||||
|
|
||||||
Splits each element of input into multiple downstreams using a function
|
Splits each element of input into multiple downstreams using a function
|
||||||
|
|
||||||
|
|
@ -126,12 +126,10 @@ depending on being backpressured by downstream or not.
|
||||||
|
|
||||||
| |Operator|Description|
|
| |Operator|Description|
|
||||||
|--|--|--|
|
|--|--|--|
|
||||||
|Source/Flow|<a name="alsoto"></a>@ref[alsoTo](Source-or-Flow/alsoTo.md)|Attaches the given `Sink` to this `Flow`, meaning that elements that pass through this `Flow` will also be sent to the `Sink`.|
|
|
||||||
|Flow|<a name="asflowwithcontext"></a>@ref[asFlowWithContext](Flow/asFlowWithContext.md)|Turns a Flow into a FlowWithContext which can propagate a context per element along a stream.|
|
|Flow|<a name="asflowwithcontext"></a>@ref[asFlowWithContext](Flow/asFlowWithContext.md)|Turns a Flow into a FlowWithContext which can propagate a context per element along a stream.|
|
||||||
|Source/Flow|<a name="collect"></a>@ref[collect](Source-or-Flow/collect.md)|Apply a partial function to each incoming element, if the partial function is defined for a value the returned value is passed downstream.|
|
|Source/Flow|<a name="collect"></a>@ref[collect](Source-or-Flow/collect.md)|Apply a partial function to each incoming element, if the partial function is defined for a value the returned value is passed downstream.|
|
||||||
|Source/Flow|<a name="collecttype"></a>@ref[collectType](Source-or-Flow/collectType.md)|Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step.|
|
|Source/Flow|<a name="collecttype"></a>@ref[collectType](Source-or-Flow/collectType.md)|Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step.|
|
||||||
|Source/Flow|<a name="detach"></a>@ref[detach](Source-or-Flow/detach.md)|Detach upstream demand from downstream demand without detaching the stream rates.|
|
|Source/Flow|<a name="detach"></a>@ref[detach](Source-or-Flow/detach.md)|Detach upstream demand from downstream demand without detaching the stream rates.|
|
||||||
|Source/Flow|<a name="divertto"></a>@ref[divertTo](Source-or-Flow/divertTo.md)|Each upstream element will either be diverted to the given sink, or the downstream consumer according to the predicate function applied to the element.|
|
|
||||||
|Source/Flow|<a name="drop"></a>@ref[drop](Source-or-Flow/drop.md)|Drop `n` elements and then pass any subsequent element downstream.|
|
|Source/Flow|<a name="drop"></a>@ref[drop](Source-or-Flow/drop.md)|Drop `n` elements and then pass any subsequent element downstream.|
|
||||||
|Source/Flow|<a name="dropwhile"></a>@ref[dropWhile](Source-or-Flow/dropWhile.md)|Drop elements as long as a predicate function return true for the element|
|
|Source/Flow|<a name="dropwhile"></a>@ref[dropWhile](Source-or-Flow/dropWhile.md)|Drop elements as long as a predicate function return true for the element|
|
||||||
|Source/Flow|<a name="filter"></a>@ref[filter](Source-or-Flow/filter.md)|Filter the incoming elements using a predicate.|
|
|Source/Flow|<a name="filter"></a>@ref[filter](Source-or-Flow/filter.md)|Filter the incoming elements using a predicate.|
|
||||||
|
|
@ -160,7 +158,6 @@ depending on being backpressured by downstream or not.
|
||||||
|Source/Flow|<a name="takewhile"></a>@ref[takeWhile](Source-or-Flow/takeWhile.md)|Pass elements downstream as long as a predicate function return true for the element include the element when the predicate first return false and then complete.|
|
|Source/Flow|<a name="takewhile"></a>@ref[takeWhile](Source-or-Flow/takeWhile.md)|Pass elements downstream as long as a predicate function return true for the element include the element when the predicate first return false and then complete.|
|
||||||
|Source/Flow|<a name="throttle"></a>@ref[throttle](Source-or-Flow/throttle.md)|Limit the throughput to a specific number of elements per time unit, or a specific total cost per time unit, where a function has to be provided to calculate the individual cost of each element.|
|
|Source/Flow|<a name="throttle"></a>@ref[throttle](Source-or-Flow/throttle.md)|Limit the throughput to a specific number of elements per time unit, or a specific total cost per time unit, where a function has to be provided to calculate the individual cost of each element.|
|
||||||
|Source/Flow|<a name="watch"></a>@ref[watch](Source-or-Flow/watch.md)|Watch a specific `ActorRef` and signal a failure downstream once the actor terminates.|
|
|Source/Flow|<a name="watch"></a>@ref[watch](Source-or-Flow/watch.md)|Watch a specific `ActorRef` and signal a failure downstream once the actor terminates.|
|
||||||
|Source/Flow|<a name="wiretap"></a>@ref[wireTap](Source-or-Flow/wireTap.md)|Attaches the given `Sink` to this `Flow` as a wire tap, meaning that elements that pass through will also be sent to the wire-tap `Sink`, without the latter affecting the mainline flow.|
|
|
||||||
|
|
||||||
## Flow operators composed of Sinks and Sources
|
## Flow operators composed of Sinks and Sources
|
||||||
|
|
||||||
|
|
@ -257,6 +254,25 @@ the inputs in different ways.
|
||||||
|Source/Flow|<a name="zipwith"></a>@ref[zipWith](Source-or-Flow/zipWith.md)|Combines elements from multiple sources through a `combine` function and passes the returned value downstream.|
|
|Source/Flow|<a name="zipwith"></a>@ref[zipWith](Source-or-Flow/zipWith.md)|Combines elements from multiple sources through a `combine` function and passes the returned value downstream.|
|
||||||
|Source/Flow|<a name="zipwithindex"></a>@ref[zipWithIndex](Source-or-Flow/zipWithIndex.md)|Zips elements of current flow with its indices.|
|
|Source/Flow|<a name="zipwithindex"></a>@ref[zipWithIndex](Source-or-Flow/zipWithIndex.md)|Zips elements of current flow with its indices.|
|
||||||
|
|
||||||
|
## Fan-out operators
|
||||||
|
|
||||||
|
These have one input and multiple outputs. They might route the elements between different outputs, or emit elements on
|
||||||
|
multiple outputs at the same time.
|
||||||
|
|
||||||
|
There is a number of fan-out operators for which currently no 'fluent' is API available. To use those you will have to use the @ref[Graph DSL](../stream-graphs.md#constructing-graphs).
|
||||||
|
|
||||||
|
|
||||||
|
| |Operator|Description|
|
||||||
|
|--|--|--|
|
||||||
|
| |<a name="balance"></a>@ref[Balance](Balance.md)|Fan-out the stream to several streams.|
|
||||||
|
| |<a name="broadcast"></a>@ref[Broadcast](Broadcast.md)|Emit each incoming element each of `n` outputs.|
|
||||||
|
| |<a name="partition"></a>@ref[Partition](Partition.md)|Fan-out the stream to several streams.|
|
||||||
|
| |<a name="unzip"></a>@ref[Unzip](Unzip.md)|Takes a stream of two element tuples and unzips the two elements ino two different downstreams.|
|
||||||
|
| |<a name="unzipwith"></a>@ref[UnzipWith](UnzipWith.md)|Splits each element of input into multiple downstreams using a function|
|
||||||
|
|Source/Flow|<a name="alsoto"></a>@ref[alsoTo](Source-or-Flow/alsoTo.md)|Attaches the given `Sink` to this `Flow`, meaning that elements that pass through this `Flow` will also be sent to the `Sink`.|
|
||||||
|
|Source/Flow|<a name="divertto"></a>@ref[divertTo](Source-or-Flow/divertTo.md)|Each upstream element will either be diverted to the given sink, or the downstream consumer according to the predicate function applied to the element.|
|
||||||
|
|Source/Flow|<a name="wiretap"></a>@ref[wireTap](Source-or-Flow/wireTap.md)|Attaches the given `Sink` to this `Flow` as a wire tap, meaning that elements that pass through will also be sent to the wire-tap `Sink`, without the latter affecting the mainline flow.|
|
||||||
|
|
||||||
## Watching status operators
|
## Watching status operators
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -439,5 +455,10 @@ For more background see the @ref[Error Handling in Streams](../stream-error.md)
|
||||||
* [actorRefWithAck](ActorSource/actorRefWithAck.md)
|
* [actorRefWithAck](ActorSource/actorRefWithAck.md)
|
||||||
* [ask](ActorFlow/ask.md)
|
* [ask](ActorFlow/ask.md)
|
||||||
* [actorRef](ActorSink/actorRef.md)
|
* [actorRef](ActorSink/actorRef.md)
|
||||||
|
* [Partition](Partition.md)
|
||||||
|
* [Broadcast](Broadcast.md)
|
||||||
|
* [Balance](Balance.md)
|
||||||
|
* [Unzip](Unzip.md)
|
||||||
|
* [UnzipWith](UnzipWith.md)
|
||||||
|
|
||||||
@@@
|
@@@
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,7 @@ object StreamOperatorsIndexGenerator extends AutoPlugin {
|
||||||
"Nesting and flattening operators",
|
"Nesting and flattening operators",
|
||||||
"Time aware operators",
|
"Time aware operators",
|
||||||
"Fan-in operators",
|
"Fan-in operators",
|
||||||
// TODO these don't show up as def's yet so don't show up in the index..
|
"Fan-out operators",
|
||||||
// "Fan-out operators",
|
|
||||||
"Watching status operators",
|
"Watching status operators",
|
||||||
"Actor interop operators",
|
"Actor interop operators",
|
||||||
"Error handling"
|
"Error handling"
|
||||||
|
|
@ -125,6 +124,8 @@ object StreamOperatorsIndexGenerator extends AutoPlugin {
|
||||||
def isPending(element: String, opName: String) =
|
def isPending(element: String, opName: String) =
|
||||||
pendingTestCases.get(element).exists(_.contains(opName))
|
pendingTestCases.get(element).exists(_.contains(opName))
|
||||||
|
|
||||||
|
val noElement = " "
|
||||||
|
|
||||||
def generateAlphabeticalIndex(dir: SettingKey[File], locate: File => File) = Def.task[Seq[File]] {
|
def generateAlphabeticalIndex(dir: SettingKey[File], locate: File => File) = Def.task[Seq[File]] {
|
||||||
val file = locate(dir.value)
|
val file = locate(dir.value)
|
||||||
|
|
||||||
|
|
@ -170,7 +171,13 @@ object StreamOperatorsIndexGenerator extends AutoPlugin {
|
||||||
.filter(op => !ignore.contains(op))
|
.filter(op => !ignore.contains(op))
|
||||||
.map(_.replaceAll("Mat$", ""))
|
.map(_.replaceAll("Mat$", ""))
|
||||||
.map(method => (element, method))
|
.map(method => (element, method))
|
||||||
}
|
} ++ List(
|
||||||
|
(noElement, "Partition"),
|
||||||
|
(noElement, "Broadcast"),
|
||||||
|
(noElement, "Balance"),
|
||||||
|
(noElement, "Unzip"),
|
||||||
|
(noElement, "UnzipWith")
|
||||||
|
)
|
||||||
|
|
||||||
val sourceAndFlow = defs.collect { case ("Source", method) => method } intersect defs.collect { case ("Flow", method) => method }
|
val sourceAndFlow = defs.collect { case ("Source", method) => method } intersect defs.collect { case ("Flow", method) => method }
|
||||||
|
|
||||||
|
|
@ -178,6 +185,8 @@ object StreamOperatorsIndexGenerator extends AutoPlugin {
|
||||||
defs.map {
|
defs.map {
|
||||||
case (element @ ("Source" | "Flow"), method) if sourceAndFlow.contains(method) =>
|
case (element @ ("Source" | "Flow"), method) if sourceAndFlow.contains(method) =>
|
||||||
("Source/Flow", method, s"Source-or-Flow/$method.md")
|
("Source/Flow", method, s"Source-or-Flow/$method.md")
|
||||||
|
case (`noElement`, method) =>
|
||||||
|
(noElement, method, s"$method.md")
|
||||||
case (element, method) =>
|
case (element, method) =>
|
||||||
(element, method, s"$element/$method.md")
|
(element, method, s"$element/$method.md")
|
||||||
}.distinct
|
}.distinct
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue