http://git-wip-us.apache.org/repos/asf/hbase-site/blob/93ae3fc9/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContext.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContext.html 
b/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContext.html
index bbd6733..5b974cd 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContext.html
@@ -106,7 +106,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperation</a>, <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperationWithoutResult.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperationWithoutResult</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperationWithResult.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperationWithResult</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.MasterObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.master">MasterCoprocessorHost.MasterObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="class in org.apache.hadoop.hbase.coprocessor">ObserverContextImpl</a>, <
 a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.BulkLoadObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.BulkLoadObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.RegionObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.RegionServerObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.RegionServerObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.WALObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost.WALObserverOperation</a></dd>
+<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperation</a>, <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperationWithoutResult.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperationWithoutResult</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorHost.ObserverOperationWithResult.html"
 title="class in 
org.apache.hadoop.hbase.coprocessor">CoprocessorHost.ObserverOperationWithResult</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.MasterObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.master">MasterCoprocessorHost.MasterObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="class in org.apache.hadoop.hbase.coprocessor">ObserverContextImpl</a>, <
 a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.BulkLoadObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.BulkLoadObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.RegionObserverOperationWithoutResult.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionObserverOperationWithoutResult</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.RegionServerObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.RegionServerObserverOperation</a>,
 <a 
href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.WALObserverOperation.html"
 title="class in 
org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost.WALObserverOperation</a></dd>
 </dl>
 <hr>
 <br>
@@ -115,10 +115,10 @@ var activeTableTab = "activeTableTab";
 public interface <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.40">ObserverContext</a>&lt;E
 extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;</pre>
 <div class="block">Carries the execution state for a given invocation of an 
