blob: 8f517ca192ebe0d99d76ca45324d024beda5c5f6 [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 -->
<title>TimestampRangeTracker (Apache Beam 2.38.0-SNAPSHOT)</title>
<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="TimestampRangeTracker (Apache Beam 2.38.0-SNAPSHOT)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance 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="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/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampUtils.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../../index.html?org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html" target="_top">Frames</a></li>
<li><a href="TimestampRangeTracker.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><a href="#nested.classes.inherited.from.class.org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker">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="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&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.beam.sdk.io.gcp.spanner.changestreams.restriction</div>
<h2 title="Class TimestampRangeTracker" class="title">Class TimestampRangeTracker</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRangeTracker</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.HasProgress.html" title="interface in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.HasProgress</a></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/DetectNewPartitionsRangeTracker.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">DetectNewPartitionsRangeTracker</a>, <a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/ReadChangeStreamPartitionRangeTracker.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">ReadChangeStreamPartitionRangeTracker</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="typeNameLabel">TimestampRangeTracker</span>
extends <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;
implements <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.HasProgress.html" title="interface in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.HasProgress</a></pre>
<div class="block">A <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn"><code>RestrictionTracker</code></a> for claiming positions in a <a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction"><code>TimestampRange</code></a> in a
monotonically increasing fashion.
<p>The smallest position is <code>Timestamp.MIN_VALUE</code> and the largest position is <code>Timestamp.MAX_VALUE - 1 nanosecond</code>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.beam.sdk.transforms.splittabledofn.<a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a></h3>
<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.HasProgress.html" title="interface in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.HasProgress</a>, <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html" title="enum in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.IsBounded</a>, <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.Progress.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.Progress</a>, <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.TruncateResult.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.TruncateResult</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.TruncateResult.html" title="type parameter in RestrictionTracker.TruncateResult">RestrictionT</a>&gt;</code></li>
</ul>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> com.google.cloud.Timestamp</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#lastAttemptedPosition">lastAttemptedPosition</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> com.google.cloud.Timestamp</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#lastClaimedPosition">lastClaimedPosition</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#range">range</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== 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/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#TimestampRangeTracker-org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRange-">TimestampRangeTracker</a></span>(<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>&nbsp;range)</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="t2" class="tableTab"><span><a href="javascript:show(2);">Instance 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>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#checkDone--">checkDone</a></span>()</code>
<div class="block">Checks if the restriction has been processed successfully.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#currentRestriction--">currentRestriction</a></span>()</code>
<div class="block">Returns a restriction accurately describing the full range of work the current <code>DoFn.ProcessElement</code> call will do, including already completed work.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.Progress.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.Progress</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#getProgress--">getProgress</a></span>()</code>
<div class="block">Returns the progress made within the restriction so far.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html" title="enum in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.IsBounded</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#isBounded--">isBounded</a></span>()</code>
<div class="block">Return the boundedness of the current restriction.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#tryClaim-com.google.cloud.Timestamp-">tryClaim</a></span>(com.google.cloud.Timestamp&nbsp;position)</code>
<div class="block">Attempts to claim the given position.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/SplitResult.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">SplitResult</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html#trySplit-double-">trySplit</a></span>(double&nbsp;fractionOfRemainder)</code>
<div class="block">Splits the restriction through the following algorithm:</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.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="range">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>range</h4>
<pre>protected&nbsp;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a> range</pre>
</li>
</ul>
<a name="lastAttemptedPosition">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>lastAttemptedPosition</h4>
<pre>protected&nbsp;<a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> com.google.cloud.Timestamp lastAttemptedPosition</pre>
</li>
</ul>
<a name="lastClaimedPosition">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>lastClaimedPosition</h4>
<pre>protected&nbsp;<a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> com.google.cloud.Timestamp lastClaimedPosition</pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="TimestampRangeTracker-org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRange-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>TimestampRangeTracker</h4>
<pre>public&nbsp;TimestampRangeTracker(<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>&nbsp;range)</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="tryClaim-com.google.cloud.Timestamp-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tryClaim</h4>
<pre>public&nbsp;boolean&nbsp;tryClaim(com.google.cloud.Timestamp&nbsp;position)</pre>
<div class="block">Attempts to claim the given position. Depending on the position following outcomes are
possible:
<ul>
<li>If the position is less than or equal to a previous attempted one, an <code>IllegalArgumentException</code> will be thrown
<li>If the position is less than the restriction range start, an <code>IllegalArgumentException</code> will be thrown
<li>If the position is greater than or equal to the range end, the position will not be
claimed
<li>If the position is greater or equal to the range start and less than the range end, the
position will be claimed
</ul>
If an error is not thrown, this function will register the position as the <code>lastAttemptedPosition</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#tryClaim-PositionT-">tryClaim</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the position was successfully claimed, <code>false</code> otherwise</dd>
</dl>
</li>
</ul>
<a name="trySplit-double-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>trySplit</h4>
<pre>public&nbsp;<a href="https://static.javadoc.io/org.checkerframework/checker-qual/3.10.0/org/checkerframework/checker/nullness/qual/Nullable.html?is-external=true" title="class or interface in org.checkerframework.checker.nullness.qual">@Nullable</a> <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/SplitResult.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">SplitResult</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>&gt;&nbsp;trySplit(double&nbsp;fractionOfRemainder)</pre>
<div class="block">Splits the restriction through the following algorithm:
<pre>
currentPosition = lastAttemptedPosition == null ? (from - 1ns) : lastAttemptedPosition
splitPosition = currentPosition + max(1, (range.to - currentPosition) * fractionOfRemainder)
primary = [range.from, splitPosition)
residual = [splitPosition, range.to)
this.range = primary
</pre>
If the <code>splitPosition</code> is greater than the <code>range.to</code>, <code>null</code> will be
returned. For checkpoints the <code>fractionOfRemainder</code> will always be zero.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#trySplit-double-">trySplit</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fractionOfRemainder</code> - A hint as to the fraction of work the primary restriction should
represent based upon the current known remaining amount of work.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/SplitResult.html" title="class in org.apache.beam.sdk.transforms.splittabledofn"><code>SplitResult</code></a> if a split was possible or <code>null</code> if the <code>splitPosition</code> is beyond the end of the range.</dd>
</dl>
</li>
</ul>
<a name="checkDone--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>checkDone</h4>
<pre>public&nbsp;void&nbsp;checkDone()
throws java.lang.IllegalStateException</pre>
<div class="block">Checks if the restriction has been processed successfully. If not, throws an <code>IllegalStateException</code>.
<p>The restriction is considered processed successfully if:
<ul>
<li>The range is empty (<code>range.from == range.to</code>)
<li>The <code>lastAttemptedPosition + 1ns &gt;= range.to</code>
</ul>
The restriction is considered not processed successfully if:
<ul>
<li>No position claim was attempted for a non-empty range
<li>The <code>lastAttemptedPosition + 1ns &lt; range.to</code>
</ul></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#checkDone--">checkDone</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.IllegalStateException</code></dd>
</dl>
</li>
</ul>
<a name="getProgress--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProgress</h4>
<pre>public&nbsp;<a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.Progress.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.Progress</a>&nbsp;getProgress()</pre>
<div class="block">Returns the progress made within the restriction so far. This progress is returned in a
normalized fashion from the interval [0, 1]. Zero means no work indicates no work (completed or
remaining), while 1 indicates all work (completed or remaining).
<p>If no position was attempted, it will return <code>workCompleted</code> as 0 and <code>workRemaining</code> as 1. If a position was attempted, it will return the fraction of work completed
and work remaining based on the offset the position represents in the restriction range. If the
last position attempted was greater than the end of the restriction range, it will return
<code>workCompleted</code> as 1 and <code>workRemaining</code> as 0.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.HasProgress.html#getProgress--">getProgress</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.HasProgress.html" title="interface in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.HasProgress</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>work completed and work remaining as fractions between [0, 1]</dd>
</dl>
</li>
</ul>
<a name="currentRestriction--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>currentRestriction</h4>
<pre>public&nbsp;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>&nbsp;currentRestriction()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#currentRestriction--">RestrictionTracker</a></code></span></div>
<div class="block">Returns a restriction accurately describing the full range of work the current <code>DoFn.ProcessElement</code> call will do, including already completed work.
<p>The current restriction returned by method may be updated dynamically due to due to
concurrent invocation of other methods of the <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn"><code>RestrictionTracker</code></a>, For example, <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#trySplit-double-"><code>RestrictionTracker.trySplit(double)</code></a>.
<p>This method is <b>required</b> to be implemented.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#currentRestriction--">currentRestriction</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</code></dd>
</dl>
</li>
</ul>
<a name="isBounded--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>isBounded</h4>
<pre>public&nbsp;<a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html" title="enum in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker.IsBounded</a>&nbsp;isBounded()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#isBounded--">RestrictionTracker</a></code></span></div>
<div class="block">Return the boundedness of the current restriction. If the current restriction represents a
finite amount of work, it should return <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#BOUNDED"><code>RestrictionTracker.IsBounded.BOUNDED</code></a>. Otherwise, it should return
<a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#UNBOUNDED"><code>RestrictionTracker.IsBounded.UNBOUNDED</code></a>.
<p>It is valid to return <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#BOUNDED"><code>RestrictionTracker.IsBounded.BOUNDED</code></a> after returning <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#UNBOUNDED"><code>RestrictionTracker.IsBounded.UNBOUNDED</code></a>
once the end of a restriction is discovered. It is not valid to return <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#UNBOUNDED"><code>RestrictionTracker.IsBounded.UNBOUNDED</code></a> after returning <a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.IsBounded.html#BOUNDED"><code>RestrictionTracker.IsBounded.BOUNDED</code></a>.
<p>This method is <b>required</b> to be implemented.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html#isBounded--">isBounded</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../../../../org/apache/beam/sdk/transforms/splittabledofn/RestrictionTracker.html" title="class in org.apache.beam.sdk.transforms.splittabledofn">RestrictionTracker</a>&lt;<a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction">TimestampRange</a>,com.google.cloud.Timestamp&gt;</code></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="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/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRange.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../../../../org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampUtils.html" title="class in org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../../index.html?org/apache/beam/sdk/io/gcp/spanner/changestreams/restriction/TimestampRangeTracker.html" target="_top">Frames</a></li>
<li><a href="TimestampRangeTracker.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><a href="#nested.classes.inherited.from.class.org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker">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="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&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 ======= -->
</body>
</html>