http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.html
index 4262b8f..0a3a353 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.html
@@ -53,81 +53,83 @@
 <span class="sourceLineNo">045</span>    this.registry = registry;<a 
name="line.45"></a>
 <span class="sourceLineNo">046</span>  }<a name="line.46"></a>
 <span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation() {<a 
name="line.48"></a>
+<span class="sourceLineNo">048</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(boolean reload) {<a 
name="line.48"></a>
 <span class="sourceLineNo">049</span>    for (;;) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      HRegionLocation metaRegionLocation 
= this.metaRegionLocation.get();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      if (metaRegionLocation != null) {<a 
name="line.51"></a>
-<span class="sourceLineNo">052</span>        return 
CompletableFuture.completedFuture(metaRegionLocation);<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      }<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      if (LOG.isTraceEnabled()) {<a 
name="line.54"></a>
-<span class="sourceLineNo">055</span>        LOG.trace("Meta region location 
cache is null, try fetching from registry.");<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      if 
(metaRelocateFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a 
name="line.57"></a>
-<span class="sourceLineNo">058</span>        if (LOG.isDebugEnabled()) {<a 
name="line.58"></a>
-<span class="sourceLineNo">059</span>          LOG.debug("Start fetching meta 
region location from registry.");<a name="line.59"></a>
-<span class="sourceLineNo">060</span>        }<a name="line.60"></a>
-<span class="sourceLineNo">061</span>        
CompletableFuture&lt;HRegionLocation&gt; future = metaRelocateFuture.get();<a 
name="line.61"></a>
-<span class="sourceLineNo">062</span>        
registry.getMetaRegionLocation().whenComplete((locs, error) -&gt; {<a 
name="line.62"></a>
-<span class="sourceLineNo">063</span>          if (error != null) {<a 
name="line.63"></a>
-<span class="sourceLineNo">064</span>            if (LOG.isDebugEnabled()) {<a 
name="line.64"></a>
-<span class="sourceLineNo">065</span>              LOG.debug("Failed to fetch 
meta region location from registry", error);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>            }<a name="line.66"></a>
-<span class="sourceLineNo">067</span>            
metaRelocateFuture.getAndSet(null).completeExceptionally(error);<a 
name="line.67"></a>
-<span class="sourceLineNo">068</span>            return;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>          }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          HRegionLocation loc = 
locs.getDefaultRegionLocation();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          if (LOG.isDebugEnabled()) {<a 
name="line.71"></a>
-<span class="sourceLineNo">072</span>            LOG.debug("The fetched meta 
region location is " + loc);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>          }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>          // Here we update cache before 
reset future, so it is possible that someone can get a<a name="line.74"></a>
-<span class="sourceLineNo">075</span>          // stale value. Consider 
this:<a name="line.75"></a>
-<span class="sourceLineNo">076</span>          // 1. update cache<a 
name="line.76"></a>
-<span class="sourceLineNo">077</span>          // 2. someone clear the cache 
and relocate again<a name="line.77"></a>
-<span class="sourceLineNo">078</span>          // 3. the metaRelocateFuture is 
not null so the old future is used.<a name="line.78"></a>
-<span class="sourceLineNo">079</span>          // 4. we clear 
metaRelocateFuture and complete the future in it with the value being<a 
name="line.79"></a>
-<span class="sourceLineNo">080</span>          // cleared in step 2.<a 
name="line.80"></a>
-<span class="sourceLineNo">081</span>          // But we do not think it is a 
big deal as it rarely happens, and even if it happens, the<a name="line.81"></a>
-<span class="sourceLineNo">082</span>          // caller will retry again 
later, no correctness problems.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          
this.metaRegionLocation.set(loc);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          metaRelocateFuture.set(null);<a 
name="line.84"></a>
-<span class="sourceLineNo">085</span>          future.complete(loc);<a 
name="line.85"></a>
-<span class="sourceLineNo">086</span>        });<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      } else {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        
CompletableFuture&lt;HRegionLocation&gt; future = metaRelocateFuture.get();<a 
name="line.88"></a>
-<span class="sourceLineNo">089</span>        if (future != null) {<a 
name="line.89"></a>
-<span class="sourceLineNo">090</span>          return future;<a 
name="line.90"></a>
-<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.96"></a>
-<span class="sourceLineNo">097</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; 
metaRegionLocation.get(),<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      newLoc -&gt; {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        for (;;) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>          HRegionLocation oldLoc = 
metaRegionLocation.get();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          if (oldLoc != null &amp;&amp; 
(oldLoc.getSeqNum() &gt; newLoc.getSeqNum() ||<a name="line.101"></a>
-<span class="sourceLineNo">102</span>              
oldLoc.getServerName().equals(newLoc.getServerName()))) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>            return;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          if 
(metaRegionLocation.compareAndSet(oldLoc, newLoc)) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>            return;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }, l -&gt; {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        for (;;) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          HRegionLocation oldLoc = 
metaRegionLocation.get();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          if (!canUpdate(l, oldLoc) || 
metaRegionLocation.compareAndSet(oldLoc, null)) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>            return;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      });<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  void clearCache() {<a 
name="line.119"></a>
-<span class="sourceLineNo">120</span>    metaRegionLocation.set(null);<a 
name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>}<a name="line.122"></a>
+<span class="sourceLineNo">050</span>      if (!reload) {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>        HRegionLocation 
metaRegionLocation = this.metaRegionLocation.get();<a name="line.51"></a>
+<span class="sourceLineNo">052</span>        if (metaRegionLocation != null) 
{<a name="line.52"></a>
+<span class="sourceLineNo">053</span>          return 
CompletableFuture.completedFuture(metaRegionLocation);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>        }<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      }<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      if (LOG.isTraceEnabled()) {<a 
name="line.56"></a>
+<span class="sourceLineNo">057</span>        LOG.trace("Meta region location 
cache is null, try fetching from registry.");<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      }<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      if 
(metaRelocateFuture.compareAndSet(null, new CompletableFuture&lt;&gt;())) {<a 
name="line.59"></a>
+<span class="sourceLineNo">060</span>        if (LOG.isDebugEnabled()) {<a 
name="line.60"></a>
+<span class="sourceLineNo">061</span>          LOG.debug("Start fetching meta 
region location from registry.");<a name="line.61"></a>
+<span class="sourceLineNo">062</span>        }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        
CompletableFuture&lt;HRegionLocation&gt; future = metaRelocateFuture.get();<a 
name="line.63"></a>
+<span class="sourceLineNo">064</span>        
registry.getMetaRegionLocation().whenComplete((locs, error) -&gt; {<a 
name="line.64"></a>
+<span class="sourceLineNo">065</span>          if (error != null) {<a 
name="line.65"></a>
+<span class="sourceLineNo">066</span>            if (LOG.isDebugEnabled()) {<a 
name="line.66"></a>
+<span class="sourceLineNo">067</span>              LOG.debug("Failed to fetch 
meta region location from registry", error);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>            }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>            
metaRelocateFuture.getAndSet(null).completeExceptionally(error);<a 
name="line.69"></a>
+<span class="sourceLineNo">070</span>            return;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          HRegionLocation loc = 
locs.getDefaultRegionLocation();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          if (LOG.isDebugEnabled()) {<a 
name="line.73"></a>
+<span class="sourceLineNo">074</span>            LOG.debug("The fetched meta 
region location is " + loc);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>          }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>          // Here we update cache before 
reset future, so it is possible that someone can get a<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          // stale value. Consider 
this:<a name="line.77"></a>
+<span class="sourceLineNo">078</span>          // 1. update cache<a 
name="line.78"></a>
+<span class="sourceLineNo">079</span>          // 2. someone clear the cache 
and relocate again<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          // 3. the metaRelocateFuture is 
not null so the old future is used.<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          // 4. we clear 
metaRelocateFuture and complete the future in it with the value being<a 
name="line.81"></a>
+<span class="sourceLineNo">082</span>          // cleared in step 2.<a 
name="line.82"></a>
+<span class="sourceLineNo">083</span>          // But we do not think it is a 
big deal as it rarely happens, and even if it happens, the<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          // caller will retry again 
later, no correctness problems.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          
this.metaRegionLocation.set(loc);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          metaRelocateFuture.set(null);<a 
name="line.86"></a>
+<span class="sourceLineNo">087</span>          future.complete(loc);<a 
name="line.87"></a>
+<span class="sourceLineNo">088</span>        });<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      } else {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        
CompletableFuture&lt;HRegionLocation&gt; future = metaRelocateFuture.get();<a 
name="line.90"></a>
+<span class="sourceLineNo">091</span>        if (future != null) {<a 
name="line.91"></a>
+<span class="sourceLineNo">092</span>          return future;<a 
name="line.92"></a>
+<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.98"></a>
+<span class="sourceLineNo">099</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; 
metaRegionLocation.get(),<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      newLoc -&gt; {<a 
name="line.100"></a>
+<span class="sourceLineNo">101</span>        for (;;) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          HRegionLocation oldLoc = 
metaRegionLocation.get();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          if (oldLoc != null &amp;&amp; 
(oldLoc.getSeqNum() &gt; newLoc.getSeqNum() ||<a name="line.103"></a>
+<span class="sourceLineNo">104</span>              
oldLoc.getServerName().equals(newLoc.getServerName()))) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>            return;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>          }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>          if 
(metaRegionLocation.compareAndSet(oldLoc, newLoc)) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>            return;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        }<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      }, l -&gt; {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        for (;;) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          HRegionLocation oldLoc = 
metaRegionLocation.get();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>          if (!canUpdate(l, oldLoc) || 
metaRegionLocation.compareAndSet(oldLoc, null)) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>            return;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>          }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      });<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  void clearCache() {<a 
name="line.121"></a>
+<span class="sourceLineNo">122</span>    metaRegionLocation.set(null);<a 
name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>}<a name="line.124"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
index 486ce04..13bde46 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -400,77 +400,81 @@
 <span class="sourceLineNo">392</span>  // placed before it. Used for reverse 
scan. See the comment of<a name="line.392"></a>
 <span class="sourceLineNo">393</span>  // 
AsyncRegionLocator.getPreviousRegionLocation.<a name="line.393"></a>
 <span class="sourceLineNo">394</span>  private 
CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName 
tableName,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType) {<a name="line.395"></a>
+<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType, boolean reload) {<a name="line.395"></a>
 <span class="sourceLineNo">396</span>    // AFTER should be convert to CURRENT 
before calling this method<a name="line.396"></a>
 <span class="sourceLineNo">397</span>    assert 
!locateType.equals(RegionLocateType.AFTER);<a name="line.397"></a>
 <span class="sourceLineNo">398</span>    TableCache tableCache = 
getTableCache(tableName);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (loc != null) {<a 
name="line.400"></a>
-<span class="sourceLineNo">401</span>      return 
CompletableFuture.completedFuture(loc);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    LocateRequest req;<a 
name="line.404"></a>
-<span class="sourceLineNo">405</span>    boolean sendRequest = false;<a 
name="line.405"></a>
-<span class="sourceLineNo">406</span>    synchronized (tableCache) {<a 
name="line.406"></a>
-<span class="sourceLineNo">407</span>      // check again<a 
name="line.407"></a>
-<span class="sourceLineNo">408</span>      loc = locateInCache(tableCache, 
tableName, row, locateType);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if (loc != null) {<a 
name="line.409"></a>
-<span class="sourceLineNo">410</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      req = new LocateRequest(row, 
locateType);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      future = 
tableCache.allRequests.get(req);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (future == null) {<a 
name="line.414"></a>
-<span class="sourceLineNo">415</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        tableCache.allRequests.put(req, 
future);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          tableCache.send(req);<a 
name="line.418"></a>
-<span class="sourceLineNo">419</span>          sendRequest = true;<a 
name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (sendRequest) {<a 
name="line.423"></a>
-<span class="sourceLineNo">424</span>      locateInMeta(tableName, req);<a 
name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return future;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      RegionLocateType locateType) {<a 
name="line.430"></a>
-<span class="sourceLineNo">431</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return 
getRegionLocationInternal(tableName, row, locateType);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } else {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // algorithm to locate it.<a 
name="line.435"></a>
-<span class="sourceLineNo">436</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        row = 
createClosestRowAfter(row);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT);<a 
name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.443"></a>
-<span class="sourceLineNo">444</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.444"></a>
-<span class="sourceLineNo">445</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (tableCache == null) {<a 
name="line.446"></a>
-<span class="sourceLineNo">447</span>        return null;<a 
name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  void clearCache(TableName tableName) 
{<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    if (tableCache == null) {<a 
name="line.455"></a>
-<span class="sourceLineNo">456</span>      return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    synchronized (tableCache) {<a 
name="line.458"></a>
-<span class="sourceLineNo">459</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        IOException error = new 
IOException("Cache cleared");<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>}<a name="line.465"></a>
+<span class="sourceLineNo">399</span>    if (!reload) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (loc != null) {<a 
name="line.401"></a>
+<span class="sourceLineNo">402</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    LocateRequest req;<a 
name="line.406"></a>
+<span class="sourceLineNo">407</span>    boolean sendRequest = false;<a 
name="line.407"></a>
+<span class="sourceLineNo">408</span>    synchronized (tableCache) {<a 
name="line.408"></a>
+<span class="sourceLineNo">409</span>      // check again<a 
name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (!reload) {<a 
name="line.410"></a>
+<span class="sourceLineNo">411</span>        HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (loc != null) {<a 
name="line.412"></a>
+<span class="sourceLineNo">413</span>          return 
CompletableFuture.completedFuture(loc);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      req = new LocateRequest(row, 
locateType);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      future = 
tableCache.allRequests.get(req);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (future == null) {<a 
name="line.418"></a>
+<span class="sourceLineNo">419</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        tableCache.allRequests.put(req, 
future);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          tableCache.send(req);<a 
name="line.422"></a>
+<span class="sourceLineNo">423</span>          sendRequest = true;<a 
name="line.423"></a>
+<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sendRequest) {<a 
name="line.427"></a>
+<span class="sourceLineNo">428</span>      locateInMeta(tableName, req);<a 
name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return future;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      RegionLocateType locateType, 
boolean reload) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return 
getRegionLocationInternal(tableName, row, locateType, reload);<a 
name="line.436"></a>
+<span class="sourceLineNo">437</span>    } else {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // algorithm to locate it.<a 
name="line.439"></a>
+<span class="sourceLineNo">440</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        row = 
createClosestRowAfter(row);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a 
name="line.443"></a>
+<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.447"></a>
+<span class="sourceLineNo">448</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.448"></a>
+<span class="sourceLineNo">449</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (tableCache == null) {<a 
name="line.450"></a>
+<span class="sourceLineNo">451</span>        return null;<a 
name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  void clearCache(TableName tableName) 
{<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (tableCache == null) {<a 
name="line.459"></a>
+<span class="sourceLineNo">460</span>      return;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    synchronized (tableCache) {<a 
name="line.462"></a>
+<span class="sourceLineNo">463</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        IOException error = new 
IOException("Cache cleared");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>}<a name="line.469"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
index 486ce04..13bde46 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
@@ -400,77 +400,81 @@
 <span class="sourceLineNo">392</span>  // placed before it. Used for reverse 
scan. See the comment of<a name="line.392"></a>
 <span class="sourceLineNo">393</span>  // 
AsyncRegionLocator.getPreviousRegionLocation.<a name="line.393"></a>
 <span class="sourceLineNo">394</span>  private 
CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName 
tableName,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType) {<a name="line.395"></a>
+<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType, boolean reload) {<a name="line.395"></a>
 <span class="sourceLineNo">396</span>    // AFTER should be convert to CURRENT 
before calling this method<a name="line.396"></a>
 <span class="sourceLineNo">397</span>    assert 
!locateType.equals(RegionLocateType.AFTER);<a name="line.397"></a>
 <span class="sourceLineNo">398</span>    TableCache tableCache = 
getTableCache(tableName);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (loc != null) {<a 
name="line.400"></a>
-<span class="sourceLineNo">401</span>      return 
CompletableFuture.completedFuture(loc);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    LocateRequest req;<a 
name="line.404"></a>
-<span class="sourceLineNo">405</span>    boolean sendRequest = false;<a 
name="line.405"></a>
-<span class="sourceLineNo">406</span>    synchronized (tableCache) {<a 
name="line.406"></a>
-<span class="sourceLineNo">407</span>      // check again<a 
name="line.407"></a>
-<span class="sourceLineNo">408</span>      loc = locateInCache(tableCache, 
tableName, row, locateType);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if (loc != null) {<a 
name="line.409"></a>
-<span class="sourceLineNo">410</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      req = new LocateRequest(row, 
locateType);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      future = 
tableCache.allRequests.get(req);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (future == null) {<a 
name="line.414"></a>
-<span class="sourceLineNo">415</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        tableCache.allRequests.put(req, 
future);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          tableCache.send(req);<a 
name="line.418"></a>
-<span class="sourceLineNo">419</span>          sendRequest = true;<a 
name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (sendRequest) {<a 
name="line.423"></a>
-<span class="sourceLineNo">424</span>      locateInMeta(tableName, req);<a 
name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return future;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      RegionLocateType locateType) {<a 
name="line.430"></a>
-<span class="sourceLineNo">431</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return 
getRegionLocationInternal(tableName, row, locateType);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } else {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // algorithm to locate it.<a 
name="line.435"></a>
-<span class="sourceLineNo">436</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        row = 
createClosestRowAfter(row);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT);<a 
name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.443"></a>
-<span class="sourceLineNo">444</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.444"></a>
-<span class="sourceLineNo">445</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (tableCache == null) {<a 
name="line.446"></a>
-<span class="sourceLineNo">447</span>        return null;<a 
name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  void clearCache(TableName tableName) 
{<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    if (tableCache == null) {<a 
name="line.455"></a>
-<span class="sourceLineNo">456</span>      return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    synchronized (tableCache) {<a 
name="line.458"></a>
-<span class="sourceLineNo">459</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        IOException error = new 
IOException("Cache cleared");<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>}<a name="line.465"></a>
+<span class="sourceLineNo">399</span>    if (!reload) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (loc != null) {<a 
name="line.401"></a>
+<span class="sourceLineNo">402</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    LocateRequest req;<a 
name="line.406"></a>
+<span class="sourceLineNo">407</span>    boolean sendRequest = false;<a 
name="line.407"></a>
+<span class="sourceLineNo">408</span>    synchronized (tableCache) {<a 
name="line.408"></a>
+<span class="sourceLineNo">409</span>      // check again<a 
name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (!reload) {<a 
name="line.410"></a>
+<span class="sourceLineNo">411</span>        HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (loc != null) {<a 
name="line.412"></a>
+<span class="sourceLineNo">413</span>          return 
CompletableFuture.completedFuture(loc);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      req = new LocateRequest(row, 
locateType);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      future = 
tableCache.allRequests.get(req);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (future == null) {<a 
name="line.418"></a>
+<span class="sourceLineNo">419</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        tableCache.allRequests.put(req, 
future);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          tableCache.send(req);<a 
name="line.422"></a>
+<span class="sourceLineNo">423</span>          sendRequest = true;<a 
name="line.423"></a>
+<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sendRequest) {<a 
name="line.427"></a>
+<span class="sourceLineNo">428</span>      locateInMeta(tableName, req);<a 
name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return future;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      RegionLocateType locateType, 
boolean reload) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return 
getRegionLocationInternal(tableName, row, locateType, reload);<a 
name="line.436"></a>
+<span class="sourceLineNo">437</span>    } else {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // algorithm to locate it.<a 
name="line.439"></a>
+<span class="sourceLineNo">440</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        row = 
createClosestRowAfter(row);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a 
name="line.443"></a>
+<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.447"></a>
+<span class="sourceLineNo">448</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.448"></a>
+<span class="sourceLineNo">449</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (tableCache == null) {<a 
name="line.450"></a>
+<span class="sourceLineNo">451</span>        return null;<a 
name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  void clearCache(TableName tableName) 
{<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (tableCache == null) {<a 
name="line.459"></a>
+<span class="sourceLineNo">460</span>      return;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    synchronized (tableCache) {<a 
name="line.462"></a>
+<span class="sourceLineNo">463</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        IOException error = new 
IOException("Cache cleared");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>}<a name="line.469"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
index 486ce04..13bde46 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
@@ -400,77 +400,81 @@
 <span class="sourceLineNo">392</span>  // placed before it. Used for reverse 
scan. See the comment of<a name="line.392"></a>
 <span class="sourceLineNo">393</span>  // 
AsyncRegionLocator.getPreviousRegionLocation.<a name="line.393"></a>
 <span class="sourceLineNo">394</span>  private 
CompletableFuture&lt;HRegionLocation&gt; getRegionLocationInternal(TableName 
tableName,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType) {<a name="line.395"></a>
+<span class="sourceLineNo">395</span>      byte[] row, RegionLocateType 
locateType, boolean reload) {<a name="line.395"></a>
 <span class="sourceLineNo">396</span>    // AFTER should be convert to CURRENT 
before calling this method<a name="line.396"></a>
 <span class="sourceLineNo">397</span>    assert 
!locateType.equals(RegionLocateType.AFTER);<a name="line.397"></a>
 <span class="sourceLineNo">398</span>    TableCache tableCache = 
getTableCache(tableName);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (loc != null) {<a 
name="line.400"></a>
-<span class="sourceLineNo">401</span>      return 
CompletableFuture.completedFuture(loc);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    LocateRequest req;<a 
name="line.404"></a>
-<span class="sourceLineNo">405</span>    boolean sendRequest = false;<a 
name="line.405"></a>
-<span class="sourceLineNo">406</span>    synchronized (tableCache) {<a 
name="line.406"></a>
-<span class="sourceLineNo">407</span>      // check again<a 
name="line.407"></a>
-<span class="sourceLineNo">408</span>      loc = locateInCache(tableCache, 
tableName, row, locateType);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if (loc != null) {<a 
name="line.409"></a>
-<span class="sourceLineNo">410</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      req = new LocateRequest(row, 
locateType);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      future = 
tableCache.allRequests.get(req);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (future == null) {<a 
name="line.414"></a>
-<span class="sourceLineNo">415</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        tableCache.allRequests.put(req, 
future);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          tableCache.send(req);<a 
name="line.418"></a>
-<span class="sourceLineNo">419</span>          sendRequest = true;<a 
name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (sendRequest) {<a 
name="line.423"></a>
-<span class="sourceLineNo">424</span>      locateInMeta(tableName, req);<a 
name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return future;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      RegionLocateType locateType) {<a 
name="line.430"></a>
-<span class="sourceLineNo">431</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return 
getRegionLocationInternal(tableName, row, locateType);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } else {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // algorithm to locate it.<a 
name="line.435"></a>
-<span class="sourceLineNo">436</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        row = 
createClosestRowAfter(row);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT);<a 
name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.443"></a>
-<span class="sourceLineNo">444</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.444"></a>
-<span class="sourceLineNo">445</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      if (tableCache == null) {<a 
name="line.446"></a>
-<span class="sourceLineNo">447</span>        return null;<a 
name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  void clearCache(TableName tableName) 
{<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    if (tableCache == null) {<a 
name="line.455"></a>
-<span class="sourceLineNo">456</span>      return;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    synchronized (tableCache) {<a 
name="line.458"></a>
-<span class="sourceLineNo">459</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        IOException error = new 
IOException("Cache cleared");<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>}<a name="line.465"></a>
+<span class="sourceLineNo">399</span>    if (!reload) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (loc != null) {<a 
name="line.401"></a>
+<span class="sourceLineNo">402</span>        return 
CompletableFuture.completedFuture(loc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    
CompletableFuture&lt;HRegionLocation&gt; future;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    LocateRequest req;<a 
name="line.406"></a>
+<span class="sourceLineNo">407</span>    boolean sendRequest = false;<a 
name="line.407"></a>
+<span class="sourceLineNo">408</span>    synchronized (tableCache) {<a 
name="line.408"></a>
+<span class="sourceLineNo">409</span>      // check again<a 
name="line.409"></a>
+<span class="sourceLineNo">410</span>      if (!reload) {<a 
name="line.410"></a>
+<span class="sourceLineNo">411</span>        HRegionLocation loc = 
locateInCache(tableCache, tableName, row, locateType);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (loc != null) {<a 
name="line.412"></a>
+<span class="sourceLineNo">413</span>          return 
CompletableFuture.completedFuture(loc);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      req = new LocateRequest(row, 
locateType);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      future = 
tableCache.allRequests.get(req);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (future == null) {<a 
name="line.418"></a>
+<span class="sourceLineNo">419</span>        future = new 
CompletableFuture&lt;&gt;();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        tableCache.allRequests.put(req, 
future);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if 
(tableCache.hasQuota(maxConcurrentLocateRequestPerTable) &amp;&amp; 
!tableCache.isPending(req)) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          tableCache.send(req);<a 
name="line.422"></a>
+<span class="sourceLineNo">423</span>          sendRequest = true;<a 
name="line.423"></a>
+<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    if (sendRequest) {<a 
name="line.427"></a>
+<span class="sourceLineNo">428</span>      locateInMeta(tableName, req);<a 
name="line.428"></a>
+<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return future;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      RegionLocateType locateType, 
boolean reload) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    if 
(locateType.equals(RegionLocateType.BEFORE)) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      return 
getRegionLocationInternal(tableName, row, locateType, reload);<a 
name="line.436"></a>
+<span class="sourceLineNo">437</span>    } else {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      // as we know the exact row after 
us, so we can just create the new row, and use the same<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // algorithm to locate it.<a 
name="line.439"></a>
+<span class="sourceLineNo">440</span>      if 
(locateType.equals(RegionLocateType.AFTER)) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        row = 
createClosestRowAfter(row);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      return 
getRegionLocationInternal(tableName, row, RegionLocateType.CURRENT, reload);<a 
name="line.443"></a>
+<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.447"></a>
+<span class="sourceLineNo">448</span>    
AsyncRegionLocator.updateCachedLocation(loc, exception, l -&gt; {<a 
name="line.448"></a>
+<span class="sourceLineNo">449</span>      TableCache tableCache = 
cache.get(l.getRegionInfo().getTable());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (tableCache == null) {<a 
name="line.450"></a>
+<span class="sourceLineNo">451</span>        return null;<a 
name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      return 
tableCache.cache.get(l.getRegionInfo().getStartKey());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }, this::addToCache, 
this::removeFromCache);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  void clearCache(TableName tableName) 
{<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    TableCache tableCache = 
cache.remove(tableName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (tableCache == null) {<a 
name="line.459"></a>
+<span class="sourceLineNo">460</span>      return;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    synchronized (tableCache) {<a 
name="line.462"></a>
+<span class="sourceLineNo">463</span>      if 
(!tableCache.allRequests.isEmpty()) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        IOException error = new 
IOException("Cache cleared");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        
tableCache.allRequests.values().forEach(f -&gt; 
f.completeExceptionally(error));<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>}<a name="line.469"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncRegionLocator.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncRegionLocator.html 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncRegionLocator.html
index 153fe48..fa0c9e1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncRegionLocator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncRegionLocator.html
@@ -87,82 +87,87 @@
 <span class="sourceLineNo">079</span>  }<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
 <span class="sourceLineNo">081</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      RegionLocateType type, long 
timeoutNs) {<a name="line.82"></a>
+<span class="sourceLineNo">082</span>      RegionLocateType type, boolean 
reload, long timeoutNs) {<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    // meta region can not be split right 
now so we always call the same method.<a name="line.83"></a>
 <span class="sourceLineNo">084</span>    // Change it later if the meta table 
can have more than one regions.<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    
CompletableFuture&lt;HRegionLocation&gt; future =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        tableName.equals(META_TABLE_NAME) 
? metaRegionLocator.getRegionLocation()<a name="line.86"></a>
-<span class="sourceLineNo">087</span>            : 
nonMetaRegionLocator.getRegionLocation(tableName, row, type);<a 
name="line.87"></a>
+<span class="sourceLineNo">086</span>        tableName.equals(META_TABLE_NAME) 
? metaRegionLocator.getRegionLocation(reload)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>            : 
nonMetaRegionLocator.getRegionLocation(tableName, row, type, reload);<a 
name="line.87"></a>
 <span class="sourceLineNo">088</span>    return withTimeout(future, 
timeoutNs,<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      () -&gt; "Timeout(" + 
TimeUnit.NANOSECONDS.toMillis(timeoutNs)<a name="line.89"></a>
-<span class="sourceLineNo">090</span>          + "ms) waiting for region 
location for " + tableName + ", row='"<a name="line.90"></a>
-<span class="sourceLineNo">091</span>          + Bytes.toStringBinary(row) + 
"'");<a name="line.91"></a>
+<span class="sourceLineNo">089</span>      () -&gt; "Timeout(" + 
TimeUnit.NANOSECONDS.toMillis(timeoutNs) +<a name="line.89"></a>
+<span class="sourceLineNo">090</span>          "ms) waiting for region 
location for " + tableName + ", row='" +<a name="line.90"></a>
+<span class="sourceLineNo">091</span>          Bytes.toStringBinary(row) + 
"'");<a name="line.91"></a>
 <span class="sourceLineNo">092</span>  }<a name="line.92"></a>
 <span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  static boolean 
canUpdate(HRegionLocation loc, HRegionLocation oldLoc) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    // Do not need to update if no such 
location, or the location is newer, or the location is not<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // same with us<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    return oldLoc != null &amp;&amp; 
oldLoc.getSeqNum() &lt;= loc.getSeqNum()<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        &amp;&amp; 
oldLoc.getServerName().equals(loc.getServerName());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  static void 
updateCachedLocation(HRegionLocation loc, Throwable exception,<a 
name="line.101"></a>
-<span class="sourceLineNo">102</span>      Function&lt;HRegionLocation, 
HRegionLocation&gt; cachedLocationSupplier,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      Consumer&lt;HRegionLocation&gt; 
addToCache, Consumer&lt;HRegionLocation&gt; removeFromCache) {<a 
name="line.103"></a>
-<span class="sourceLineNo">104</span>    HRegionLocation oldLoc = 
cachedLocationSupplier.apply(loc);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if (LOG.isDebugEnabled()) {<a 
name="line.105"></a>
-<span class="sourceLineNo">106</span>      LOG.debug("Try updating " + loc + 
", the old value is " + oldLoc, exception);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    if (!canUpdate(loc, oldLoc)) {<a 
name="line.108"></a>
-<span class="sourceLineNo">109</span>      return;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    Throwable cause = 
findException(exception);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    if (LOG.isDebugEnabled()) {<a 
name="line.112"></a>
-<span class="sourceLineNo">113</span>      LOG.debug("The actual exception 
when updating " + loc, cause);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if (cause == null || 
!isMetaClearingException(cause)) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      if (LOG.isDebugEnabled()) {<a 
name="line.116"></a>
-<span class="sourceLineNo">117</span>        LOG.debug(<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          "Will not update " + loc + " 
because the exception is null or not the one we care about");<a 
name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    if (cause instanceof 
RegionMovedException) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      RegionMovedException rme = 
(RegionMovedException) cause;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      HRegionLocation newLoc =<a 
name="line.124"></a>
-<span class="sourceLineNo">125</span>          new 
HRegionLocation(loc.getRegionInfo(), rme.getServerName(), 
rme.getLocationSeqNum());<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (LOG.isDebugEnabled()) {<a 
name="line.126"></a>
-<span class="sourceLineNo">127</span>        LOG.debug(<a name="line.127"></a>
-<span class="sourceLineNo">128</span>          "Try updating " + loc + " with 
the new location " + newLoc + " constructed by " + rme);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      addToCache.accept(newLoc);<a 
name="line.130"></a>
-<span class="sourceLineNo">131</span>    } else {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      if (LOG.isDebugEnabled()) {<a 
name="line.132"></a>
-<span class="sourceLineNo">133</span>        LOG.debug("Try removing " + loc + 
" from cache");<a name="line.133"></a>
+<span class="sourceLineNo">094</span>  
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(TableName tableName, 
byte[] row,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      RegionLocateType type, long 
timeoutNs) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return getRegionLocation(tableName, 
row, type, false, timeoutNs);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  static boolean 
canUpdate(HRegionLocation loc, HRegionLocation oldLoc) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    // Do not need to update if no such 
location, or the location is newer, or the location is not<a 
name="line.100"></a>
+<span class="sourceLineNo">101</span>    // same with us<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    return oldLoc != null &amp;&amp; 
oldLoc.getSeqNum() &lt;= loc.getSeqNum() &amp;&amp;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        
oldLoc.getServerName().equals(loc.getServerName());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static void 
updateCachedLocation(HRegionLocation loc, Throwable exception,<a 
name="line.106"></a>
+<span class="sourceLineNo">107</span>      Function&lt;HRegionLocation, 
HRegionLocation&gt; cachedLocationSupplier,<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      Consumer&lt;HRegionLocation&gt; 
addToCache, Consumer&lt;HRegionLocation&gt; removeFromCache) {<a 
name="line.108"></a>
+<span class="sourceLineNo">109</span>    HRegionLocation oldLoc = 
cachedLocationSupplier.apply(loc);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    if (LOG.isDebugEnabled()) {<a 
name="line.110"></a>
+<span class="sourceLineNo">111</span>      LOG.debug("Try updating " + loc + 
", the old value is " + oldLoc, exception);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    if (!canUpdate(loc, oldLoc)) {<a 
name="line.113"></a>
+<span class="sourceLineNo">114</span>      return;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Throwable cause = 
findException(exception);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    if (LOG.isDebugEnabled()) {<a 
name="line.117"></a>
+<span class="sourceLineNo">118</span>      LOG.debug("The actual exception 
when updating " + loc, cause);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    if (cause == null || 
!isMetaClearingException(cause)) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (LOG.isDebugEnabled()) {<a 
name="line.121"></a>
+<span class="sourceLineNo">122</span>        LOG.debug(<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          "Will not update " + loc + " 
because the exception is null or not the one we care about");<a 
name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      return;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (cause instanceof 
RegionMovedException) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      RegionMovedException rme = 
(RegionMovedException) cause;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      HRegionLocation newLoc =<a 
name="line.129"></a>
+<span class="sourceLineNo">130</span>          new 
HRegionLocation(loc.getRegionInfo(), rme.getServerName(), 
rme.getLocationSeqNum());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      if (LOG.isDebugEnabled()) {<a 
name="line.131"></a>
+<span class="sourceLineNo">132</span>        LOG.debug(<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          "Try updating " + loc + " with 
the new location " + newLoc + " constructed by " + rme);<a name="line.133"></a>
 <span class="sourceLineNo">134</span>      }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      removeFromCache.accept(loc);<a 
name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.139"></a>
-<span class="sourceLineNo">140</span>    if 
(loc.getRegionInfo().isMetaTable()) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      
metaRegionLocator.updateCachedLocation(loc, exception);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    } else {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      
nonMetaRegionLocator.updateCachedLocation(loc, exception);<a 
name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  void clearCache(TableName tableName) 
{<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (LOG.isDebugEnabled()) {<a 
name="line.148"></a>
-<span class="sourceLineNo">149</span>      LOG.debug("Clear meta cache for " + 
tableName);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    if 
(tableName.equals(META_TABLE_NAME)) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      metaRegionLocator.clearCache();<a 
name="line.152"></a>
-<span class="sourceLineNo">153</span>    } else {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      
nonMetaRegionLocator.clearCache(tableName);<a name="line.154"></a>
+<span class="sourceLineNo">135</span>      addToCache.accept(newLoc);<a 
name="line.135"></a>
+<span class="sourceLineNo">136</span>    } else {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      if (LOG.isDebugEnabled()) {<a 
name="line.137"></a>
+<span class="sourceLineNo">138</span>        LOG.debug("Try removing " + loc + 
" from cache");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      removeFromCache.accept(loc);<a 
name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  void 
updateCachedLocation(HRegionLocation loc, Throwable exception) {<a 
name="line.144"></a>
+<span class="sourceLineNo">145</span>    if 
(loc.getRegionInfo().isMetaTable()) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      
metaRegionLocator.updateCachedLocation(loc, exception);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } else {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      
nonMetaRegionLocator.updateCachedLocation(loc, exception);<a 
name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  void clearCache(TableName tableName) 
{<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (LOG.isDebugEnabled()) {<a 
name="line.153"></a>
+<span class="sourceLineNo">154</span>      LOG.debug("Clear meta cache for " + 
tableName);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>}<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    if 
(tableName.equals(META_TABLE_NAME)) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      metaRegionLocator.clearCache();<a 
name="line.157"></a>
+<span class="sourceLineNo">158</span>    } else {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      
nonMetaRegionLocator.clearCache(tableName);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>}<a name="line.162"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/90c7dfe4/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncTableRegionLocatorImpl.html
----------------------------------------------------------------------
diff --git 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncTableRegionLocatorImpl.html
 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncTableRegionLocatorImpl.html
index 8da4327..1c212eb 100644
--- 
a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncTableRegionLocatorImpl.html
+++ 
b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncTableRegionLocatorImpl.html
@@ -53,7 +53,7 @@
 <span class="sourceLineNo">045</span><a name="line.45"></a>
 <span class="sourceLineNo">046</span>  @Override<a name="line.46"></a>
 <span class="sourceLineNo">047</span>  public 
CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(byte[] row, boolean 
reload) {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    return 
locator.getRegionLocation(tableName, row, RegionLocateType.CURRENT, -1L);<a 
name="line.48"></a>
+<span class="sourceLineNo">048</span>    return 
locator.getRegionLocation(tableName, row, RegionLocateType.CURRENT, reload, 
-1L);<a name="line.48"></a>
 <span class="sourceLineNo">049</span>  }<a name="line.49"></a>
 <span class="sourceLineNo">050</span>}<a name="line.50"></a>
 

Reply via email to