Observer coprocessor
  (<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor"><code>RegionObserver</code></a>, <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterObserver.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor"><code>MasterObserver</code></a>, or <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/WALObserver.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor"><code>WALObserver</code></a>)
- method.  The same ObserverContext instance is passed sequentially to all 
loaded
+ method. The same ObserverContext instance is passed sequentially to all loaded
  coprocessors for a given Observer method trigger, with the
- <code>CoprocessorEnvironment</code> reference swapped out for each
- coprocessor.</div>
+ <code>CoprocessorEnvironment</code> reference set appropriately for each 
Coprocessor type:
+ e.g. the RegionCoprocessorEnvironment is passed to RegionCoprocessors, and so 
on.</div>
 </li>
 </ul>
 </div>
@@ -140,15 +140,16 @@ public interface <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coproc
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--">bypass</a></span>()</code>
-<div class="block">Call to indicate that the current coprocessor's return 
value should be
- used in place of the normal HBase obtained value.</div>
+<div class="block">Call to indicate that the current coprocessor's return 
value (or parameter -- depends on the
+ call-type) should be used in place of the value that would be obtained via 
normal processing;
+ i.e.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--">complete</a></span>()</code>
-<div class="block">Call to indicate that additional coprocessors further down 
the execution
- chain do not need to be invoked.</div>
+<div class="block">Call to skip out on calling remaining coprocessors in 
current execution chain (there may be
+ more than one coprocessor chained to a method call).</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
@@ -191,9 +192,32 @@ public interface <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>bypass</h4>
-<pre>void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.47">bypass</a>()</pre>
-<div class="block">Call to indicate that the current coprocessor's return 
value should be
- used in place of the normal HBase obtained value.</div>
+<pre>void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.67">bypass</a>()</pre>
+<div class="block">Call to indicate that the current coprocessor's return 
value (or parameter -- depends on the
+ call-type) should be used in place of the value that would be obtained via 
normal processing;
+ i.e. bypass the core call and return the Coprocessor's result instead. DOES 
NOT work for all
+ Coprocessor invocations, only on a small subset of methods, mostly preXXX 
calls in
+ RegionObserver. Check javadoc on the pertinent Coprocessor Observer to see if
+ <code>bypass</code> is supported.
+ <p>This behavior of honoring only a subset of methods is new since 
hbase-2.0.0.
+ <p>Where bypass is supported what is being bypassed is all of the core code
+ implementing the remainder of the operation. In order to understand what
+ calling bypass() will skip, a coprocessor implementer should read and
+ understand all of the remaining code and its nuances. Although this
+ is good practice for coprocessor developers in general, it demands a lot.
+ What is skipped is extremely version dependent. The core code will vary, 
perhaps significantly,
+ even between point releases. We do not provide the promise of consistent 
behavior even between
+ point releases for the bypass semantic. To achieve
+ that we could not change any code between hook points. Therefore the
+ coprocessor implementer becomes an HBase core developer in practice as soon
+ as they rely on bypass(). Every release of HBase may break the assumption
+ that the replacement for the bypassed code takes care of all necessary
+ skipped concerns. Because those concerns can change at any point, such an
+ assumption is never safe.</p></div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--"><code>complete()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="complete--">
@@ -202,10 +226,17 @@ public interface <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>complete</h4>
-<pre>void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.54">complete</a>()</pre>
-<div class="block">Call to indicate that additional coprocessors further down 
the execution
- chain do not need to be invoked.  Implies that this coprocessor's response
- is definitive.</div>
+<pre>void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.78">complete</a>()</pre>
+<div class="block">Call to skip out on calling remaining coprocessors in 
current execution chain (there may be
+ more than one coprocessor chained to a method call). Implies that this 
coprocessor's response
+ is definitive.
+ <p>Since hbase-2.0.0, only <code>complete</code> of 'bypassable' methods has 
an effect. See
+ javadoc on the Coprocessor Observer method as to whether bypass (and thereby 
'complete') is
+ supported. This behavior of honoring only a subset of methods is new since 
hbase-2.0.0.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--"><code>bypass()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getCaller--">
@@ -214,7 +245,7 @@ public interface <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coproc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getCaller</h4>
-<pre><a 
href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true";
 title="class or interface in java.util">Optional</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.62">getCaller</a>()</pre>
+<pre><a 
href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true";
 title="class or interface in java.util">Optional</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContext.html#line.86">getCaller</a>()</pre>
 <div class="block">Returns the active user for the coprocessor call. If an 
explicit <code>User</code> instance was
  provided to the constructor, that will be returned, otherwise if we are in 
the context of an
  RPC call, the remote user is used. May not be present if the execution is 
outside of an RPC

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/93ae3fc9/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html 
b/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html
index 65311d5..d69eb5e 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = 
{"i0":10,"i1":10,"i2":41,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = 
{"i0":10,"i1":10,"i2":41,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static 
Methods"],2:["t2","Instance Methods"],8:["t4","Concrete 
Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -146,12 +146,24 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#bypass">bypass</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#bypassable">bypassable</a></span></code>
+<div class="block">Is this operation bypassable?</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#caller">caller</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#completable">completable</a></span></code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#complete">complete</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#complete">complete</a></span></code>
+<div class="block">Is this operation completable?</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a></code></td>
@@ -174,6 +186,11 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#ObserverContextImpl-org.apache.hadoop.hbase.security.User-">ObserverContextImpl</a></span>(<a
 href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&nbsp;caller)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#ObserverContextImpl-org.apache.hadoop.hbase.security.User-boolean-boolean-">ObserverContextImpl</a></span>(<a
 href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&nbsp;caller,
+                   boolean&nbsp;bypassable,
+                   boolean&nbsp;completable)</code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -192,15 +209,16 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#bypass--">bypass</a></span>()</code>
-<div class="block">Call to indicate that the current coprocessor's return 
value should be
- used in place of the normal HBase obtained value.</div>
+<div class="block">Call to indicate that the current coprocessor's return 
value (or parameter -- depends on the
+ call-type) should be used in place of the value that would be obtained via 
normal processing;
+ i.e.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#complete--">complete</a></span>()</code>
-<div class="block">Call to indicate that additional coprocessors further down 
the execution
- chain do not need to be invoked.</div>
+<div class="block">Call to skip out on calling remaining coprocessors in 
current execution chain (there may be
+ more than one coprocessor chained to a method call).</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
@@ -220,14 +238,22 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#getEnvironment--">getEnvironment</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#isBypassable--">isBypassable</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#isCompleable--">isCompleable</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#prepare-E-">prepare</a></span>(<a
 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#shouldBypass--">shouldBypass</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#shouldComplete--">shouldComplete</a></span>()</code>&nbsp;</td>
 </tr>
@@ -271,13 +297,33 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <pre>private&nbsp;boolean <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.37">bypass</a></pre>
 </li>
 </ul>
+<a name="bypassable">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bypassable</h4>
+<pre>private final&nbsp;boolean <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.41">bypassable</a></pre>
+<div class="block">Is this operation bypassable?</div>
+</li>
+</ul>
 <a name="complete">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>complete</h4>
-<pre>private&nbsp;boolean <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.38">complete</a></pre>
+<pre>private&nbsp;boolean <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.45">complete</a></pre>
+<div class="block">Is this operation completable?</div>
+</li>
+</ul>
+<a name="completable">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>completable</h4>
+<pre>private final&nbsp;boolean <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.46">completable</a></pre>
 </li>
 </ul>
 <a name="caller">
@@ -286,7 +332,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>caller</h4>
-<pre>private final&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a> <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.39">caller</a></pre>
+<pre>private final&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a> <a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.47">caller</a></pre>
 </li>
 </ul>
 </li>
@@ -300,10 +346,21 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <a name="ObserverContextImpl-org.apache.hadoop.hbase.security.User-">
 <!--   -->
 </a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ObserverContextImpl</h4>
+<pre>public&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.49">ObserverContextImpl</a>(<a
 href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&nbsp;caller)</pre>
