@Test
  public void testAddDropConstraintNonBlocking() throws Exception {
    HiveConf.setBoolVar(conf, HiveConf.ConfVars.HIVE_ACID_LOCKLESS_READS_ENABLED, true);
    dropTable(new String[] {"tab_acid"});

    driver.run("create table if not exists tab_acid (a int, b int) " +
      "stored as orc TBLPROPERTIES ('transactional'='true')");
    driver.run("insert into tab_acid (a,b) values(1,2),(3,4)");

    driver.compileAndRespond("alter table tab_acid ADD CONSTRAINT a_PK PRIMARY KEY (`a`) DISABLE NOVALIDATE");
    driver.lockAndRespond();
    
    List<ShowLocksResponseElement> locks = getLocks();
    TestTxnDbUtil.checkLock(LockType.EXCL_WRITE,
      LockState.ACQUIRED, "default", "tab_acid", null, locks);
    driver.close();
    
    driver.compileAndRespond("alter table tab_acid DROP CONSTRAINT a_PK");
    driver.lockAndRespond();

    locks = getLocks();
    TestTxnDbUtil.checkLock(LockType.EXCL_WRITE,
      LockState.ACQUIRED, "default", "tab_acid", null, locks);
  }
T7 is a table with 2 partitions
1. run select from T7
2. run drop partition from T7
concurrently with 1 starting first so that 2 blocks
3. start another concurrent select on T7 - it should block behind waiting X (from drop) - LM should be fair
4. finish #1 so that drop unblocks
5. rollback the drop to release its X lock
6. # should unblock
ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java