Repository: hive
Updated Branches:
  refs/heads/branch-1 763c41333 -> 6c160bc1c


HIVE-11793 : SHOW LOCKS with DbTxnManager ignores filter options (Wei Zheng, 
reviewed by Eugene Koifman)


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

Branch: refs/heads/branch-1
Commit: 6c160bc1cdd2290861623e6437784ee39ca4eb91
Parents: 763c413
Author: Wei Zheng <w...@apache.org>
Authored: Wed May 11 14:30:55 2016 -0700
Committer: Wei Zheng <w...@apache.org>
Committed: Wed May 11 14:30:55 2016 -0700

----------------------------------------------------------------------
 .../hive/hcatalog/streaming/TestStreaming.java  |   8 +-
 .../hive/metastore/HiveMetaStoreClient.java     |   6 +
 .../hadoop/hive/metastore/IMetaStoreClient.java |  10 ++
 .../hadoop/hive/metastore/txn/TxnHandler.java   |  28 +++++
 .../org/apache/hadoop/hive/ql/exec/DDLTask.java |  25 +++-
 .../hadoop/hive/ql/lockmgr/DbLockManager.java   |   6 +-
 .../hadoop/hive/ql/plan/ShowLocksDesc.java      |   4 +-
 .../hive/ql/lockmgr/TestDbTxnManager2.java      | 126 +++++++++++++++++++
 .../queries/clientpositive/dbtxnmgr_showlocks.q |  14 +++
 .../clientpositive/dbtxnmgr_showlocks.q.out     |  47 ++++++-
 10 files changed, 265 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/hcatalog/streaming/src/test/org/apache/hive/hcatalog/streaming/TestStreaming.java
----------------------------------------------------------------------
diff --git 
a/hcatalog/streaming/src/test/org/apache/hive/hcatalog/streaming/TestStreaming.java
 
b/hcatalog/streaming/src/test/org/apache/hive/hcatalog/streaming/TestStreaming.java
index f4ee208..6016425 100644
--- 
a/hcatalog/streaming/src/test/org/apache/hive/hcatalog/streaming/TestStreaming.java
+++ 
b/hcatalog/streaming/src/test/org/apache/hive/hcatalog/streaming/TestStreaming.java
@@ -51,6 +51,7 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.metastore.api.GetOpenTxnsInfoResponse;
 import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.api.Partition;
+import org.apache.hadoop.hive.metastore.api.ShowLocksRequest;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponse;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement;
 import org.apache.hadoop.hive.metastore.api.TxnAbortedException;
