[
https://issues.apache.org/jira/browse/HBASE-16233?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15378751#comment-15378751
]
Matteo Bertozzi commented on HBASE-16233:
-----------------------------------------
on a second look, there is one little thing to add to the test to make sure we
cleanup the mini zk cluster.
{code}
int zkPort = zkCluster.startup(new File(dir));
try {
...
} finally {
zkCluster.shutdown()
}
{code}
you can fix it on commit, for me
> Procedure V2: Support acquire/release shared table lock concurrently
> --------------------------------------------------------------------
>
> Key: HBASE-16233
> URL: https://issues.apache.org/jira/browse/HBASE-16233
> Project: HBase
> Issue Type: Sub-task
> Components: proc-v2
> Reporter: Stephen Yuan Jiang
> Assignee: Stephen Yuan Jiang
> Fix For: 2.0.0
>
> Attachments: HBASE-16233.v1-master.patch
>
>
> {{MasterProcedureScheduler.TableQueue}} class only has one single instance of
> TableLock ({{private TableLock tableLock = null;}}) to track exclusive/shared
> table lock from TableLockManager.
> When multiple shared lock request comes, the later shared lock request would
> overwrite the lock acquired from earlier shared lock request, and hence, we
> will get some weird error when the second or later release lock request
> comes, because we lose track of the lock.
> The issue can be reproduced in the unit test of HBASE-14552. [~mbertozzi]
> also comes up with a UT without using any real procedure to repro the problem:
> {code}
> @Test
> public void testSchedWithZkLock() throws Exception {
> MiniZooKeeperCluster zkCluster = new MiniZooKeeperCluster(conf);
> int zkPort = zkCluster.startup(new File("/tmp/test-zk"));
> Thread.sleep(10000);
> conf.set("hbase.zookeeper.quorum", "localhost:" + zkPort);
> ZooKeeperWatcher zkw = new ZooKeeperWatcher(conf, "testSchedWithZkLock",
> null, false);
> queue = new MasterProcedureScheduler(conf,
> TableLockManager.createTableLockManager(
> conf, zkw, ServerName.valueOf("localhost", 12345, 1)));
> final TableName tableName = TableName.valueOf("testtb");
> TestTableProcedure procA = new TestTableProcedure(1, tableName,
> TableProcedureInterface.TableOperationType.READ);
> TestTableProcedure procB = new TestTableProcedure(2, tableName,
> TableProcedureInterface.TableOperationType.READ);
> assertTrue(queue.tryAcquireTableSharedLock(procA, tableName));
> assertTrue(queue.tryAcquireTableSharedLock(procB, tableName));
> queue.releaseTableSharedLock(procA, tableName);
> queue.releaseTableSharedLock(procB, tableName);
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)