blob: cb08e21b5e4de247f3c7c8e4e1c8b6079b602bfc [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) on Thu Sep 15 14:13:16 CDT 2022 -->
<title>IteratingCallback (Eclipse Jetty API Doc - v11.0.12)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2022-09-15">
<meta name="description" content="declaration: package: org.eclipse.jetty.util, class: IteratingCallback">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../script-dir/jquery-3.5.1.min.js"></script>
<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/IteratingCallback.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#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li><a href="#nested-class-summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<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>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.jetty.util</a></div>
<h1 title="Class IteratingCallback" class="title">Class IteratingCallback</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">org.eclipse.jetty.util.IteratingCallback</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code>, <code><a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></code></dd>
</dl>
<dl class="notes">
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="../proxy/AsyncMiddleManServlet.ProxyReader.html" title="class in org.eclipse.jetty.proxy">AsyncMiddleManServlet.ProxyReader</a></code>, <code><a href="../proxy/AsyncProxyServlet.StreamReader.html" title="class in org.eclipse.jetty.proxy">AsyncProxyServlet.StreamReader</a></code>, <code><a href="../websocket/core/internal/DemandingFlusher.html" title="class in org.eclipse.jetty.websocket.core.internal">DemandingFlusher</a></code>, <code><a href="../websocket/core/internal/FrameFlusher.html" title="class in org.eclipse.jetty.websocket.core.internal">FrameFlusher</a></code>, <code><a href="../http2/HTTP2Flusher.html" title="class in org.eclipse.jetty.http2">HTTP2Flusher</a></code>, <code><a href="IteratingNestedCallback.html" title="class in org.eclipse.jetty.util">IteratingNestedCallback</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public abstract class </span><span class="element-name type-name-label">IteratingCallback</span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
implements <a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></span></div>
<div class="block">This specialized callback implements a pattern that allows
a large job to be broken into smaller tasks using iteration
rather than recursion.
<p>
A typical example is the write of a large content to a socket,
divided in chunks. Chunk C1 is written by thread T1, which
also invokes the callback, which writes chunk C2, which invokes
the callback again, which writes chunk C3, and so forth.
</p>
<p>
The problem with the example is that if the callback thread
is the same that performs the I/O operation, then the process
is recursive and may result in a stack overflow.
To avoid the stack overflow, a thread dispatch must be performed,
causing context switching and cache misses, affecting performance.
</p>
<p>
To avoid this issue, this callback uses an AtomicReference to
record whether success callback has been called during the processing
of a sub task, and if so then the processing iterates rather than
recurring.
</p>
<p>
Subclasses must implement method <a href="#process()"><code>process()</code></a> where the sub
task is executed and a suitable <a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util"><code>IteratingCallback.Action</code></a> is
returned to this callback to indicate the overall progress of the job.
This callback is passed to the asynchronous execution of each sub
task and a call the <a href="#succeeded()"><code>succeeded()</code></a> on this callback represents
the completion of the sub task.
</p></div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li>
<section class="nested-class-summary" id="nested-class-summary">
<h2>Nested Class Summary</h2>
<div class="caption"><span>Nested Classes</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Class</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected static enum&nbsp;</code></div>
<div class="col-second even-row-color"><code><a href="IteratingCallback.Action.html" class="type-name-link" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></code></div>
<div class="col-last even-row-color">
<div class="block">The indication of the overall progress of the overall job that
implementations of <a href="#process()"><code>process()</code></a> must return.</div>
</div>
</div>
<div class="inherited-list">
<h2 id="nested-classes-inherited-from-class-org.eclipse.jetty.util.Callback">Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.<a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h2>
<code><a href="Callback.Completable.html" title="class in org.eclipse.jetty.util">Callback.Completable</a>, <a href="Callback.Completing.html" title="class in org.eclipse.jetty.util">Callback.Completing</a>, <a href="Callback.Nested.html" title="class in org.eclipse.jetty.util">Callback.Nested</a></code></div>
<div class="inherited-list">
<h2 id="nested-classes-inherited-from-class-org.eclipse.jetty.util.thread.Invocable">Nested classes/interfaces inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h2>
<code><a href="thread/Invocable.InvocationType.html" title="enum in org.eclipse.jetty.util.thread">Invocable.InvocationType</a>, <a href="thread/Invocable.ReadyTask.html" title="class in org.eclipse.jetty.util.thread">Invocable.ReadyTask</a>, <a href="thread/Invocable.Task.html" title="interface in org.eclipse.jetty.util.thread">Invocable.Task</a></code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.eclipse.jetty.util.Callback">Fields inherited from interface&nbsp;org.eclipse.jetty.util.<a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="Callback.html#NOOP">NOOP</a></code></div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.eclipse.jetty.util.thread.Invocable">Fields inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="thread/Invocable.html#__nonBlocking">__nonBlocking</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier</div>
<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>protected </code></div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">IteratingCallback</a>()</code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>protected </code></div>
<div class="col-constructor-name odd-row-color"><code><a href="#%3Cinit%3E(boolean)" class="member-name-link">IteratingCallback</a><wbr>(boolean&nbsp;needReset)</code></div>
<div class="col-last odd-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#close()" class="member-name-link">close</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#failed(java.lang.Throwable)" class="member-name-link">failed</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a>&nbsp;x)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked when the sub task fails.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isClosed()" class="member-name-link">isClosed</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isFailed()" class="member-name-link">isFailed</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isSucceeded()" class="member-name-link">isSucceeded</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#iterate()" class="member-name-link">iterate</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">This method must be invoked by applications to start the processing
of sub tasks.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#onCompleteFailure(java.lang.Throwable)" class="member-name-link">onCompleteFailure</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a>&nbsp;cause)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked when the overall task has completed with a failure.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#onCompleteSuccess()" class="member-name-link">onCompleteSuccess</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked when the overall task has completed successfully.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>protected abstract <a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#process()" class="member-name-link">process</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Method called by <a href="#iterate()"><code>iterate()</code></a> to process the sub task.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#reset()" class="member-name-link">reset</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Resets this callback.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#succeeded()" class="member-name-link">succeeded</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Invoked when the sub task succeeds.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.eclipse.jetty.util.Callback">Methods inherited from interface&nbsp;org.eclipse.jetty.util.<a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></h3>
<code><a href="Callback.html#completeWith(java.util.concurrent.CompletableFuture)">completeWith</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.eclipse.jetty.util.thread.Invocable">Methods inherited from interface&nbsp;org.eclipse.jetty.util.thread.<a href="thread/Invocable.html" title="interface in org.eclipse.jetty.util.thread">Invocable</a></h3>
<code><a href="thread/Invocable.html#getInvocationType()">getInvocationType</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;()">
<h3>IteratingCallback</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="element-name">IteratingCallback</span>()</div>
</section>
</li>
<li>
<section class="detail" id="&lt;init&gt;(boolean)">
<h3>IteratingCallback</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="element-name">IteratingCallback</span><wbr><span class="parameters">(boolean&nbsp;needReset)</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="process()">
<h3>process</h3>
<div class="member-signature"><span class="modifiers">protected abstract</span>&nbsp;<span class="return-type"><a href="IteratingCallback.Action.html" title="enum in org.eclipse.jetty.util">IteratingCallback.Action</a></span>&nbsp;<span class="element-name">process</span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></span></div>
<div class="block">Method called by <a href="#iterate()"><code>iterate()</code></a> to process the sub task.
<p>
Implementations must start the asynchronous execution of the sub task
(if any) and return an appropriate action:
</p>
<ul>
<li><a href="IteratingCallback.Action.html#IDLE"><code>IteratingCallback.Action.IDLE</code></a> when no sub tasks are available for execution
but the overall job is not completed yet</li>
<li><a href="IteratingCallback.Action.html#SCHEDULED"><code>IteratingCallback.Action.SCHEDULED</code></a> when the sub task asynchronous execution
has been started</li>
<li><a href="IteratingCallback.Action.html#SUCCEEDED"><code>IteratingCallback.Action.SUCCEEDED</code></a> when the overall job is completed</li>
</ul></div>
<dl class="notes">
<dt>Returns:</dt>
<dd>the appropriate Action</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></code> - if the sub task processing throws</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="onCompleteSuccess()">
<h3>onCompleteSuccess</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">onCompleteSuccess</span>()</div>
<div class="block">Invoked when the overall task has completed successfully.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#onCompleteFailure(java.lang.Throwable)"><code>onCompleteFailure(Throwable)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="onCompleteFailure(java.lang.Throwable)">
<h3>onCompleteFailure</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">onCompleteFailure</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a>&nbsp;cause)</span></div>
<div class="block">Invoked when the overall task has completed with a failure.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>cause</code> - the throwable to indicate cause of failure</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#onCompleteSuccess()"><code>onCompleteSuccess()</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="iterate()">
<h3>iterate</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">iterate</span>()</div>
<div class="block">This method must be invoked by applications to start the processing
of sub tasks. It can be called at any time by any thread, and it's
contract is that when called, then the <a href="#process()"><code>process()</code></a> method will
be called during or soon after, either by the calling thread or by
another thread.</div>
</section>
</li>
<li>
<section class="detail" id="succeeded()">
<h3>succeeded</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">succeeded</span>()</div>
<div class="block">Invoked when the sub task succeeds.
Subclasses that override this method must always remember to call
<code>super.succeeded()</code>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="Callback.html#succeeded()">succeeded</a></code>&nbsp;in interface&nbsp;<code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code></dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="Callback.html#failed(java.lang.Throwable)"><code>Callback.failed(Throwable)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="failed(java.lang.Throwable)">
<h3>failed</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">failed</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a>&nbsp;x)</span></div>
<div class="block">Invoked when the sub task fails.
Subclasses that override this method must always remember to call
<code>super.failed(Throwable)</code>.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="Callback.html#failed(java.lang.Throwable)">failed</a></code>&nbsp;in interface&nbsp;<code><a href="Callback.html" title="interface in org.eclipse.jetty.util">Callback</a></code></dd>
<dt>Parameters:</dt>
<dd><code>x</code> - the reason for the operation failure</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="close()">
<h3>close</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">close</span>()</div>
</section>
</li>
<li>
<section class="detail" id="isClosed()">
<h3>isClosed</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isClosed</span>()</div>
</section>
</li>
<li>
<section class="detail" id="isFailed()">
<h3>isFailed</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isFailed</span>()</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>whether this callback has failed</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="isSucceeded()">
<h3>isSucceeded</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">isSucceeded</span>()</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>whether this callback has succeeded</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="reset()">
<h3>reset</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name">reset</span>()</div>
<div class="block">Resets this callback.
<p>
A callback can only be reset to IDLE from the
SUCCEEDED or FAILED states or if it is already IDLE.
</p></div>
<dl class="notes">
<dt>Returns:</dt>
<dd>true if the reset was successful</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name">toString</span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 1995&#x2013;2022 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>