You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2016/09/08 18:55:52 UTC

hbase git commit: HBASE-16505 Add AsyncRegion interface to pass deadline and support async operations - revert due to open questions

Repository: hbase
Updated Branches:
  refs/heads/master 1574c6ef3 -> d7e5c6fa8


HBASE-16505 Add AsyncRegion interface to pass deadline and support async operations - revert due to open questions


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d7e5c6fa
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d7e5c6fa
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d7e5c6fa

Branch: refs/heads/master
Commit: d7e5c6fa8e9c562d1d66b2da0edb5831b51fe013
Parents: 1574c6e
Author: tedyu <yu...@gmail.com>
Authored: Thu Sep 8 11:55:46 2016 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Thu Sep 8 11:55:46 2016 -0700

----------------------------------------------------------------------
 .../hbase/ipc/DelegatingHBaseRpcController.java |  10 -
 .../hadoop/hbase/ipc/HBaseRpcController.java    |   4 -
 .../hbase/ipc/HBaseRpcControllerImpl.java       |  13 --
 .../org/apache/hadoop/hbase/ipc/CallRunner.java |   7 +-
 .../org/apache/hadoop/hbase/ipc/RpcServer.java  |   4 +-
 .../hadoop/hbase/regionserver/AsyncRegion.java  |  99 ----------
 .../hadoop/hbase/regionserver/HRegion.java      | 197 +------------------
 .../hbase/regionserver/OperationListener.java   |  33 ----
 .../hadoop/hbase/regionserver/Region.java       |  19 +-
 .../regionserver/RegionOperationContext.java    |  90 ---------
 .../SynchronousOperationListener.java           |  63 ------
 11 files changed, 12 insertions(+), 527 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java
index e098499..9f9c636 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/DelegatingHBaseRpcController.java
@@ -114,16 +114,6 @@ public class DelegatingHBaseRpcController implements HBaseRpcController {
   }
 
   @Override