@@ -647,13 +648,16 @@ public class TestStreaming {
     //todo: this should ideally check Transaction heartbeat as well, but 
heartbeat
     //timestamp is not reported yet
     //GetOpenTxnsInfoResponse txnresp = msClient.showTxns();
-    ShowLocksResponse response = msClient.showLocks();
+    ShowLocksRequest request = new ShowLocksRequest();
+    request.setDbname(dbName2);
+    request.setTablename(tblName2);
+    ShowLocksResponse response = msClient.showLocks(request);
     Assert.assertEquals("Wrong nubmer of locks: " + response, 1, 
response.getLocks().size());
     ShowLocksResponseElement lock = response.getLocks().get(0);
     long acquiredAt = lock.getAcquiredat();
     long heartbeatAt = lock.getLastheartbeat();
     txnBatch.heartbeat();
-    response = msClient.showLocks();
+    response = msClient.showLocks(request);
     Assert.assertEquals("Wrong number of locks2: " + response, 1, 
response.getLocks().size());
     lock = response.getLocks().get(0);
     Assert.assertEquals("Acquired timestamp didn't match", acquiredAt, 
lock.getAcquiredat());

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
index 6bef3f5..94d5d86 100644
--- 
a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
+++ 
b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
@@ -1914,11 +1914,17 @@ public class HiveMetaStoreClient implements 
IMetaStoreClient {
   }
 
   @Override
+  @Deprecated
   public ShowLocksResponse showLocks() throws TException {
     return client.show_locks(new ShowLocksRequest());
   }
 
   @Override
+  public ShowLocksResponse showLocks(ShowLocksRequest request) throws 
TException {
+    return client.show_locks(request);
+  }
+
+  @Override
   public void heartbeat(long txnid, long lockid)
       throws NoSuchLockException, NoSuchTxnException, TxnAbortedException,
       TException {

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
index da3d7bc..da693f7 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/IMetaStoreClient.java
@@ -38,6 +38,7 @@ import org.apache.hadoop.hive.metastore.api.NotificationEvent;
 import org.apache.hadoop.hive.metastore.api.NotificationEventResponse;
 import org.apache.hadoop.hive.metastore.api.OpenTxnsResponse;
 import org.apache.hadoop.hive.metastore.api.ShowCompactResponse;
+import org.apache.hadoop.hive.metastore.api.ShowLocksRequest;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponse;
 import org.apache.hadoop.hive.metastore.api.TxnAbortedException;
 import org.apache.hadoop.hive.metastore.api.TxnOpenException;
@@ -1329,9 +1330,18 @@ public interface IMetaStoreClient {
    * @return List of currently held and waiting locks.
    * @throws TException
    */
+  @Deprecated
   ShowLocksResponse showLocks() throws TException;
 
   /**
+   * Show all currently held and waiting locks.
+   * @param showLocksRequest SHOW LOCK request
+   * @return List of currently held and waiting locks.
+   * @throws TException
+   */
+  ShowLocksResponse showLocks(ShowLocksRequest showLocksRequest) throws 
TException;
+
+  /**
    * Send a heartbeat to indicate that the client holding these locks (if
    * any) and that opened this transaction (if one exists) is still alive.
    * The default timeout for transactions and locks is 300 seconds,

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
----------------------------------------------------------------------
diff --git 
a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java 
b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
index b1d330d..b1dea19 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
@@ -1115,6 +1115,34 @@ abstract class TxnHandler implements TxnStore, 
TxnStore.MutexAPI {
         String s = "select hl_lock_ext_id, hl_txnid, hl_db, hl_table, 
hl_partition, hl_lock_state, " +
           "hl_lock_type, hl_last_heartbeat, hl_acquired_at, hl_user, hl_host, 
hl_lock_int_id," +
           "hl_blockedby_ext_id, hl_blockedby_int_id from HIVE_LOCKS";
+
+        // Some filters may have been specified in the SHOW LOCKS statement. 
Add them to the query.
+        String dbName = rqst.getDbname();
+        String tableName = rqst.getTablename();
+        String partName = rqst.getPartname();
+
+        StringBuilder filter = new StringBuilder();
+        if (dbName != null && !dbName.isEmpty()) {
+          filter.append("hl_db=").append(quoteString(dbName));
+        }
+        if (tableName != null && !tableName.isEmpty()) {
+          if (filter.length() > 0) {
+            filter.append(" and ");
+          }
+          filter.append("hl_table=").append(quoteString(tableName));
+        }
+        if (partName != null && !partName.isEmpty()) {
+          if (filter.length() > 0) {
+            filter.append(" and ");
+          }
+          filter.append("hl_partition=").append(quoteString(partName));
+        }
+        String whereClause = filter.toString();
+
+        if (!whereClause.isEmpty()) {
+          s = s + " where " + whereClause;
+        }
+
         LOG.debug("Doing to execute query <" + s + ">");
         ResultSet rs = stmt.executeQuery(s);
         while (rs.next()) {

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java 
b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
index 7818043..be4753f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
@@ -85,6 +85,7 @@ import 
org.apache.hadoop.hive.metastore.api.RolePrincipalGrant;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.ShowCompactResponse;
 import org.apache.hadoop.hive.metastore.api.ShowCompactResponseElement;
+import org.apache.hadoop.hive.metastore.api.ShowLocksRequest;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponse;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement;
 import org.apache.hadoop.hive.metastore.api.SkewedInfo;
@@ -2583,7 +2584,29 @@ public class DDLTask extends Task<DDLWork> implements 
Serializable {
     }
     lockMgr = (DbLockManager)lm;
 
-    ShowLocksResponse rsp = lockMgr.getLocks();
+    String dbName = showLocks.getDbName();
+    String tblName = showLocks.getTableName();
+    Map<String, String> partSpec = showLocks.getPartSpec();
+    if (dbName == null && tblName != null) {
+      dbName = SessionState.get().getCurrentDatabase();
+    }
+
+    ShowLocksRequest rqst = new ShowLocksRequest();
+    rqst.setDbname(dbName);
+    rqst.setTablename(tblName);
+    if (partSpec != null) {
+      List<String> keyList = new ArrayList<String>();
+      List<String> valList = new ArrayList<String>();
+      for (String partKey : partSpec.keySet()) {
+        String partVal = partSpec.remove(partKey);
+        keyList.add(partKey);
+        valList.add(partVal);
+      }
+      String partName = FileUtils.makePartName(keyList, valList);
+      rqst.setPartname(partName);
+    }
+
+    ShowLocksResponse rsp = lockMgr.getLocks(rqst);
 
     // write the results in the file
     DataOutputStream os = null;

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java 
b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
index f12024f..ad4bd4c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
@@ -256,8 +256,12 @@ public class DbLockManager implements HiveLockManager{
   }
 
   public ShowLocksResponse getLocks() throws LockException {
+    return getLocks(new ShowLocksRequest());
+  }
+
+  public ShowLocksResponse getLocks(ShowLocksRequest showLocksRequest) throws 
LockException {
     try {
-      return client.showLocks();
+      return client.showLocks(showLocksRequest);
     } catch (TException e) {
       throw new 
LockException(ErrorMsg.METASTORE_COMMUNICATION_FAILED.getMsg(), e);
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowLocksDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowLocksDesc.java 
b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowLocksDesc.java
index 9e93254..45a86f6 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowLocksDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ShowLocksDesc.java
@@ -53,8 +53,8 @@ public class ShowLocksDesc extends DDLDesc implements 
Serializable {
    * Schema for use with db txn manager.
    */
   private static final String newFormatSchema = 
"lockid,database,table,partition,lock_state," +
-      "lock_type,transaction_id,last_heartbeat,acquired_at,user," +
-      
"hostname#string:string:string:string:string:string:string:string:string:string:string";
+      
"blocked_by,lock_type,transaction_id,last_heartbeat,acquired_at,user,hostname#" 
+
+      
"string:string:string:string:string:string:string:string:string:string:string:string";
 
   public String getDatabase() {
     return dbName;

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
----------------------------------------------------------------------
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java 
b/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
index 15e1ee8..04e556b 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
@@ -24,9 +24,11 @@ import org.apache.hadoop.hive.ql.TestTxnCommands2;
 import org.apache.hadoop.hive.ql.txn.AcidWriteSetService;
 import org.junit.After;
 import org.junit.Assert;
+import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.LockState;
 import org.apache.hadoop.hive.metastore.api.LockType;
+import org.apache.hadoop.hive.metastore.api.ShowLocksRequest;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponse;
 import org.apache.hadoop.hive.metastore.api.ShowLocksResponseElement;
 import org.apache.hadoop.hive.metastore.txn.TxnDbUtil;
@@ -42,7 +44,9 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * See additional tests in {@link 
org.apache.hadoop.hive.ql.lockmgr.TestDbTxnManager}
@@ -621,6 +625,105 @@ public class TestDbTxnManager2 {
     Assert.assertEquals(actual.toString(), normalizeCase(expectedTable), 
normalizeCase(actual.getTablename()));
     Assert.assertEquals(actual.toString(), normalizeCase(expectedPartition), 
normalizeCase(actual.getPartname()));
   }
+
+  @Test
+  public void testShowLocksFilterOptions() throws Exception {
+    CommandProcessorResponse cpr = driver.run("drop table if exists db1.t14");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("drop table if exists db2.t14"); // Note that db1 and db2 
have a table with common name
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("drop table if exists db2.t15");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("drop table if exists db2.t16");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("drop database if exists db1");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("drop database if exists db2");
+    checkCmdOnDriver(cpr);
+
+    cpr = driver.run("create database if not exists db1");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("create database if not exists db2");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("create table if not exists db1.t14 (a int, b int) 
partitioned by (ds string) clustered by (b) into 2 buckets stored as orc 
TBLPROPERTIES ('transactional'='true')");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("create table if not exists db2.t14 (a int, b int) 
clustered by (b) into 2 buckets stored as orc TBLPROPERTIES 
('transactional'='true')");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("create table if not exists db2.t15 (a int, b int) 
clustered by (b) into 2 buckets stored as orc TBLPROPERTIES 
('transactional'='true')");
+    checkCmdOnDriver(cpr);
+    cpr = driver.run("create table if not exists db2.t16 (a int, b int) 
clustered by (b) into 2 buckets stored as orc TBLPROPERTIES 
('transactional'='true')");
+    checkCmdOnDriver(cpr);
+
+    // Acquire different locks at different levels
+
+    cpr = driver.compileAndRespond("insert into table db1.t14 partition 
(ds='today') values (1, 2)");
+    checkCmdOnDriver(cpr);
+    txnMgr.acquireLocks(driver.getPlan(), ctx, "Tom");
+
+    HiveTxnManager txnMgr2 = 
TxnManagerFactory.getTxnManagerFactory().getTxnManager(conf);
+    cpr = driver.compileAndRespond("insert into table db1.t14 partition 
(ds='tomorrow') values (3, 4)");
+    checkCmdOnDriver(cpr);
+    txnMgr2.acquireLocks(driver.getPlan(), ctx, "Jerry");
+
+    HiveTxnManager txnMgr3 = 
TxnManagerFactory.getTxnManagerFactory().getTxnManager(conf);
+    cpr = driver.compileAndRespond("select * from db2.t15");
+    checkCmdOnDriver(cpr);
+    txnMgr3.acquireLocks(driver.getPlan(), ctx, "Donald");
+
+    HiveTxnManager txnMgr4 = 
TxnManagerFactory.getTxnManagerFactory().getTxnManager(conf);
+    cpr = driver.compileAndRespond("select * from db2.t16");
+    checkCmdOnDriver(cpr);
+    txnMgr4.acquireLocks(driver.getPlan(), ctx, "Hillary");
+
+    HiveTxnManager txnMgr5 = 
TxnManagerFactory.getTxnManagerFactory().getTxnManager(conf);
+    cpr = driver.compileAndRespond("select * from db2.t14");
+    checkCmdOnDriver(cpr);
+    txnMgr5.acquireLocks(driver.getPlan(), ctx, "Obama");
+
+    // Simulate SHOW LOCKS with different filter options
+
+    // SHOW LOCKS (no filter)
+    List<ShowLocksResponseElement> locks = getLocks();
+    Assert.assertEquals("Unexpected lock count", 7, locks.size());
+    // locks.get(0) is a lock on tmp table in default database used for insert
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db1", "t14", 
"ds=today", locks.get(1));
+    // locks.get(2) is a lock on tmp table in default database used for insert
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db1", "t14", 
"ds=tomorrow", locks.get(3));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t15", null, 
locks.get(4));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t16", null, 
locks.get(5));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t14", null, 
locks.get(6));
+
+    // SHOW LOCKS db2
+    locks = getLocksWithFilterOptions(txnMgr3, "db2", null, null);
+    Assert.assertEquals("Unexpected lock count", 3, locks.size());
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t15", null, 
locks.get(0));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t16", null, 
locks.get(1));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t14", null, 
locks.get(2));
+
+    // SHOW LOCKS t14
+    cpr = driver.run("use db1");
+    checkCmdOnDriver(cpr);
+    locks = getLocksWithFilterOptions(txnMgr, null, "t14", null);
+    Assert.assertEquals("Unexpected lock count", 2, locks.size());
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db1", "t14", 
"ds=today", locks.get(0));
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db1", "t14", 
"ds=tomorrow", locks.get(1));
+    // Note that it shouldn't show t14 from db2
+
+    // SHOW LOCKS t14 PARTITION ds='today'
+    Map<String, String> partSpec = new HashMap<String, String>();
+    partSpec.put("ds", "today");
+    locks = getLocksWithFilterOptions(txnMgr, null, "t14", partSpec);
+    Assert.assertEquals("Unexpected lock count", 1, locks.size());
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db1", "t14", 
"ds=today", locks.get(0));
+
+    // SHOW LOCKS t15
+    cpr = driver.run("use db2");
+    checkCmdOnDriver(cpr);
+    locks = getLocksWithFilterOptions(txnMgr3, null, "t15", null);
+    Assert.assertEquals("Unexpected lock count", 1, locks.size());
+    checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "db2", "t15", null, 
locks.get(0));
+  }
+
   private void checkCmdOnDriver(CommandProcessorResponse cpr) {
     Assert.assertTrue(cpr.toString(), cpr.getResponseCode() == 0);
   }
