PHOENIX-2667 Race condition between IndexBuilder and Split for region lock

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

Branch: refs/heads/calcite
Commit: cdaca287cd50fbdd25a9b11d8af6fb0a3b3956cc
Parents: 04c3819
Author: James Taylor <jtay...@salesforce.com>
Authored: Sat Feb 13 15:49:31 2016 -0800
Committer: James Taylor <jtay...@salesforce.com>
Committed: Sat Feb 13 15:53:29 2016 -0800

----------------------------------------------------------------------
 .../phoenix/hbase/index/builder/IndexBuildManager.java    | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/cdaca287/phoenix-core/src/main/java/org/apache/phoenix/hbase/index/builder/IndexBuildManager.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/hbase/index/builder/IndexBuildManager.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/hbase/index/builder/IndexBuildManager.java
index ae2125e..f411b8e 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/hbase/index/builder/IndexBuildManager.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/hbase/index/builder/IndexBuildManager.java
@@ -39,7 +39,8 @@ import 
org.apache.phoenix.hbase.index.parallel.QuickFailingTaskRunner;
 import org.apache.phoenix.hbase.index.parallel.Task;
 import org.apache.phoenix.hbase.index.parallel.TaskBatch;
 import org.apache.phoenix.hbase.index.parallel.ThreadPoolBuilder;
-import org.apache.phoenix.hbase.index.parallel.ThreadPoolManager;
+
+import com.google.common.util.concurrent.MoreExecutors;
 
 /**
  * Manage the building of index updates from primary table updates.
@@ -77,10 +78,11 @@ public class IndexBuildManager implements Stoppable {
    * @throws IOException if an {@link IndexBuilder} cannot be correctly steup
    */
   public IndexBuildManager(RegionCoprocessorEnvironment env) throws 
IOException {
-    this(getIndexBuilder(env), new 
QuickFailingTaskRunner(ThreadPoolManager.getExecutor(
-      getPoolBuilder(env), env)));
+    // Prevent deadlock by using single thread for all reads so that we know
+    // we can get the ReentrantRWLock. See PHOENIX-2671 for more details.
+    this(getIndexBuilder(env), new 
QuickFailingTaskRunner(MoreExecutors.sameThreadExecutor()));
   }
-
+  
   private static IndexBuilder getIndexBuilder(RegionCoprocessorEnvironment e) 
throws IOException {
     Configuration conf = e.getConfiguration();
     Class<? extends IndexBuilder> builderClass =

Reply via email to