blob: 9d498b5f5538f05e5e44ad16389cf837f0d312c9 [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 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EnvironmentEdgeManager (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)</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="EnvironmentEdgeManager (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":9,"i3":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/EnvironmentEdgeManager.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/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/util/ExceptionUtil.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" target="_top">Frames</a></li>
<li><a href="EnvironmentEdgeManager.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><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.hadoop.hbase.util</div>
<h2 title="Class EnvironmentEdgeManager" class="title">Class EnvironmentEdgeManager</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://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.hadoop.hbase.util.EnvironmentEdgeManager</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>@InterfaceAudience.Private
public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.57">EnvironmentEdgeManager</a>
extends <a href="https://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">Manages a singleton instance of the environment edge. This class shall implement static versions
of the interface <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><code>EnvironmentEdge</code></a>, then defer to the delegate on invocation. <br>
<b>Original Motivation:</b> The main purpose of the Environment Edge Manager was to have better
control over the tests so that they behave the same when run in any system. (Refer:
<a href="https://issues.apache.org/jira/browse/HBASE-2578">HBASE-2578</a> - The issue which added
the <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util"><code>EnvironmentEdgeManager</code></a>). The idea is to have a central
place where time can be assigned in HBase. That makes it easier to inject different
implementations of time. The default environment edge is the Java Current Time in millis. The
environment edge manager class is designed to be able to plug in a new implementation of time by
simply injecting an implementation of <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><code>EnvironmentEdge</code></a>
interface to <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util"><code>EnvironmentEdgeManager</code></a>
<p>
<b>Problems with Environment Edge:</b><br>
1. One of the major problems is the side effects of injecting an Environment Edge into
Environment Edge Manager.<br>
For example, A test could inject an edge to fast forward time in order to avoid thread sleep to
save time, but it could trigger a premature waking up of another thread waiting on a condition
dependent on time lapse, which could potentially affect the normal working of the system leading
to failure of tests.<br>
2. Every test should ensure it is setting the Environment Edge it needs for the test to perform
in an expected way. Because another test which might have run before the current test could have
injected its own custom Environment Edge which may not be applicable to this test. This is still
solvable but the problem is that the tests can run in parallel leading to different combinations
of environment edges being injected causing unexpected results.<br>
3. Another important issue with respect to injecting time through Environment Edge is that the
milliseconds unit of time is ingrained throughout the codebase in the form of hardcoded sleep
time or timeouts that any change of time unit or making it fast or slow can potentially trigger
unexpected failures due to timeout or unintended flow of execution.<br>
</p>
Because of the above issues, only <a href="../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util"><code>DefaultEnvironmentEdge</code></a> is
being used, whose implementation of time returns the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#currentTimeMillis--" title="class or interface in java.lang"><code>System.currentTimeMillis()</code></a>. It is
advised not to inject any other <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><code>EnvironmentEdge</code></a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== 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>private static <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#delegate">delegate</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="colFirst" scope="col">Modifier</th>
<th class="colLast" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#EnvironmentEdgeManager--">EnvironmentEdgeManager</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 long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#currentTime--">currentTime</a></span>()</code>
<div class="block">Defers to the delegate and calls the <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html#currentTime--"><code>EnvironmentEdge.currentTime()</code></a> method.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#getDelegate--">getDelegate</a></span>()</code>
<div class="block">Retrieves the singleton instance of the <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><code>EnvironmentEdge</code></a> that is being managed.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#injectEdge-org.apache.hadoop.hbase.util.EnvironmentEdge-">injectEdge</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a>&nbsp;edge)</code>
<div class="block">Injects the given edge such that it becomes the managed entity.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#reset--">reset</a></span>()</code>
<div class="block">Resets the managed instance to the default instance: <a href="../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util"><code>DefaultEnvironmentEdge</code></a>.</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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="delegate">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>delegate</h4>
<pre>private static volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.58">delegate</a></pre>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="EnvironmentEdgeManager--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>EnvironmentEdgeManager</h4>
<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.60">EnvironmentEdgeManager</a>()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getDelegate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDelegate</h4>
<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.68">getDelegate</a>()</pre>
<div class="block">Retrieves the singleton instance of the <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><code>EnvironmentEdge</code></a> that is being managed.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the edge.</dd>
</dl>
</li>
</ul>
<a name="reset--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reset</h4>
<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.75">reset</a>()</pre>
<div class="block">Resets the managed instance to the default instance: <a href="../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util"><code>DefaultEnvironmentEdge</code></a>.</div>
</li>
</ul>
<a name="injectEdge-org.apache.hadoop.hbase.util.EnvironmentEdge-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>injectEdge</h4>
<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.84">injectEdge</a>(<a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a>&nbsp;edge)</pre>
<div class="block">Injects the given edge such that it becomes the managed entity. If null is passed to this
method, the default type is assigned to the delegate.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>edge</code> - the new edge.</dd>
</dl>
</li>
</ul>
<a name="currentTime--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>currentTime</h4>
<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html#line.96">currentTime</a>()</pre>
<div class="block">Defers to the delegate and calls the <a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html#currentTime--"><code>EnvironmentEdge.currentTime()</code></a> method.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>current time in millis according to the delegate.</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/EnvironmentEdgeManager.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/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/util/ExceptionUtil.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" target="_top">Frames</a></li>
<li><a href="EnvironmentEdgeManager.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><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 ======= -->
<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>