You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by el...@apache.org on 2017/01/23 23:02:13 UTC
[40/50] [abbrv] hbase git commit: HBASE-17067 Procedure v2 - remove
zklock/tryLock and use wait/wake (Matteo Bertozzi)
http://git-wip-us.apache.org/repos/asf/hbase/blob/980c8c20/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java
index a8192be..3e88890 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.hbase.master.procedure;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.logging.Log;
@@ -32,7 +31,6 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.master.procedure.TestMasterProcedureScheduler.TestTableProcedure;
import org.apache.hadoop.hbase.procedure2.Procedure;
-import org.apache.hadoop.hbase.procedure2.util.StringUtils;
import org.apache.hadoop.hbase.regionserver.CompactingMemStore;
import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.apache.hadoop.hbase.testclassification.MasterTests;
@@ -68,60 +66,6 @@ public class TestMasterProcedureSchedulerConcurrency {
queue.clear();
}
- @Test(timeout=60000)
- public void testConcurrentCreateDelete() throws Exception {
- final MasterProcedureScheduler procQueue = queue;
- final TableName table = TableName.valueOf("testtb");
- final AtomicBoolean running = new AtomicBoolean(true);
- final AtomicBoolean failure = new AtomicBoolean(false);
- Thread createThread = new Thread() {
- @Override
- public void run() {
- try {
- TestTableProcedure proc = new TestTableProcedure(1, table,
- TableProcedureInterface.TableOperationType.CREATE);
- while (running.get() && !failure.get()) {
- if (procQueue.tryAcquireTableExclusiveLock(proc, table)) {
- procQueue.releaseTableExclusiveLock(proc, table);
- }
- }
- } catch (Throwable e) {
- LOG.error("create failed", e);
- failure.set(true);
- }
- }
- };
-
- Thread deleteThread = new Thread() {
- @Override
- public void run() {
- try {
- TestTableProcedure proc = new TestTableProcedure(2, table,
- TableProcedureInterface.TableOperationType.DELETE);
- while (running.get() && !failure.get()) {
- if (procQueue.tryAcquireTableExclusiveLock(proc, table)) {
- procQueue.releaseTableExclusiveLock(proc, table);
- }
- procQueue.markTableAsDeleted(table, proc);
- }
- } catch (Throwable e) {
- LOG.error("delete failed", e);
- failure.set(true);
- }
- }
- };
-
- createThread.start();
- deleteThread.start();
- for (int i = 0; i < 100 && running.get() && !failure.get(); ++i) {
- Thread.sleep(100);
- }
- running.set(false);
- createThread.join();
- deleteThread.join();
- assertEquals(false, failure.get());
- }
-
/**
* Verify that "write" operations for a single table are serialized,
* but different tables can be executed in parallel.
@@ -237,26 +181,22 @@ public class TestMasterProcedureSchedulerConcurrency {
public Procedure acquire() {
Procedure proc = null;
- boolean avail = false;
- while (!avail) {
- proc = queue.poll();
- if (proc == null) break;
+ boolean waiting = true;
+ while (waiting && queue.size() > 0) {
+ proc = queue.poll(100000000L);
+ if (proc == null) continue;
switch (getTableOperationType(proc)) {
case CREATE:
case DELETE:
case EDIT:
- avail = queue.tryAcquireTableExclusiveLock(proc, getTableName(proc));
+ waiting = queue.waitTableExclusiveLock(proc, getTableName(proc));
break;
case READ:
- avail = queue.tryAcquireTableSharedLock(proc, getTableName(proc));
+ waiting = queue.waitTableSharedLock(proc, getTableName(proc));
break;
default:
throw new UnsupportedOperationException();
}
- if (!avail) {
- addFront(proc);
- LOG.debug("yield procId=" + proc);
- }
}
return proc;
}
@@ -266,10 +206,10 @@ public class TestMasterProcedureSchedulerConcurrency {
case CREATE:
case DELETE:
case EDIT:
- queue.releaseTableExclusiveLock(proc, getTableName(proc));
+ queue.wakeTableExclusiveLock(proc, getTableName(proc));
break;
case READ:
- queue.releaseTableSharedLock(proc, getTableName(proc));
+ queue.wakeTableSharedLock(proc, getTableName(proc));
break;
}
}