blob: e2d03589985f2ce6de0814c830c17650bb8c0163 [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>RpcCallContext (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="RpcCallContext (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":18,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default 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/RpcCallContext.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/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/ipc/RpcCallContext.html" target="_top">Frames</a></li>
<li><a href="RpcCallContext.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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.ipc</div>
<h2 title="Interface RpcCallContext" class="title">Interface RpcCallContext</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Subinterfaces:</dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCall.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCall</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/ipc/NettyServerCall.html" title="class in org.apache.hadoop.hbase.ipc">NettyServerCall</a>, <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerCall.html" title="class in org.apache.hadoop.hbase.ipc">ServerCall</a>, <a href="../../../../../org/apache/hadoop/hbase/ipc/SimpleServerCall.html" title="class in org.apache.hadoop.hbase.ipc">SimpleServerCall</a></dd>
</dl>
<hr>
<br>
<pre>@InterfaceAudience.Private
public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.32">RpcCallContext</a></pre>
<div class="block">Interface of all necessary to carry out a RPC service invocation on the server. This interface
focus on the information needed or obtained during the actual execution of the service method.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== 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="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default 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>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#disconnectSince--">disconnectSince</a></span>()</code>
<div class="block">Check if the caller who made this IPC call has disconnected.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getBlockBytesScanned--">getBlockBytesScanned</a></span>()</code>
<div class="block">Get the number of block bytes scanned by the current call.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getClientVersionInfo--">getClientVersionInfo</a></span>()</code>
<div class="block">Returns the client version info, or null if the information is not present</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRemoteAddress--">getRemoteAddress</a></span>()</code>
<div class="block">Returns Address of remote client in this call</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="https://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;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRequestUser--">getRequestUser</a></span>()</code>
<div class="block">Returns the user credentials associated with the current RPC request or not present if no
credentials were provided.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>default <a href="https://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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRequestUserName--">getRequestUserName</a></span>()</code>
<div class="block">Returns Current request's user name or not present if none ongoing.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseCellSize--">getResponseCellSize</a></span>()</code>
<div class="block">The size of response cells that have been accumulated so far.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseExceptionSize--">getResponseExceptionSize</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementBlockBytesScanned-long-">incrementBlockBytesScanned</a></span>(long&nbsp;blockSize)</code>
<div class="block">Increment the number of block bytes scanned by the current call.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseCellSize-long-">incrementResponseCellSize</a></span>(long&nbsp;cellSize)</code>
<div class="block">Add on the given amount to the retained cell size.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseExceptionSize-long-">incrementResponseExceptionSize</a></span>(long&nbsp;exceptionSize)</code>&nbsp;</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#isClientCellBlockSupported--">isClientCellBlockSupported</a></span>()</code>
<div class="block">If the client connected and specified a codec to use, then we will use this codec making
cellblocks to return.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#isRetryImmediatelySupported--">isRetryImmediatelySupported</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#setCallBack-org.apache.hadoop.hbase.ipc.RpcCallback-">setCallBack</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;callback)</code>
<div class="block">Sets a callback which has to be executed at the end of this RPC call.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="disconnectSince--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>disconnectSince</h4>
<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.39">disconnectSince</a>()</pre>
<div class="block">Check if the caller who made this IPC call has disconnected. If called from outside the context
of IPC, this does nothing.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>&lt; 0 if the caller is still connected. The time in ms since the disconnection
otherwise</dd>
</dl>
</li>
</ul>
<a name="isClientCellBlockSupported--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isClientCellBlockSupported</h4>
<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.49">isClientCellBlockSupported</a>()</pre>
<div class="block">If the client connected and specified a codec to use, then we will use this codec making
cellblocks to return. If the client did not specify a codec, we assume it does not support
cellblocks and will return all content protobuf'd (though it makes our serving slower). We need
to ask this question per call because a server could be hosting both clients that support
cellblocks while fielding requests from clients that do not.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if the client supports cellblocks, else return all content in pb</dd>
</dl>
</li>
</ul>
<a name="getRequestUser--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRequestUser</h4>
<pre><a href="https://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/ipc/RpcCallContext.html#line.56">getRequestUser</a>()</pre>
<div class="block">Returns the user credentials associated with the current RPC request or not present if no
credentials were provided.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A User</dd>
</dl>
</li>
</ul>
<a name="getRequestUserName--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRequestUserName</h4>
<pre>default&nbsp;<a href="https://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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.59">getRequestUserName</a>()</pre>
<div class="block">Returns Current request's user name or not present if none ongoing.</div>
</li>
</ul>
<a name="getRemoteAddress--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRemoteAddress</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.64">getRemoteAddress</a>()</pre>
<div class="block">Returns Address of remote client in this call</div>
</li>
</ul>
<a name="getClientVersionInfo--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getClientVersionInfo</h4>
<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.VersionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.67">getClientVersionInfo</a>()</pre>
<div class="block">Returns the client version info, or null if the information is not present</div>
</li>
</ul>
<a name="setCallBack-org.apache.hadoop.hbase.ipc.RpcCallback-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setCallBack</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.73">setCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;callback)</pre>
<div class="block">Sets a callback which has to be executed at the end of this RPC call. Such a callback is an
optional one for any Rpc call.</div>
</li>
</ul>
<a name="isRetryImmediatelySupported--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRetryImmediatelySupported</h4>
<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.75">isRetryImmediatelySupported</a>()</pre>
</li>
</ul>
<a name="getResponseCellSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getResponseCellSize</h4>
<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.81">getResponseCellSize</a>()</pre>
<div class="block">The size of response cells that have been accumulated so far. This along with the corresponding
increment call is used to ensure that multi's or scans dont get too excessively large</div>
</li>
</ul>
<a name="incrementResponseCellSize-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>incrementResponseCellSize</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.88">incrementResponseCellSize</a>(long&nbsp;cellSize)</pre>
<div class="block">Add on the given amount to the retained cell size. This is not thread safe and not synchronized
at all. If this is used by more than one thread then everything will break. Since this is
called for every row synchronization would be too onerous.</div>
</li>
</ul>
<a name="getBlockBytesScanned--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBlockBytesScanned</h4>
<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.95">getBlockBytesScanned</a>()</pre>
<div class="block">Get the number of block bytes scanned by the current call. In order to serve a response, 1 or
more lower level blocks must be loaded (from disk or cache) and scanned for the requested
cells. This value includes the total block size for each block loaded for the request.</div>
</li>
</ul>
<a name="incrementBlockBytesScanned-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>incrementBlockBytesScanned</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.101">incrementBlockBytesScanned</a>(long&nbsp;blockSize)</pre>
<div class="block">Increment the number of block bytes scanned by the current call. See
<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getBlockBytesScanned--"><code>getBlockBytesScanned()</code></a> for details.</div>
</li>
</ul>
<a name="getResponseExceptionSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getResponseExceptionSize</h4>
<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.103">getResponseExceptionSize</a>()</pre>
</li>
</ul>
<a name="incrementResponseExceptionSize-long-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>incrementResponseExceptionSize</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.105">incrementResponseExceptionSize</a>(long&nbsp;exceptionSize)</pre>
</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/RpcCallContext.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/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/ipc/RpcCallContext.html" target="_top">Frames</a></li>
<li><a href="RpcCallContext.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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>