You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2010/12/07 07:48:48 UTC

svn commit: r1042920 - in /hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/exec/ ql/src/java/org/apache/hadoop/hive/ql/lockmgr/ ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ ql/src/java/org/apache/hadoop/hive/ql/parse/ ql/src/test/queri...

Author: namit
Date: Tue Dec  7 06:48:47 2010
New Revision: 1042920

URL: http://svn.apache.org/viewvc?rev=1042920&view=rev
Log:
HIVE-1828 No need to get Table/Partition for show locks.
(He Yongqiang via namit)


Added:
    hive/trunk/ql/src/test/queries/clientnegative/lockneg5.q
    hive/trunk/ql/src/test/results/clientnegative/lockneg5.q.out
Modified:
    hive/trunk/CHANGES.txt
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
    hive/trunk/ql/src/test/queries/clientpositive/lock1.q
    hive/trunk/ql/src/test/results/clientpositive/lock1.q.out

Modified: hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hive/trunk/CHANGES.txt?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/CHANGES.txt (original)
+++ hive/trunk/CHANGES.txt Tue Dec  7 06:48:47 2010
@@ -567,6 +567,9 @@ Trunk -  Unreleased
     HIVE-1824 Create a new ZooKeeper instance when retrying lock
     (He Yongqiang via namit)
 
