blob: f420d6ac67ba39d5952fe5716da9cac24b241bc5 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_112) on Mon Dec 18 11:25:19 EST 2017 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PlumbingStreams (Apache Edgent (incubating) v1.2.0 API)</title>
<meta name="date" content="2017-12-18">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="PlumbingStreams (Apache Edgent (incubating) v1.2.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PlumbingStreams.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/edgent/topology/plumbing/LoadBalancedSplitter.html" title="class in org.apache.edgent.topology.plumbing"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/edgent/topology/plumbing/Valve.html" title="class in org.apache.edgent.topology.plumbing"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/edgent/topology/plumbing/PlumbingStreams.html" target="_top">Frames</a></li>
<li><a href="PlumbingStreams.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.edgent.topology.plumbing</div>
<h2 title="Class PlumbingStreams" class="title">Class PlumbingStreams</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.edgent.topology.plumbing.PlumbingStreams</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">PlumbingStreams</span>
extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Plumbing utilities for <a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology"><code>TStream</code></a>.
Methods that manipulate the flow of tuples in a streaming topology,
but are not part of the logic of the application.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#PlumbingStreams--">PlumbingStreams</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#barrier-java.util.List-">barrier</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&gt;&nbsp;streams)</code>
<div class="block">A tuple synchronization barrier.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#barrier-java.util.List-int-">barrier</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&gt;&nbsp;streams,
int&nbsp;queueCapacity)</code>
<div class="block">A tuple synchronization barrier.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#blockingDelay-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">blockingDelay</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>
<div class="block">Insert a blocking delay between tuples.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#blockingOneShotDelay-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">blockingOneShotDelay</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>
<div class="block">Insert a blocking delay before forwarding the first tuple and
no delay for subsequent tuples.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#blockingThrottle-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">blockingThrottle</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>
<div class="block">Maintain a constant blocking delay between tuples.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static &lt;T,U,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#concurrent-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-">concurrent</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;U&gt;&gt;&gt;&nbsp;pipelines,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;U&gt;,R&gt;&nbsp;combiner)</code>
<div class="block">Perform analytics concurrently.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>static &lt;T,U,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#concurrentMap-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-">concurrentMap</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;T,U&gt;&gt;&nbsp;mappers,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;U&gt;,R&gt;&nbsp;combiner)</code>
<div class="block">Perform analytics concurrently.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#gate-org.apache.edgent.topology.TStream-java.util.concurrent.Semaphore-">gate</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a>&nbsp;semaphore)</code>
<div class="block">Control the flow of tuples to an output stream.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#isolate-org.apache.edgent.topology.TStream-boolean-">isolate</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
boolean&nbsp;ordered)</code>
<div class="block">Isolate upstream processing from downstream processing.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#isolate-org.apache.edgent.topology.TStream-int-">isolate</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;queueCapacity)</code>
<div class="block">Isolate upstream processing from downstream processing.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>static &lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#parallel-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-">parallel</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;&nbsp;splitter,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&gt;&nbsp;pipeline)</code>
<div class="block">Perform an analytic pipeline on tuples in parallel.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>static &lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#parallelBalanced-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.BiFunction-">parallelBalanced</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&gt;&nbsp;pipeline)</code>
<div class="block">Perform an analytic pipeline on tuples in parallel.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>static &lt;T,U&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;U&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#parallelMap-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-">parallelMap</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;&nbsp;splitter,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;T,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,U&gt;&nbsp;mapper)</code>
<div class="block">Perform an analytic function on tuples in parallel.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>static &lt;T,K&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#pressureReliever-org.apache.edgent.topology.TStream-org.apache.edgent.function.Function-int-">pressureReliever</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;T,K&gt;&nbsp;keyFunction,
int&nbsp;count)</code>
<div class="block">Relieve pressure on upstream processing by discarding tuples.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>static &lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#roundRobinSplitter-int-">roundRobinSplitter</a></span>(int&nbsp;width)</code>
<div class="block">A round-robin splitter ToIntFunction</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="PlumbingStreams--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>PlumbingStreams</h4>
<pre>public&nbsp;PlumbingStreams()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="blockingDelay-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>blockingDelay</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;blockingDelay(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
<div class="block">Insert a blocking delay between tuples.
Returned stream is the input stream delayed by <code>delay</code>.
<p>
Delays less than 1msec are translated to a 0 delay.
<p>
This function always adds the <code>delay</code> amount after receiving
a tuple before forwarding it.
<p>
Downstream tuple processing delays will affect
the overall delay of a subsequent tuple.
<p>
e.g., the input stream contains two tuples t1 and t2 and
the delay is 100ms. The forwarding of t1 is delayed by 100ms.
Then if a downstream processing delay of 80ms occurs, this function
receives t2 80ms after it forwarded t1 and it will delay another
100ms before forwarding t2. Hence the overall delay between forwarding
t1 and t2 is 180ms.
See <a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#blockingThrottle-long-java.util.concurrent.TimeUnit-"><code>blockingThrottle</code></a>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - Stream t</dd>
<dd><code>delay</code> - Amount of time to delay a tuple.</dd>
<dd><code>unit</code> - Time unit for <code>delay</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that will be delayed.</dd>
</dl>
</li>
</ul>
<a name="blockingThrottle-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>blockingThrottle</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;blockingThrottle(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
<div class="block">Maintain a constant blocking delay between tuples.
The returned stream is the input stream throttled by <code>delay</code>.
<p>
Delays less than 1msec are translated to a 0 delay.
<p>
Sample use:
<pre><code>
TStream&lt;String&gt; stream = topology.strings("a", "b, "c");
// Create a stream with tuples throttled to 1 second intervals.
TStream&lt;String&gt; throttledStream = blockingThrottle(stream, 1, TimeUnit.SECOND);
// print out the throttled tuples as they arrive
throttledStream.peek(t -&gt; System.out.println(new Date() + " - " + t));
</code></pre>
<p>
The function adjusts for downstream processing delays.
The first tuple is not delayed. If <code>delay</code> has already
elapsed since the prior tuple was forwarded, the tuple
is forwarded immediately.
Otherwise, forwarding the tuple is delayed to achieve
a <code>delay</code> amount since forwarding the prior tuple.
<p>
e.g., the input stream contains two tuples t1 and t2 and
the delay is 100ms. The forwarding of t1 is delayed by 100ms.
Then if a downstream processing delay of 80ms occurs, this function
receives t2 80ms after it forwarded t1 and it will only delay another
20ms (100ms - 80ms) before forwarding t2.
Hence the overall delay between forwarding t1 and t2 remains 100ms.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - the stream to throttle</dd>
<dd><code>delay</code> - Amount of time to delay a tuple.</dd>
<dd><code>unit</code> - Time unit for <code>delay</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the throttled stream</dd>
</dl>
</li>
</ul>
<a name="blockingOneShotDelay-org.apache.edgent.topology.TStream-long-java.util.concurrent.TimeUnit-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>blockingOneShotDelay</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;blockingOneShotDelay(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
long&nbsp;delay,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
<div class="block">Insert a blocking delay before forwarding the first tuple and
no delay for subsequent tuples.
<p>
Delays less than 1msec are translated to a 0 delay.
<p>
Sample use:
<pre><code>
TStream&lt;String&gt; stream = topology.strings("a", "b, "c");
// create a stream where the first tuple is delayed by 5 seconds.
TStream&lt;String&gt; oneShotDelayedStream =
stream.map( blockingOneShotDelay(5, TimeUnit.SECONDS) );
</code></pre></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - input stream</dd>
<dd><code>delay</code> - Amount of time to delay a tuple.</dd>
<dd><code>unit</code> - Time unit for <code>delay</code>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the delayed stream</dd>
</dl>
</li>
</ul>
<a name="pressureReliever-org.apache.edgent.topology.TStream-org.apache.edgent.function.Function-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>pressureReliever</h4>
<pre>public static&nbsp;&lt;T,K&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;pressureReliever(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;T,K&gt;&nbsp;keyFunction,
int&nbsp;count)</pre>
<div class="block">Relieve pressure on upstream processing by discarding tuples.
This method ensures that upstream processing is not
constrained by any delay in downstream processing,
for example by a connector not being able to connect
to its external system.
<P>
Any downstream processing of the returned stream is isolated
from <code>stream</code> so that any slow down does not affect <code>stream</code>.
When the downstream processing cannot keep up with rate of
<code>stream</code> tuples will be dropped from returned stream.
<BR>
Up to <code>count</code> of the most recent tuples per key from <code>stream</code>
are maintained when downstream processing is slow, any older tuples
that have not been submitted to the returned stream will be discarded.
<BR>
Tuple order is maintained within a partition but is not guaranteed to
be maintained across partitions.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type.</dd>
<dd><code>K</code> - Key type.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - Stream to be isolated from downstream processing.</dd>
<dd><code>keyFunction</code> - Function defining the key of each tuple.</dd>
<dd><code>count</code> - Maximum number of tuples to maintain when downstream processing is backing up.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that is isolated from and thus relieves pressure on <code>stream</code>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#isolate-org.apache.edgent.topology.TStream-int-"><code>isolate</code></a></dd>
</dl>
</li>
</ul>
<a name="isolate-org.apache.edgent.topology.TStream-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isolate</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;isolate(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
boolean&nbsp;ordered)</pre>
<div class="block">Isolate upstream processing from downstream processing.
<BR>
Implementations may throw <code>OutOfMemoryExceptions</code>
if the processing against returned stream cannot keep up
with the arrival rate of tuples on <code>stream</code>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - Stream to be isolated from downstream processing.</dd>
<dd><code>ordered</code> - <code>true</code> to maintain arrival order on the returned stream,
<code>false</code> to not guaranteed arrival order.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that is isolated from <code>stream</code>.</dd>
</dl>
</li>
</ul>
<a name="isolate-org.apache.edgent.topology.TStream-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isolate</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;isolate(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;queueCapacity)</pre>
<div class="block">Isolate upstream processing from downstream processing.
<P>
If the processing against the returned stream cannot keep up
with the arrival rate of tuples on <code>stream</code>, upstream
processing will block until there is space in the queue between
the streams.
</P><P>
Processing of tuples occurs in the order they were received.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - Stream to be isolated from downstream processing.</dd>
<dd><code>queueCapacity</code> - size of the queue between <code>stream</code> and
the returned stream.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Stream that is isolated from <code>stream</code>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#pressureReliever-org.apache.edgent.topology.TStream-org.apache.edgent.function.Function-int-"><code>pressureReliever</code></a></dd>
</dl>
</li>
</ul>
<a name="concurrentMap-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>concurrentMap</h4>
<pre>public static&nbsp;&lt;T,U,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;concurrentMap(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;T,U&gt;&gt;&nbsp;mappers,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;U&gt;,R&gt;&nbsp;combiner)</pre>
<div class="block">Perform analytics concurrently.
<P>
This is a convenience function that calls
<a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#concurrent-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-"><code>concurrent(TStream, List, Function)</code></a> after
creating <code>pipeline</code> and <code>combiner</code> functions
from the supplied <code>mappers</code> and <code>combiner</code> arguments.
</P><P>
That is, it is logically, if not exactly, the same as:
</P>
<pre><code>
List&lt;Function&lt;TStream&lt;T&gt;,TStream&lt;U&gt;&gt;&gt; pipelines = new ArrayList&lt;&gt;();
for (Function&lt;T,U&gt; mapper : mappers)
pipelines.add(s -&gt; s.map(mapper));
concurrent(stream, pipelines, combiner);
</code></pre></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type on input stream.</dd>
<dd><code>U</code> - Tuple type generated by mappers.</dd>
<dd><code>R</code> - Tuple type of the result.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - input stream</dd>
<dd><code>mappers</code> - functions to be run concurrently. Each mapper MUST
return a non-null result.
A runtime error will be generated if a null result
is returned.</dd>
<dd><code>combiner</code> - function to create a result tuple from the list of
results from <code>mappers</code>.
The input list order is 1:1 with the <code>mappers</code> list.
I.e., list entry [0] is the result from mappers[0],
list entry [1] is the result from mappers[1], etc.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>result stream</dd>
</dl>
</li>
</ul>
<a name="concurrent-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>concurrent</h4>
<pre>public static&nbsp;&lt;T,U,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;concurrent(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;U&gt;&gt;&gt;&nbsp;pipelines,
<a href="../../../../../org/apache/edgent/function/Function.html" title="interface in org.apache.edgent.function">Function</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;U&gt;,R&gt;&nbsp;combiner)</pre>
<div class="block">Perform analytics concurrently.
<P>
Process input tuples one at at time, invoking the specified
analytics (<code>pipelines</code>) concurrently, combine the results,
and then process the next input tuple in the same manner.
</P><P>
Logically, instead of doing this:
</P>
<pre><code>
sensorReadings&lt;T&gt; -&gt; A1 -&gt; A2 -&gt; A3 -&gt; results&lt;R&gt;
</code></pre>
create a graph that's logically like this:
<pre><code>
-
|-&gt; A1 -&gt;|
sensorReadings&lt;T&gt; -&gt; |-&gt; A2 -&gt;| -&gt; results&lt;R&gt;
|-&gt; A3 -&gt;|
</code></pre>
more specifically a graph like this:
<pre><code>
-
|-&gt; isolate(1) -&gt; pipeline1 -&gt; |
stream -&gt; |-&gt; isolate(1) -&gt; pipeline2 -&gt; |-&gt; barrier(10) -&gt; combiner
|-&gt; isolate(1) -&gt; pipeline3 -&gt; |
. . .
</code></pre>
<P>
The typical use case for this is when an application has a collection
of independent analytics to perform on each tuple and the analytics
are sufficiently long running such that performing them concurrently
is desired.
</P><P>
Note, this is in contrast to "parallel" stream processing,
which in Java8 Streams and other contexts means processing multiple
tuples in parallel, each on a replicated processing pipeline.
</P><P>
Threadsafety - one of the following must be true:
</P>
<ul>
<li>the tuples from <code>stream</code> are threadsafe</li>
<li>the <code>pipelines</code> do not modify the input tuples</li>
<li>the <code>pipelines</code> provide their own synchronization controls
to protect concurrent modifications of the input tuples</li>
</ul>
<P>
Logically, a thread is allocated for each of the <code>pipelines</code>.
The actual degree of concurrency may be <a href="../../../../../org/apache/edgent/topology/TopologyProvider.html" title="interface in org.apache.edgent.topology"><code>TopologyProvider</code></a> dependent.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type on input stream.</dd>
<dd><code>U</code> - Tuple type generated by pipelines.</dd>
<dd><code>R</code> - Tuple type of the result.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - input stream</dd>
<dd><code>pipelines</code> - a list of functions to add a pipeline to the topology.
Each <code>pipeline.apply()</code> is called with <code>stream</code>
as the input, yielding the pipeline's result stream.
For each input tuple, a pipeline MUST create exactly one output tuple.
Tuple flow into the pipelines will cease if that requirement
is not met.</dd>
<dd><code>combiner</code> - function to create a result tuple from the list of
results from <code>pipelines</code>.
The input tuple list's order is 1:1 with the <code>pipelines</code> list.
I.e., list entry [0] is the result from pipelines[0],
list entry [1] is the result from pipelines[1], etc.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>result stream</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#barrier-java.util.List-int-"><code>barrier</code></a></dd>
</dl>
</li>
</ul>
<a name="barrier-java.util.List-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>barrier</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&gt;&nbsp;barrier(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&gt;&nbsp;streams)</pre>
<div class="block">A tuple synchronization barrier.
<P>
Same as <code>barrier(others, 1)</code>
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>streams</code> - input streams</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the output stream</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#barrier-java.util.List-int-"><code>barrier(List, int)</code></a></dd>
</dl>
</li>
</ul>
<a name="barrier-java.util.List-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>barrier</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;T&gt;&gt;&nbsp;barrier(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&gt;&nbsp;streams,
int&nbsp;queueCapacity)</pre>
<div class="block">A tuple synchronization barrier.
<P>
A barrier has n input streams with tuple type <code>T</code>
and one output stream with tuple type <code>List&lt;T&gt;</code>.
Once the barrier receives one tuple on each of its input streams,
it generates an output tuple containing one tuple from each input stream.
It then waits until it has received another tuple from each input stream.
</P><P>
Input stream 0's tuple is in the output tuple's list[0],
stream 1's tuple in list[1], and so on.
</P><P>
The barrier's output stream is isolated from the input streams.
</P><P>
The barrier has a queue of size <code>queueCapacity</code> for each
input stream. When a tuple for an input stream is received it is
added to its queue. The stream will block if the queue is full.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Type of the tuple.</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>streams</code> - the list of input streams</dd>
<dd><code>queueCapacity</code> - the size of each input stream's queue</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the output stream</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/oplet/plumbing/Barrier.html" title="class in org.apache.edgent.oplet.plumbing"><code>Barrier</code></a></dd>
</dl>
</li>
</ul>
<a name="parallelMap-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parallelMap</h4>
<pre>public static&nbsp;&lt;T,U&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;U&gt;&nbsp;parallelMap(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;&nbsp;splitter,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;T,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,U&gt;&nbsp;mapper)</pre>
<div class="block">Perform an analytic function on tuples in parallel.
<P>
Same as <code>parallel(stream, width, splitter, (s,ch) -&gt; s.map(t -&gt; mapper.apply(t, ch))</code>
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Input stream tuple type</dd>
<dd><code>U</code> - Result stream tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - input stream</dd>
<dd><code>splitter</code> - the tuple channel allocation function</dd>
<dd><code>mapper</code> - analytic function</dd>
<dd><code>width</code> - number of channels</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the unordered result stream</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#roundRobinSplitter-int-"><code>roundRobinSplitter</code></a>,
<a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#concurrentMap-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-"><code>concurrentMap</code></a></dd>
</dl>
</li>
</ul>
<a name="parallel-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parallel</h4>
<pre>public static&nbsp;&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;parallel(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;&nbsp;splitter,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&gt;&nbsp;pipeline)</pre>
<div class="block">Perform an analytic pipeline on tuples in parallel.
<P>
Splits <code>stream</code> into <code>width</code> parallel processing channels,
partitioning tuples among the channels using <code>splitter</code>.
Each channel runs a copy of <code>pipeline</code>.
The resulting stream is isolated from the upstream parallel channels.
</P><P>
The ordering of tuples in <code>stream</code> is not maintained in the
results from <code>parallel</code>.
</P><P>
<code>pipeline</code> is not required to yield a result for each input
tuple.
</P><P>
A common splitter function is a <a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#roundRobinSplitter-int-"><code>roundRobinSplitter</code></a>.
</P><P>
The generated graph looks like this:
</P>
<pre><code>
-
|-&gt; isolate(10) -&gt; pipeline-ch1 -&gt; |
stream -&gt; split(width,splitter) -&gt; |-&gt; isolate(10) -&gt; pipeline-ch2 -&gt; |-&gt; union -&gt; isolate(width)
|-&gt; isolate(10) -&gt; pipeline-ch3 -&gt; |
. . .
</code></pre></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Input stream tuple type</dd>
<dd><code>R</code> - Result stream tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - the input stream</dd>
<dd><code>width</code> - number of parallel processing channels</dd>
<dd><code>splitter</code> - the tuple channel allocation function</dd>
<dd><code>pipeline</code> - the pipeline for each channel.
<code>pipeline.apply(inputStream,channel)</code>
is called to generate the pipeline for each channel.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the isolated unordered result from each parallel channel</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#roundRobinSplitter-int-"><code>roundRobinSplitter</code></a>,
<a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#concurrent-org.apache.edgent.topology.TStream-java.util.List-org.apache.edgent.function.Function-"><code>concurrent</code></a></dd>
</dl>
</li>
</ul>
<a name="parallelBalanced-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.BiFunction-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parallelBalanced</h4>
<pre>public static&nbsp;&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;parallelBalanced(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
int&nbsp;width,
<a href="../../../../../org/apache/edgent/function/BiFunction.html" title="interface in org.apache.edgent.function">BiFunction</a>&lt;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&gt;&nbsp;pipeline)</pre>
<div class="block">Perform an analytic pipeline on tuples in parallel.
<P>
Splits <code>stream</code> into <code>width</code> parallel processing channels,
partitioning tuples among the channels in a load balanced fashion.
Each channel runs a copy of <code>pipeline</code>.
The resulting stream is isolated from the upstream parallel channels.
</P><P>
The ordering of tuples in <code>stream</code> is not maintained in the
results from <code>parallel</code>.
</P><P>
A <code>pipeline</code> <b>MUST</b> yield a result for each input
tuple. Failure to do so will result in the channel remaining
in a busy state and no longer available to process additional tuples.
</P><P>
A <a href="../../../../../org/apache/edgent/topology/plumbing/LoadBalancedSplitter.html" title="class in org.apache.edgent.topology.plumbing"><code>LoadBalancedSplitter</code></a> is used to distribute tuples.
</P><P>
The generated graph looks like this:
</P>
<pre><code>
-
|-&gt; isolate(1) -&gt; pipeline-ch1 -&gt; peek(splitter.channelDone()) -&gt; |
stream -&gt; split(width,splitter) -&gt; |-&gt; isolate(1) -&gt; pipeline-ch2 -&gt; peek(splitter.channelDone()) -&gt; |-&gt; union -&gt; isolate(width)
|-&gt; isolate(1) -&gt; pipeline-ch3 -&gt; peek(splitter.channelDone()) -&gt; |
. . .
</code></pre>
<P>
Note, this implementation requires that the splitter is used from
only a single JVM. The <code>org.apache.edgent.providers.direct.DirectProvider</code>
provider meets this requirement.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Input stream tuple type</dd>
<dd><code>R</code> - Result stream tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - the input stream</dd>
<dd><code>width</code> - number of parallel processing channels</dd>
<dd><code>pipeline</code> - the pipeline for each channel.
<code>pipeline.apply(inputStream,channel)</code>
is called to generate the pipeline for each channel.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the isolated unordered result from each parallel channel</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#parallel-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-"><code>parallel(TStream, int, ToIntFunction, BiFunction)</code></a>,
<a href="../../../../../org/apache/edgent/topology/plumbing/LoadBalancedSplitter.html" title="class in org.apache.edgent.topology.plumbing"><code>LoadBalancedSplitter</code></a></dd>
</dl>
</li>
</ul>
<a name="roundRobinSplitter-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>roundRobinSplitter</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/function/ToIntFunction.html" title="interface in org.apache.edgent.function">ToIntFunction</a>&lt;T&gt;&nbsp;roundRobinSplitter(int&nbsp;width)</pre>
<div class="block">A round-robin splitter ToIntFunction
<P>
The splitter function cycles among the <code>width</code> channels
on successive calls to <code>roundRobinSplitter.applyAsInt()</code>,
returning <code>0, 1, ..., width-1, 0, 1, ..., width-1</code>.
</P></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>width</code> - number of splitter channels</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the splitter</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/topology/TStream.html#split-int-org.apache.edgent.function.ToIntFunction-"><code>TStream.split</code></a>,
<a href="../../../../../org/apache/edgent/topology/plumbing/PlumbingStreams.html#parallel-org.apache.edgent.topology.TStream-int-org.apache.edgent.function.ToIntFunction-org.apache.edgent.function.BiFunction-"><code>parallel</code></a></dd>
</dl>
</li>
</ul>
<a name="gate-org.apache.edgent.topology.TStream-java.util.concurrent.Semaphore-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>gate</h4>
<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;gate(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent">Semaphore</a>&nbsp;semaphore)</pre>
<div class="block">Control the flow of tuples to an output stream.
<P>
A <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true" title="class or interface in java.util.concurrent"><code>Semaphore</code></a> is used to control the flow of tuples
through the <code>gate</code>.
The gate acquires a permit from the
semaphore to pass the tuple through, blocking until a permit is
acquired (and applying backpressure upstream while blocked).
Elsewhere, some code calls <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html?is-external=true#release-int-" title="class or interface in java.util.concurrent"><code>Semaphore.release(int)</code></a>
to make permits available.
</P><P>
If a TopologyProvider is used that can distribute a topology's
streams to different JVM's the gate and the code releasing the
permits must be in the same JVM.
</P><P>
Sample use:
<BR>
Suppose you wanted to control processing such that concurrent
pipelines processed each tuple in lock-step.
I.e., You want all of the pipelines to start processing a tuple
at the same time and not start a new tuple until the current
tuple had been fully processed by each of them:
</P>
<pre><code>
TStream&lt;Integer&gt; readings = ...;
Semaphore gateControl = new Semaphore(1); // allow the first to pass through
TStream&lt;Integer&gt; gated = PlumbingStreams.gate(readings, gateControl);
// Create the concurrent pipeline combiner and have it
// signal that concurrent processing of the tuple has completed.
// In this sample the combiner just returns the received list of
// each pipeline result.
Function&lt;TStream&lt;List&lt;Integer&gt;&gt;,TStream&lt;List&lt;Integer&gt;&gt;&gt; combiner =
stream -&gt; stream.map(list -&gt; {
gateControl.release();
return list;
});
TStream&lt;List&lt;Integer&gt;&gt; results = PlumbingStreams.concurrent(gated, pipelines, combiner);
</code></pre></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - the input stream</dd>
<dd><code>semaphore</code> - gate control</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>gated stream</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/PlumbingStreams.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/edgent/topology/plumbing/LoadBalancedSplitter.html" title="class in org.apache.edgent.topology.plumbing"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/edgent/topology/plumbing/Valve.html" title="class in org.apache.edgent.topology.plumbing"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/edgent/topology/plumbing/PlumbingStreams.html" target="_top">Frames</a></li>
<li><a href="PlumbingStreams.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2016&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>