+</li>
+</ul>
+<a 
name="ObserverContextImpl-org.apache.hadoop.hbase.security.User-boolean-boolean-">
+<!--   -->
+</a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ObserverContextImpl</h4>
-<pre>public&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.41">ObserverContextImpl</a>(<a
 href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&nbsp;caller)</pre>
+<pre>public&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.53">ObserverContextImpl</a>(<a
 href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&nbsp;caller,
+                           boolean&nbsp;bypassable,
+                           boolean&nbsp;completable)</pre>
 </li>
 </ul>
 </li>
@@ -320,7 +377,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>getEnvironment</h4>
-<pre>public&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a>&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.45">getEnvironment</a>()</pre>
+<pre>public&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a>&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.59">getEnvironment</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#getEnvironment--">getEnvironment</a></code>&nbsp;in
 interface&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a> extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;</code></dd>
@@ -335,7 +392,16 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.49">prepare</a>(<a
 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a>&nbsp;env)</pre>
+<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.63">prepare</a>(<a
 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a>&nbsp;env)</pre>
+</li>
+</ul>
+<a name="isBypassable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isBypassable</h4>
+<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.67">isBypassable</a>()</pre>
 </li>
 </ul>
 <a name="bypass--">
@@ -344,30 +410,65 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>bypass</h4>
-<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.53">bypass</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.71">bypass</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from 
interface:&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--">ObserverContext</a></code></span></div>
-<div class="block">Call to indicate that the current coprocessor's return 
value should be
- used in place of the normal HBase obtained value.</div>
+<div class="block">Call to indicate that the current coprocessor's return 
value (or parameter -- depends on the
+ call-type) should be used in place of the value that would be obtained via 
normal processing;
+ i.e. bypass the core call and return the Coprocessor's result instead. DOES 
NOT work for all
+ Coprocessor invocations, only on a small subset of methods, mostly preXXX 
calls in
+ RegionObserver. Check javadoc on the pertinent Coprocessor Observer to see if
+ <code>bypass</code> is supported.
+ <p>This behavior of honoring only a subset of methods is new since 
hbase-2.0.0.
+ <p>Where bypass is supported what is being bypassed is all of the core code
+ implementing the remainder of the operation. In order to understand what
+ calling bypass() will skip, a coprocessor implementer should read and
+ understand all of the remaining code and its nuances. Although this
+ is good practice for coprocessor developers in general, it demands a lot.
+ What is skipped is extremely version dependent. The core code will vary, 
perhaps significantly,
+ even between point releases. We do not provide the promise of consistent 
behavior even between
+ point releases for the bypass semantic. To achieve
+ that we could not change any code between hook points. Therefore the
+ coprocessor implementer becomes an HBase core developer in practice as soon
+ as they rely on bypass(). Every release of HBase may break the assumption
+ that the replacement for the bypassed code takes care of all necessary
+ skipped concerns. Because those concerns can change at any point, such an
+ assumption is never safe.</p></div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--">bypass</a></code>&nbsp;in
 interface&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a> extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;</code></dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--"><code>ObserverContext.complete()</code></a></dd>
 </dl>
 </li>
 </ul>