-  public void setDeadline(long deadline) {
-    delegate.setDeadline(deadline);
-  }
-
-  @Override
-  public long getDeadline() {
-    return delegate.getDeadline();
-  }
-
-  @Override
   public void setFailed(IOException e) {
     delegate.setFailed(e);
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcController.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcController.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcController.java
index 9d87845..2c4b335 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcController.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcController.java
@@ -67,10 +67,6 @@ public interface HBaseRpcController extends RpcController, CellScannable {
 
   boolean hasCallTimeout();
 
-  void setDeadline(long deadline);
-
-  long getDeadline();
-
   /**
    * Set failed with an exception to pass on. For use in async rpc clients
    * @param e exception to set with

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java
index 7bfc9b8..a976473 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/HBaseRpcControllerImpl.java
@@ -51,8 +51,6 @@ public class HBaseRpcControllerImpl implements HBaseRpcController {
 
   private IOException exception;
 
-  private long deadline = Long.MAX_VALUE;
-
   /**
    * Priority to set on this request. Set it here in controller so available composing the request.
    * This is the ordained way of setting priorities going forward. We will be undoing the old
@@ -119,7 +117,6 @@ public class HBaseRpcControllerImpl implements HBaseRpcController {
     cellScanner = null;
     exception = null;
     callTimeout = null;
-    deadline = Long.MAX_VALUE;
     // In the implementations of some callable with replicas, rpc calls are executed in a executor
     // and we could cancel the operation from outside which means there could be a race between
     // reset and startCancel. Although I think the race should be handled by the callable since the
@@ -151,16 +148,6 @@ public class HBaseRpcControllerImpl implements HBaseRpcController {
   }
 
   @Override
-  public void setDeadline(long deadline) {
-    this.deadline = deadline;
-  }
-
-  @Override
-  public long getDeadline() {
-    return this.deadline;
-  }
-
-  @Override
   public synchronized String errorText() {
     if (!done || exception == null) {
       return null;

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java
index 7e4ffee..b2b3c66 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/CallRunner.java
@@ -26,7 +26,6 @@ import org.apache.hadoop.hbase.CellScanner;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
-import org.apache.hadoop.hbase.exceptions.TimeoutIOException;
 import org.apache.hadoop.hbase.ipc.RpcServer.Call;
 import org.apache.hadoop.hbase.monitoring.MonitoredRPCHandler;
 import org.apache.hadoop.hbase.util.Pair;
@@ -122,11 +121,7 @@ public class CallRunner {
         }
         // make the call
         resultPair = this.rpcServer.call(call.service, call.md, call.param, call.cellScanner,
-            call.timestamp, this.status, call.startTime, call.timeout);
-      } catch (TimeoutIOException e) {
-        RpcServer.LOG.info("Timeout while handling request, won't send response to client: " + call,
-            e);
-        return;
+          call.timestamp, this.status, call.startTime, call.timeout);
       } catch (Throwable e) {
         RpcServer.LOG.debug(Thread.currentThread().getName() + ": " + call.toShortString(), e);
         errorThrowable = e;

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
index 928f96d..0df5097 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
@@ -400,8 +400,7 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver {
       return "callId: " + this.id + " service: " + serviceName +
           " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +
           " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +
-          " connection: " + connection.toString() +
-          " timeout: " + timeout;
+          " connection: " + connection.toString();
     }
 
     String toTraceString() {
@@ -2208,7 +2207,6 @@ public class RpcServer implements RpcServerInterface, ConfigurationObserver {
       //get an instance of the method arg type
       HBaseRpcController controller = new HBaseRpcControllerImpl(cellScanner);
       controller.setCallTimeout(timeout);
-      controller.setDeadline(timeout > 0 ? receiveTime + timeout : Long.MAX_VALUE);
       Message result = service.callBlockingMethod(md, controller, param);
       long endTime = System.currentTimeMillis();
       int processingTime = (int) (endTime - startTime);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AsyncRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AsyncRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AsyncRegion.java
deleted file mode 100644
index ab1a9df..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/AsyncRegion.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.regionserver;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.HBaseInterfaceAudience;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.classification.InterfaceStability;
-import org.apache.hadoop.hbase.client.Append;
-import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.Increment;
-import org.apache.hadoop.hbase.client.Mutation;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.client.RowMutations;
-import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.filter.ByteArrayComparable;
-import org.apache.hadoop.hbase.filter.CompareFilter;
-import org.apache.hadoop.hbase.wal.WALSplitter;
-
-/**
- * Async version of Region. Support non-blocking operations and can pass more information into
- * the operations.
- */
-@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)
-@InterfaceStability.Evolving
-public interface AsyncRegion extends Region {
-
-  void getRowLock(RegionOperationContext<RowLock> context, byte[] row, boolean readLock);
-
-  void append(RegionOperationContext<Result> context, Append append, long nonceGroup, long nonce);
-
-  void batchMutate(RegionOperationContext<OperationStatus[]> context, Mutation[] mutations,
-      long nonceGroup, long nonce);
-
-  void batchReplay(RegionOperationContext<OperationStatus[]> context, WALSplitter.MutationReplay[] mutations,
-      long replaySeqId);
-
-  void checkAndMutate(RegionOperationContext<Boolean> context, byte [] row, byte [] family,
-      byte [] qualifier, CompareFilter.CompareOp compareOp, ByteArrayComparable comparator, Mutation mutation,
-      boolean writeToWAL);
-
-  void checkAndRowMutate(RegionOperationContext<Boolean> context, byte [] row, byte [] family,
-      byte [] qualifier, CompareFilter.CompareOp compareOp, ByteArrayComparable comparator,
-      RowMutations mutations, boolean writeToWAL);
-
-  void delete(RegionOperationContext<Void> context, Delete delete);
-
-  void get(RegionOperationContext<Result> context, Get get);
-
-  void get(RegionOperationContext<List<Cell>> context, Get get, boolean withCoprocessor);
-
-  void get(RegionOperationContext<List<Cell>> context, Get get, boolean withCoprocessor,
-      long nonceGroup, long nonce);
-
-  void getScanner(RegionOperationContext<RegionScanner> context, Scan scan);
-
-  void getScanner(RegionOperationContext<RegionScanner> context, Scan scan,
-      List<KeyValueScanner> additionalScanners);
-
-  void increment(RegionOperationContext<Result> context, Increment increment, long nonceGroup,
-      long nonce);
-
-  void mutateRow(RegionOperationContext<Void> context, RowMutations mutations);
-
-  void mutateRowsWithLocks(RegionOperationContext<Void> context, Collection<Mutation> mutations,
-      Collection<byte[]> rowsToLock, long nonceGroup, long nonce);
-
-  void processRowsWithLocks(RegionOperationContext<Void> context, RowProcessor<?,?> processor);
-
-  void processRowsWithLocks(RegionOperationContext<Void> context, RowProcessor<?,?> processor,
-      long nonceGroup, long nonce);
-
-  void processRowsWithLocks(RegionOperationContext<Void> context, RowProcessor<?,?> processor,
-      long timeout, long nonceGroup, long nonce);
-
-  void put(RegionOperationContext<Void> context, Put put);
-
-}

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index f4a23f3..f97f6b2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -128,7 +128,6 @@ import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
 import org.apache.hadoop.hbase.exceptions.RegionInRecoveryException;
 import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;
 import org.apache.hadoop.hbase.filter.ByteArrayComparable;
-import org.apache.hadoop.hbase.filter.CompareFilter;
 import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
 import org.apache.hadoop.hbase.filter.FilterWrapper;
 import org.apache.hadoop.hbase.filter.IncompatibleFilterException;
@@ -198,7 +197,7 @@ import org.apache.htrace.TraceScope;
 
 @SuppressWarnings("deprecation")
 @InterfaceAudience.Private
-public class HRegion implements HeapSize, PropagatingConfigurationObserver, AsyncRegion {
+public class HRegion implements HeapSize, PropagatingConfigurationObserver, Region {
   private static final Log LOG = LogFactory.getLog(HRegion.class);
 
   public static final String LOAD_CFS_ON_DEMAND_CONFIG_KEY =
@@ -5297,200 +5296,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Asyn
     }
   }
 
-  @Override
-  public void append(RegionOperationContext<Result> context, Append append, long nonceGroup,
-      long nonce) {
-    try {
-      context.done(append(append, nonceGroup, nonce));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void batchMutate(RegionOperationContext<OperationStatus[]> context, Mutation[] mutations,
-      long nonceGroup, long nonce) {
-    try {
-      context.done(batchMutate(mutations, nonceGroup, nonce));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void batchReplay(RegionOperationContext<OperationStatus[]> context,
-      MutationReplay[] mutations, long replaySeqId) {
-    try {
-      context.done(batchReplay(mutations, replaySeqId));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void checkAndMutate(RegionOperationContext<Boolean> context, byte[] row, byte[] family,
-      byte[] qualifier, CompareOp compareOp, ByteArrayComparable comparator,
-      Mutation mutation, boolean writeToWAL) {
-    try {
-      context.done(
-          checkAndMutate(row, family, qualifier, compareOp, comparator, mutation, writeToWAL));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void checkAndRowMutate(RegionOperationContext<Boolean> context, byte[] row, byte[] family,
-      byte[] qualifier, CompareOp compareOp, ByteArrayComparable comparator,
-      RowMutations mutations, boolean writeToWAL) {
-    try {
-      context.done(
-          checkAndRowMutate(row, family, qualifier, compareOp, comparator, mutations, writeToWAL));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void delete(RegionOperationContext<Void> context, Delete delete) {
-    try {
-      delete(delete);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void get(RegionOperationContext<Result> context, Get get) {
-    try {
-      context.done(get(get));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void get(RegionOperationContext<List<Cell>> context, Get get, boolean withCoprocessor) {
-    try {
-      context.done(get(get, withCoprocessor));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void get(RegionOperationContext<List<Cell>> context, Get get, boolean withCoprocessor,
-      long nonceGroup, long nonce) {
-    try {
-      context.done(get(get, withCoprocessor, nonceGroup, nonce));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void getScanner(RegionOperationContext<RegionScanner> context, Scan scan) {
-    try {
-      context.done(getScanner(scan));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void getScanner(RegionOperationContext<RegionScanner> context, Scan scan,
-      List<KeyValueScanner> additionalScanners) {
-    try {
-      context.done(getScanner(scan, additionalScanners));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void getRowLock(RegionOperationContext<RowLock> context, byte[] row, boolean readLock) {
-    try {
-      context.done(getRowLock(row, readLock));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void increment(RegionOperationContext<Result> context, Increment increment,
-      long nonceGroup, long nonce) {
-    try {
-      context.done(increment(increment, nonceGroup, nonce));
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void mutateRow(RegionOperationContext<Void> context, RowMutations mutations) {
-    try {
-      mutateRow(mutations);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void mutateRowsWithLocks(RegionOperationContext<Void> context,
-      Collection<Mutation> mutations, Collection<byte[]> rowsToLock, long nonceGroup, long nonce) {
-    try {
-      mutateRowsWithLocks(mutations, rowsToLock, nonceGroup, nonce);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void processRowsWithLocks(RegionOperationContext<Void> context,
-      RowProcessor<?, ?> processor) {
-    try {
-      processRowsWithLocks(processor);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void processRowsWithLocks(RegionOperationContext<Void> context,
-      RowProcessor<?, ?> processor, long nonceGroup, long nonce) {
-    try {
-      processRowsWithLocks(processor, nonceGroup, nonce);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void processRowsWithLocks(RegionOperationContext<Void> context,
-      RowProcessor<?, ?> processor, long timeout, long nonceGroup, long nonce) {
-    try {
-      processRowsWithLocks(processor, timeout, nonceGroup, nonce);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
-  @Override
-  public void put(RegionOperationContext<Void> context, Put put) {
-    try {
-      put(put);
-      context.done(null);
-    } catch (Throwable e) {
-      context.error(e);
-    }
-  }
-
   public ConcurrentHashMap<HashedBytes, RowLockContext> getLockedRows() {
     return lockedRows;
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OperationListener.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OperationListener.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OperationListener.java
deleted file mode 100644
index 613d128..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/OperationListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.regionserver;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-
-/**
- * Interface for listeners of AsyncRegion.
- * @param <T> type of result, Void of it has no result.
- */
-@InterfaceAudience.Private
-public interface OperationListener<T> {
-
-  void completed(T result);
-
-  void failed(Throwable t);
-
-}

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java
index c04ead2..efd68b8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Region.java
@@ -282,16 +282,15 @@ public interface Region extends ConfigurationObserver {
   }
 
   /**
-   *
-   * Get a row lock for the specified row. All locks are reentrant.
-   *
-   * Before calling this function make sure that a region operation has already been
-   * started (the calling thread has already acquired the region-close-guard lock).
-   * @param row The row actions will be performed against
-   * @param readLock is the lock reader or writer. True indicates that a non-exlcusive
-   *                 lock is requested
-   */
-  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;
+   * Tries to acquire a lock on the given row.
+   * @param waitForLock if true, will block until the lock is available.
+   *        Otherwise, just tries to obtain the lock and returns
+   *        false if unavailable.
+   * @return the row lock if acquired,
+   *   null if waitForLock was false and the lock was not acquired
+   * @throws IOException if waitForLock was true and the lock could not be acquired after waiting
+   */
+  RowLock getRowLock(byte[] row, boolean waitForLock) throws IOException;
 
   /**
    * If the given list of row locks is not null, releases all locks.

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionOperationContext.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionOperationContext.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionOperationContext.java
deleted file mode 100644
index 6d20f84..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionOperationContext.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.regionserver;
-
-import com.google.protobuf.RpcController;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-import org.apache.hadoop.hbase.ipc.HBaseRpcController;
-
-/**
- * In each operation of AsyncRegion, we pass a context object with information of the request.
- * We can pass deadline of this request to AsyncRegion implementation to drop timeout request and
- * not waste time on timed out requests.
- * We can add listeners to watch the event of completion/failure of this operation, which helps us
- * make operation of AsyncRegion non-blocking. It is important for Staged Event-Driven Architecture
- * (SEDA), see HBASE-16583 for details.
- * The context is RPC-free, don't add RPC related code. In RPC we should use listener to deal with
- * the result.
- * @param <T> The type of result, Void if the operation has no result.
- */
-@InterfaceAudience.Private
-public class RegionOperationContext<T> {
-
-  private long deadline = Long.MAX_VALUE;
-  private List<OperationListener<T>> listeners;
-
-  public long getDeadline() {
-    return deadline;
-  }
-
-  public void setDeadline(long deadline) {
-    this.deadline = deadline;
-  }
-
-  public RegionOperationContext() {
-    listeners = new ArrayList<>();
-  }
-
-  public RegionOperationContext(RegionOperationContext<T> context) {
-    this.deadline = context.deadline;
-    this.listeners = new ArrayList<>(context.listeners);
-  }
-
-  public RegionOperationContext(RpcController controller) {
-    if (controller instanceof HBaseRpcController) {
-      this.deadline = ((HBaseRpcController) controller).getDeadline();
-    }
-  }
-
-  public synchronized void addListener(OperationListener<T> listener) {
-    listeners.add(listener);
-  }
-
-  /**
-   * We will call this only in one thread, so no need to lock.
-   */
-  public void error(Throwable error) {
-    for (OperationListener<T> listener : listeners) {
-      listener.failed(error);
-    }
-  }
-
-  /**
-   * We will call this only in one thread, so no need to lock.
-   */
-  public void done(T result) {
-    for (OperationListener<T> listener : listeners) {
-      listener.completed(result);
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/hbase/blob/d7e5c6fa/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SynchronousOperationListener.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SynchronousOperationListener.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SynchronousOperationListener.java
deleted file mode 100644
index 24de981..0000000
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SynchronousOperationListener.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.regionserver;
-
-import com.google.common.base.Throwables;
-
-import java.io.IOException;
-
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
-
-/**
- * An OperationListener supporting getting result directly. Temporarily used when AsyncRegion is
- * not fully non-blocking. When call getResult of this class, the operation must have been done.
- */
-@InterfaceAudience.Private
-public class SynchronousOperationListener<T> implements OperationListener<T> {
-
-  private T result;
-  private boolean done;
-  private Throwable error;
-
-  @Override
-  public void completed(T result) {
-    done = true;
-    this.result = result;
-  }
-
-  @Override
-  public void failed(Throwable error) {
-    done = true;
-    this.error = error;
-  }
-
-  /**
-   * We call this method after calling operation of AsyncRegion synchronously in the same thread.
-   * So no need to lock and success/fail must has been called.
-   */
-  public T getResult() throws IOException {
-    assert done;
-    if (error != null) {
-      // We also need throw unchecked throwable
-      Throwables.propagateIfPossible(error, IOException.class);
-      // Wrap to IOE if it is not IOE or unchecked
-      throw new IOException(error);
-    }
-    return result;
-  }
-}