@@ -1171,4 +1274,27 @@ public class TestDbTxnManager2 {
     Assert.assertEquals("COMPLETED_TXN_COMPONENTS mismatch: " + 
TxnDbUtil.queryToString("select * from COMPLETED_TXN_COMPONENTS"),
       4, TxnDbUtil.countQueryAgent("select count(*) from 
COMPLETED_TXN_COMPONENTS where ctc_table='tab1' and ctc_partition is not 
null"));
   }
+
+  private List<ShowLocksResponseElement> 
getLocksWithFilterOptions(HiveTxnManager txnMgr,
+      String dbName, String tblName, Map<String, String> partSpec) throws 
Exception {
+    if (dbName == null && tblName != null) {
+      dbName = SessionState.get().getCurrentDatabase();
+    }
+    ShowLocksRequest rqst = new ShowLocksRequest();
+    rqst.setDbname(dbName);
+    rqst.setTablename(tblName);
+    if (partSpec != null) {
+      List<String> keyList = new ArrayList<String>();
+      List<String> valList = new ArrayList<String>();
+      for (String partKey : partSpec.keySet()) {
+        String partVal = partSpec.remove(partKey);
+        keyList.add(partKey);
+        valList.add(partVal);
+      }
+      String partName = FileUtils.makePartName(keyList, valList);
+      rqst.setPartname(partName);
+    }
+    ShowLocksResponse rsp = 
((DbLockManager)txnMgr.getLockManager()).getLocks(rqst);
+    return rsp.getLocks();
+  }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/test/queries/clientpositive/dbtxnmgr_showlocks.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/dbtxnmgr_showlocks.q 
b/ql/src/test/queries/clientpositive/dbtxnmgr_showlocks.q
index 30b26f4..da8e448 100644
--- a/ql/src/test/queries/clientpositive/dbtxnmgr_showlocks.q
+++ b/ql/src/test/queries/clientpositive/dbtxnmgr_showlocks.q
@@ -8,3 +8,17 @@ show locks extended;
 show locks default;
 
 show transactions;
+
+create table partitioned_acid_table (a int, b int) partitioned by (p string) 
clustered by (a) into 2 buckets stored as orc tblproperties 
('transactional'='true');
+
+show locks database default;
+
+show locks partitioned_acid_table;
+
+show locks partitioned_acid_table extended;
+
+show locks partitioned_acid_table partition (p='abc');
+
+show locks partitioned_acid_table partition (p='abc') extended;
+
+drop table partitioned_acid_table;

http://git-wip-us.apache.org/repos/asf/hive/blob/6c160bc1/ql/src/test/results/clientpositive/dbtxnmgr_showlocks.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/dbtxnmgr_showlocks.q.out 
b/ql/src/test/results/clientpositive/dbtxnmgr_showlocks.q.out
index 46d8ea1..c1adeb3 100644
--- a/ql/src/test/results/clientpositive/dbtxnmgr_showlocks.q.out
+++ b/ql/src/test/results/clientpositive/dbtxnmgr_showlocks.q.out
@@ -2,19 +2,60 @@ PREHOOK: query: show locks
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: show locks
 POSTHOOK: type: SHOWLOCKS
-Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
 PREHOOK: query: show locks extended
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: show locks extended
 POSTHOOK: type: SHOWLOCKS
-Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
 PREHOOK: query: show locks default
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: show locks default
 POSTHOOK: type: SHOWLOCKS
-Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
 PREHOOK: query: show transactions
 PREHOOK: type: SHOW TRANSACTIONS
 POSTHOOK: query: show transactions
 POSTHOOK: type: SHOW TRANSACTIONS
 Transaction ID Transaction State       User    Hostname
+PREHOOK: query: create table partitioned_acid_table (a int, b int) partitioned 
by (p string) clustered by (a) into 2 buckets stored as orc tblproperties 
('transactional'='true')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@partitioned_acid_table
+POSTHOOK: query: create table partitioned_acid_table (a int, b int) 
partitioned by (p string) clustered by (a) into 2 buckets stored as orc 
tblproperties ('transactional'='true')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@partitioned_acid_table
+PREHOOK: query: show locks database default
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: show locks database default
+POSTHOOK: type: SHOWLOCKS
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
+PREHOOK: query: show locks partitioned_acid_table
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: show locks partitioned_acid_table
+POSTHOOK: type: SHOWLOCKS
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
+PREHOOK: query: show locks partitioned_acid_table extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: show locks partitioned_acid_table extended
+POSTHOOK: type: SHOWLOCKS
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
+PREHOOK: query: show locks partitioned_acid_table partition (p='abc')
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: show locks partitioned_acid_table partition (p='abc')
+POSTHOOK: type: SHOWLOCKS
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
+PREHOOK: query: show locks partitioned_acid_table partition (p='abc') extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: show locks partitioned_acid_table partition (p='abc') extended
+POSTHOOK: type: SHOWLOCKS
+Lock ID        Database        Table   Partition       State   Blocked By      
Type    Transaction ID  Last Hearbeat   Acquired At     User    Hostname
+PREHOOK: query: drop table partitioned_acid_table
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@partitioned_acid_table
+PREHOOK: Output: default@partitioned_acid_table
+POSTHOOK: query: drop table partitioned_acid_table
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@partitioned_acid_table
+POSTHOOK: Output: default@partitioned_acid_table

Reply via email to