+<a name="isCompleable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isCompleable</h4>
+<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.78">isCompleable</a>()</pre>
+</li>
+</ul>
 <a name="complete--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>complete</h4>
-<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.57">complete</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.82">complete</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from 
interface:&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--">ObserverContext</a></code></span></div>
-<div class="block">Call to indicate that additional coprocessors further down 
the execution
- chain do not need to be invoked.  Implies that this coprocessor's response
- is definitive.</div>
+<div class="block">Call to skip out on calling remaining coprocessors in 
current execution chain (there may be
+ more than one coprocessor chained to a method call). Implies that this 
coprocessor's response
+ is definitive.
+ <p>Since hbase-2.0.0, only <code>complete</code> of 'bypassable' methods has 
an effect. See
+ javadoc on the Coprocessor Observer method as to whether bypass (and thereby 
'complete') is
+ supported. This behavior of honoring only a subset of methods is new since 
hbase-2.0.0.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--">complete</a></code>&nbsp;in
 interface&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html"
 title="type parameter in ObserverContextImpl">E</a> extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;</code></dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--"><code>ObserverContext.bypass()</code></a></dd>
 </dl>
 </li>
 </ul>
@@ -377,7 +478,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldBypass</h4>
-<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.65">shouldBypass</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.93">shouldBypass</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>true</code>, if <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#bypass--"><code>ObserverContext.bypass()</code></a>
 was called by one of the loaded
@@ -391,7 +492,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldComplete</h4>
-<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.77">shouldComplete</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.108">shouldComplete</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>true</code>, if <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#complete--"><code>ObserverContext.complete()</code></a>
 was called by one of the loaded
@@ -405,7 +506,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <ul class="blockList">
 <li class="blockList">
 <h4>getCaller</h4>
-<pre>public&nbsp;<a 
href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true";
 title="class or interface in java.util">Optional</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.85">getCaller</a>()</pre>
+<pre>public&nbsp;<a 
href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true";
 title="class or interface in java.util">Optional</a>&lt;<a 
href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class 
in org.apache.hadoop.hbase.security">User</a>&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.119">getCaller</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from 
interface:&nbsp;<code><a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html#getCaller--">ObserverContext</a></code></span></div>
 <div class="block">Returns the active user for the coprocessor call. If an 
explicit <code>User</code> instance was
  provided to the constructor, that will be returned, otherwise if we are in 
the context of an
@@ -426,7 +527,7 @@ implements <a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverC
 <li class="blockList">
 <h4>createAndPrepare</h4>
 <pre><a 
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true";
 title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;&lt;E extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;E&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.100">createAndPrepare</a>(E&nbsp;env)</pre>
+public static&nbsp;&lt;E extends <a 
href="../../../../../org/apache/hadoop/hbase/CoprocessorEnvironment.html" 
title="interface in 
org.apache.hadoop.hbase">CoprocessorEnvironment</a>&gt;&nbsp;<a 
href="../../../../../org/apache/hadoop/hbase/coprocessor/ObserverContext.html" 
title="interface in 
org.apache.hadoop.hbase.coprocessor">ObserverContext</a>&lt;E&gt;&nbsp;<a 
href="../../../../../src-html/org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.html#line.134">createAndPrepare</a>(E&nbsp;env)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">Instantiates a new ObserverContext instance if the passed 
reference is <code>null</code> and
  sets the environment in the new or existing instance. This allows deferring 
the instantiation

Reply via email to