+    HIVE-1828 No need to get Table/Partition for show locks.
+    (He Yongqiang via namit)
+
   TESTS
 
     HIVE-1464. improve  test query performance

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java Tue Dec  7 06:48:47 2010
@@ -1347,11 +1347,11 @@ public class DDLTask extends Task<DDLWor
       List<HiveLock> locks = null;
 
       if (showLocks.getTableName() == null) {
-        locks = lockMgr.getLocks();
+        locks = lockMgr.getLocks(isExt);
       }
       else {
         locks = lockMgr.getLocks(getHiveObject(showLocks.getTableName(),
-                                               showLocks.getPartSpec()));
+                                               showLocks.getPartSpec()), isExt);
       }
 
       Collections.sort(locks, new Comparator<HiveLock>() {
@@ -1495,7 +1495,7 @@ public class DDLTask extends Task<DDLWor
     String tabName = unlockTbl.getTableName();
     HiveLockObject obj = getHiveObject(tabName, unlockTbl.getPartSpec());
 
-    List<HiveLock> locks = lockMgr.getLocks(obj);
+    List<HiveLock> locks = lockMgr.getLocks(obj, false);
     if ((locks == null) || (locks.isEmpty())) {
       throw new HiveException("Table " + tabName + " is not locked ");
     }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockManager.java Tue Dec  7 06:48:47 2010
@@ -35,7 +35,7 @@ public interface HiveLockManager {
       boolean keepAlive, int numRetries, int sleepTime) throws LockException;
   public void unlock(HiveLock hiveLock) throws LockException;
 
-  public List<HiveLock> getLocks() throws LockException;
-  public List<HiveLock> getLocks(HiveLockObject key) throws LockException;
+  public List<HiveLock> getLocks(boolean verifyTablePartitions) throws LockException;
+  public List<HiveLock> getLocks(HiveLockObject key, boolean fetchData) throws LockException;
   public void close() throws LockException;
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java Tue Dec  7 06:48:47 2010
@@ -22,60 +22,45 @@ import org.apache.hadoop.hive.ql.metadat
 import org.apache.hadoop.hive.ql.metadata.Table;
 
 public class HiveLockObject {
-  /**
-   * The table.
-   */
-  private Table t;
-
-  /**
-   * The partition. This is null for a non partitioned table.
-   */
-  private Partition p;
+  
+  String [] pathNames = null;
 
   /* user supplied data for that object */
   private String    data;
 
   public HiveLockObject() {
-    this.t = null;
-    this.p = null;
     this.data = null;
   }
-
-  public HiveLockObject(Table t, String data) {
-    this.t = t;
-    this.p = null;
-    this.data = data;
-  }
-
-  public HiveLockObject(Partition p, String data) {
-    this.t = null;
-    this.p = p;
-    this.data = data;
-  }
-
-  public Table getTable() {
-    return t;
-  }
-
-  public void setTable (Table t) {
-    this.t = t;
-  }
-
-  public Partition getPartition() {
-    return p;
+  
+  public HiveLockObject(String[] paths, String lockData) {
+    this.pathNames = paths;
+    this.data = lockData;
+  }
+  
+  public HiveLockObject(Table tbl, String lockData) {
+    this(new String[] {tbl.getDbName(), tbl.getTableName()}, lockData);
   }
 
-  public void setPartition (Partition p) {
-    this.p = p;
+  public HiveLockObject(Partition par, String lockData) {
+    this(new String[] { par.getTable().getDbName(),
+        par.getTable().getTableName(), par.getName() }, lockData);
   }
 
   public String getName() {
-    if (t != null) {
-      return t.getCompleteName();
+    if (this.pathNames == null) {
+      return null;
     }
-    else {
-      return p.getCompleteName();
+    String ret = "";
+    boolean first = true;
+    for (int i = 0; i < pathNames.length; i++) {
+      if (!first) {
+        ret = ret + "@";
+      } else {
+        first = false;
+      }
+      ret = ret + pathNames[i];
     }
+    return ret;
   }
 
   public String getData() {

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java Tue Dec  7 06:48:47 2010
@@ -242,7 +242,7 @@ public class ZooKeeperHiveLockManager im
       String quorumServers = getQuorumServers(conf);
       ZooKeeper zkpClient = new ZooKeeper(quorumServers, sessionTimeout, new DummyWatcher());
       String parent = conf.getVar(HiveConf.ConfVars.HIVE_ZOOKEEPER_NAMESPACE);
-      List<HiveLock> locks = getLocks(conf, zkpClient, null, parent);
+      List<HiveLock> locks = getLocks(conf, zkpClient, null, parent, false, false);
 
       if (locks != null) {
         for (HiveLock lock : locks) {
@@ -259,13 +259,13 @@ public class ZooKeeperHiveLockManager im
   }
 
   /* Get all locks */
-  public List<HiveLock> getLocks() throws LockException {
-    return getLocks(ctx.getConf(), zooKeeper, null, parent);
+  public List<HiveLock> getLocks(boolean verifyTablePartition) throws LockException {
+    return getLocks(ctx.getConf(), zooKeeper, null, parent, verifyTablePartition, false);
   }
 
   /* Get all locks for a particular object */
-  public List<HiveLock> getLocks(HiveLockObject key) throws LockException {
-    return getLocks(ctx.getConf(), zooKeeper, key, parent);
+  public List<HiveLock> getLocks(HiveLockObject key, boolean fetchData) throws LockException {
+    return getLocks(ctx.getConf(), zooKeeper, key, parent, false, fetchData);
   }
 
   /**
@@ -274,7 +274,8 @@ public class ZooKeeperHiveLockManager im
    * @param key         The object to be compared against - if key is null, then get all locks
    **/
   private static List<HiveLock> getLocks(HiveConf conf, ZooKeeper zkpClient,
-                                         HiveLockObject key, String parent) throws LockException {
+      HiveLockObject key, String parent, boolean verifyTablePartition, boolean fetchData)
+      throws LockException {
     List<HiveLock> locks = new ArrayList<HiveLock>();
     List<String> children;
 
@@ -284,29 +285,33 @@ public class ZooKeeperHiveLockManager im
       // no locks present
       return locks;
     }
-
+    
     for (String child : children) {
-      String data = "NULL";
       child = "/" + parent + "/" + child;
-
-      try {
-        data = new String(zkpClient.getData(child, new DummyWatcher(), null));
-      } catch (Exception e) {
-        LOG.error("Error in getting data for " + child + " " + e);
-        // ignore error
-      }
-
+      
       HiveLockMode mode = getLockMode(conf, child);
       if (mode == null) {
         continue;
       }
-
-      HiveLockObject obj   = getLockObject(conf, child, mode, data);
+      
+      String data = "NULL";
+      //set the lock object with a dummy data, and then do a set if needed.
+      HiveLockObject obj   = getLockObject(conf, child, mode, data, verifyTablePartition);
       if (obj == null) {
         continue;
       }
+      
       if ((key == null) ||
           (obj.getName().equals(key.getName()))) {
+        if (fetchData) {
+          try {
+            data = new String(zkpClient.getData(child, new DummyWatcher(), null));
+          } catch (Exception e) {
+            LOG.error("Error in getting data for " + child + " " + e);
+            // ignore error
+          }
+        }
+        obj.setData(data);
         HiveLock lck = (HiveLock)(new ZooKeeperHiveLock(child, obj, mode));
         locks.add(lck);
       }
@@ -345,9 +350,11 @@ public class ZooKeeperHiveLockManager im
    * The object may correspond to a table, a partition or a parent to a partition.
    * For eg: if Table T is partitioned by ds, hr and ds=1/hr=1 is a valid partition,
    * the lock may also correspond to T@ds=1, which is not a valid object
+   * @param verifyTablePartition 
    **/
   private static HiveLockObject getLockObject(HiveConf conf, String path,
-                                              HiveLockMode mode, String data) throws LockException {
+      HiveLockMode mode, String data, boolean verifyTablePartition)
+      throws LockException {
     try {
       Hive db = Hive.get(conf);
       int indx = path.lastIndexOf(mode.toString());
@@ -357,8 +364,18 @@ public class ZooKeeperHiveLockManager im
       if (names.length < 2) {
         return null;
       }
-
-      Table tab = db.getTable(MetaStoreUtils.DEFAULT_DATABASE_NAME,
+      
+      if (!verifyTablePartition) {
+        if (names.length == 2) {
+          return new HiveLockObject(names, data);
+        } else {
+          return new HiveLockObject(objName.split("/")[1].replaceAll(
+              conf.getVar(HiveConf.ConfVars.DEFAULT_ZOOKEEPER_PARTITION_NAME),
+              "/").split("@"), data);
+        }
+      }
+      
+      Table tab = db.getTable(MetaStoreUtils.DEFAULT_DATABASE_NAME, //need to change to names[0]
                               names[1], false); // do not throw exception if table does not exist
       if (tab == null) {
         return null;

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Tue Dec  7 06:48:47 2010
@@ -965,17 +965,19 @@ public class DDLSemanticAnalyzer extends
 
     if (ast.getChildCount() >= 1) {
       // table for which show locks is being executed
-      ASTNode tableTypeExpr = (ASTNode) ast.getChild(0);
-      tableName = getFullyQualifiedName((ASTNode)tableTypeExpr.getChild(0));
-
-      // get partition metadata if partition specified
-      if (tableTypeExpr.getChildCount() == 2) {
-        ASTNode partspec = (ASTNode) tableTypeExpr.getChild(1);
-        partSpec = getPartSpec(partspec);
-      }
-
-      if (ast.getChildCount() >= 2) {
-        isExtended = (ast.getChild(1).getType() == HiveParser.KW_EXTENDED);
+      for (int i = 0; i < ast.getChildCount(); i++) {
+        ASTNode child = (ASTNode) ast.getChild(i);
+        if (child.getType() == HiveParser.TOK_TABTYPE) {
+          ASTNode tableTypeExpr = (ASTNode) child;
+          tableName = getFullyQualifiedName((ASTNode) tableTypeExpr.getChild(0));
+          // get partition metadata if partition specified
+          if (tableTypeExpr.getChildCount() == 2) {
+            ASTNode partspec = (ASTNode) tableTypeExpr.getChild(1);
+            partSpec = getPartSpec(partspec);
+          }
+        } else if (child.getType() == HiveParser.KW_EXTENDED) {
+          isExtended = true;
+        }
       }
     }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Tue Dec  7 06:48:47 2010
@@ -678,8 +678,7 @@ showStatement
     | KW_SHOW KW_PARTITIONS Identifier partitionSpec? -> ^(TOK_SHOWPARTITIONS Identifier partitionSpec?)
     | KW_SHOW KW_TABLE KW_EXTENDED ((KW_FROM|KW_IN) db_name=Identifier)? KW_LIKE showStmtIdentifier partitionSpec?
     -> ^(TOK_SHOW_TABLESTATUS showStmtIdentifier $db_name? partitionSpec?)
-    | KW_SHOW KW_LOCKS -> ^(TOK_SHOWLOCKS)
-    | KW_SHOW KW_LOCKS (parttype=partTypeExpr) (isExtended=KW_EXTENDED)? -> ^(TOK_SHOWLOCKS $parttype $isExtended?)
+    | KW_SHOW KW_LOCKS (parttype=partTypeExpr)? (isExtended=KW_EXTENDED)? -> ^(TOK_SHOWLOCKS $parttype? $isExtended?)
     | KW_SHOW (showOptions=KW_FORMATTED)? (KW_INDEX|KW_INDEXES) KW_ON showStmtIdentifier ((KW_FROM|KW_IN) db_name=Identifier)?
     -> ^(TOK_SHOWINDEXES showStmtIdentifier $showOptions? $db_name?)  
     ;

Added: hive/trunk/ql/src/test/queries/clientnegative/lockneg5.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/lockneg5.q?rev=1042920&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/lockneg5.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/lockneg5.q Tue Dec  7 06:48:47 2010
@@ -0,0 +1,2 @@
+drop table tstsrcpart;
+show locks tstsrcpart extended;
\ No newline at end of file

Modified: hive/trunk/ql/src/test/queries/clientpositive/lock1.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/lock1.q?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/lock1.q (original)
+++ hive/trunk/ql/src/test/queries/clientpositive/lock1.q Tue Dec  7 06:48:47 2010
@@ -12,14 +12,18 @@ SHOW LOCKS tstsrc extended;
 
 UNLOCK TABLE tstsrc;
 SHOW LOCKS;
+SHOW LOCKS extended;
 SHOW LOCKS tstsrc;
 lock TABLE tstsrc SHARED;
 SHOW LOCKS;
+SHOW LOCKS extended;
 SHOW LOCKS tstsrc;
 LOCK TABLE tstsrc SHARED;
 SHOW LOCKS;
+SHOW LOCKS extended;
 SHOW LOCKS tstsrc;
 UNLOCK TABLE tstsrc;
 SHOW LOCKS;
+SHOW LOCKS extended;
 SHOW LOCKS tstsrc;
 drop table tstsrc;

Added: hive/trunk/ql/src/test/results/clientnegative/lockneg5.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/lockneg5.q.out?rev=1042920&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/lockneg5.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/lockneg5.q.out Tue Dec  7 06:48:47 2010
@@ -0,0 +1,8 @@
+PREHOOK: query: drop table tstsrcpart
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: drop table tstsrcpart
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: show locks tstsrcpart extended
+PREHOOK: type: SHOWLOCKS
+FAILED: Error in metadata: org.apache.hadoop.hive.ql.metadata.InvalidTableException: Table not found 
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Modified: hive/trunk/ql/src/test/results/clientpositive/lock1.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/lock1.q.out?rev=1042920&r1=1042919&r2=1042920&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/lock1.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/lock1.q.out Tue Dec  7 06:48:47 2010
@@ -56,7 +56,7 @@ POSTHOOK: type: SHOWLOCKS
 POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
 POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
 default@tstsrc	SHARED
-QUERYID_LOCK:njain_20101116183333_f1267a1d-8cc2-4077-ab5d-380708a0494b TIME : 1289961194566	 
+QUERYID_LOCK:heyongqiang_20101203190404_a00af404-b094-4552-8ecc-0004930a878a TIME : 1291431894235	 
 PREHOOK: query: UNLOCK TABLE tstsrc
 PREHOOK: type: UNLOCKTABLE
 POSTHOOK: query: UNLOCK TABLE tstsrc
@@ -69,6 +69,12 @@ POSTHOOK: query: SHOW LOCKS
 POSTHOOK: type: SHOWLOCKS
 POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
 POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: SHOW LOCKS extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: SHOW LOCKS extended
+POSTHOOK: type: SHOWLOCKS
+POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
 PREHOOK: query: SHOW LOCKS tstsrc
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: SHOW LOCKS tstsrc
@@ -88,6 +94,14 @@ POSTHOOK: type: SHOWLOCKS
 POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
 POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
 default@tstsrc	SHARED
+PREHOOK: query: SHOW LOCKS extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: SHOW LOCKS extended
+POSTHOOK: type: SHOWLOCKS
+POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+default@tstsrc	SHARED
+QUERYID_LOCK:heyongqiang_20101203190404_feadd884-14ab-4305-8078-605128a33c42 TIME : 1291431894956	 
 PREHOOK: query: SHOW LOCKS tstsrc
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: SHOW LOCKS tstsrc
@@ -109,6 +123,16 @@ POSTHOOK: Lineage: tstsrc.key SIMPLE [(s
 POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
 default@tstsrc	SHARED
 default@tstsrc	SHARED
+PREHOOK: query: SHOW LOCKS extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: SHOW LOCKS extended
+POSTHOOK: type: SHOWLOCKS
+POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+default@tstsrc	SHARED
+QUERYID_LOCK:heyongqiang_20101203190404_53022be2-f951-4b33-895a-d373a5791d16 TIME : 1291431895381	 
+default@tstsrc	SHARED
+QUERYID_LOCK:heyongqiang_20101203190404_feadd884-14ab-4305-8078-605128a33c42 TIME : 1291431894956	 
 PREHOOK: query: SHOW LOCKS tstsrc
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: SHOW LOCKS tstsrc
@@ -129,6 +153,12 @@ POSTHOOK: query: SHOW LOCKS
 POSTHOOK: type: SHOWLOCKS
 POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
 POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
+PREHOOK: query: SHOW LOCKS extended
+PREHOOK: type: SHOWLOCKS
+POSTHOOK: query: SHOW LOCKS extended
+POSTHOOK: type: SHOWLOCKS
+POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
+POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
 PREHOOK: query: SHOW LOCKS tstsrc
 PREHOOK: type: SHOWLOCKS
 POSTHOOK: query: SHOW LOCKS tstsrc