[ 
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)

Reply via email to