[2/2] hive git commit: HIVE-19859: Inspect lock components for DBHiveLock while verifying whether transaction list is valid (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)

2018-06-12 Thread jcamacho
HIVE-19859: Inspect lock components for DBHiveLock while verifying whether 
transaction list is valid (Jesus Camacho Rodriguez, reviewed by Ashutosh 
Chauhan)


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

Branch: refs/heads/branch-3
Commit: 59f8aae2c5ce26d14874b98d3135a81640085435
Parents: 1cd543f
Author: Jesus Camacho Rodriguez 
Authored: Tue Jun 12 09:23:28 2018 -0700
Committer: Jesus Camacho Rodriguez 
Committed: Tue Jun 12 16:10:12 2018 -0700

--
 .../java/org/apache/hadoop/hive/ql/Driver.java  | 31 +++-
 .../hadoop/hive/ql/lockmgr/DbLockManager.java   | 18 ++--
 .../apache/hadoop/hive/ql/lockmgr/HiveLock.java | 26 
 3 files changed, 66 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hive/blob/59f8aae2/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
--
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java 
b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
index 8b5262a..1f6bb6a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
@@ -64,6 +64,8 @@ import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.LockComponent;
+import org.apache.hadoop.hive.metastore.api.LockType;
 import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.cache.results.CacheUsage;
@@ -806,13 +808,27 @@ public class Driver implements IDriver {
 }
 Set nonSharedLocks = new HashSet<>();
 for (HiveLock lock : ctx.getHiveLocks()) {
-  if (lock.getHiveLockMode() == HiveLockMode.EXCLUSIVE ||
-  lock.getHiveLockMode() == HiveLockMode.SEMI_SHARED) {
-if (lock.getHiveLockObject().getPaths().length == 2) {
-  // Pos 0 of lock paths array contains dbname, pos 1 contains tblname
-  nonSharedLocks.add(
-  Warehouse.getQualifiedName(
-  lock.getHiveLockObject().getPaths()[0], 
lock.getHiveLockObject().getPaths()[1]));
+  if (lock.mayContainComponents()) {
+// The lock may have multiple components, e.g., DbHiveLock, hence we 
need
+// to check for each of them
+for (LockComponent lckCmp : lock.getHiveLockComponents()) {
+  if (lckCmp.getType() == LockType.EXCLUSIVE ||
+  lckCmp.getType() == LockType.SHARED_WRITE) {
+nonSharedLocks.add(
+Warehouse.getQualifiedName(
+lckCmp.getDbname(), lckCmp.getTablename()));
+  }
+}
+  } else {
+// The lock has a single components, e.g., SimpleHiveLock or 
ZooKeeperHiveLock
+if (lock.getHiveLockMode() == HiveLockMode.EXCLUSIVE ||
+lock.getHiveLockMode() == HiveLockMode.SEMI_SHARED) {
+  if (lock.getHiveLockObject().getPaths().length == 2) {
+// Pos 0 of lock paths array contains dbname, pos 1 contains 
tblname
+nonSharedLocks.add(
+Warehouse.getQualifiedName(
+lock.getHiveLockObject().getPaths()[0], 
lock.getHiveLockObject().getPaths()[1]));
+  }
 }
   }
 }
@@ -1937,6 +1953,7 @@ public class Driver implements IDriver {
 
   try {
 if (!isValidTxnListState()) {
+  LOG.info("Compiling after acquiring locks");
   // Snapshot was outdated when locks were acquired, hence regenerate 
context,
   // txn list and retry
   // TODO: Lock acquisition should be moved before analyze, this is a 
bit hackish.

http://git-wip-us.apache.org/repos/asf/hive/blob/59f8aae2/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 ab94475..1a04278 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
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.ql.lockmgr;
 
+import com.google.common.collect.ImmutableList;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.exec.DDLTask;
 import org.slf4j.Logger;
@@ -114,7 +115,7 @@ public final class DbLockManager implements HiveLockManager{
  

hive git commit: HIVE-19859: Inspect lock components for DBHiveLock while verifying whether transaction list is valid (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)

2018-06-12 Thread jcamacho
Repository: hive
Updated Branches:
  refs/heads/master e7cee3001 -> 230ae3629


HIVE-19859: Inspect lock components for DBHiveLock while verifying whether 
transaction list is valid (Jesus Camacho Rodriguez, reviewed by Ashutosh 
Chauhan)


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

Branch: refs/heads/master
Commit: 230ae362943585aa77f469b7563b41c6a2987997
Parents: e7cee30
Author: Jesus Camacho Rodriguez 
Authored: Tue Jun 12 09:23:28 2018 -0700
Committer: Jesus Camacho Rodriguez 
Committed: Tue Jun 12 12:55:46 2018 -0700

--
 .../java/org/apache/hadoop/hive/ql/Driver.java  | 31 +++-
 .../hadoop/hive/ql/lockmgr/DbLockManager.java   | 18 ++--
 .../apache/hadoop/hive/ql/lockmgr/HiveLock.java | 26 
 3 files changed, 66 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hive/blob/230ae362/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
--
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java 
b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
index c9d18a6..abeb7fc 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
@@ -64,6 +64,8 @@ import org.apache.hadoop.hive.metastore.HiveMetaStoreUtils;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.hadoop.hive.metastore.api.LockComponent;
+import org.apache.hadoop.hive.metastore.api.LockType;
 import org.apache.hadoop.hive.metastore.api.Schema;
 import org.apache.hadoop.hive.metastore.utils.MetaStoreUtils;
 import org.apache.hadoop.hive.ql.cache.results.CacheUsage;
@@ -809,13 +811,27 @@ public class Driver implements IDriver {
 }
 Set nonSharedLocks = new HashSet<>();
 for (HiveLock lock : ctx.getHiveLocks()) {
-  if (lock.getHiveLockMode() == HiveLockMode.EXCLUSIVE ||
-  lock.getHiveLockMode() == HiveLockMode.SEMI_SHARED) {
-if (lock.getHiveLockObject().getPaths().length == 2) {
-  // Pos 0 of lock paths array contains dbname, pos 1 contains tblname
-  nonSharedLocks.add(
-  Warehouse.getQualifiedName(
-  lock.getHiveLockObject().getPaths()[0], 
lock.getHiveLockObject().getPaths()[1]));
+  if (lock.mayContainComponents()) {
+// The lock may have multiple components, e.g., DbHiveLock, hence we 
need
+// to check for each of them
+for (LockComponent lckCmp : lock.getHiveLockComponents()) {
+  if (lckCmp.getType() == LockType.EXCLUSIVE ||
+  lckCmp.getType() == LockType.SHARED_WRITE) {
+nonSharedLocks.add(
+Warehouse.getQualifiedName(
+lckCmp.getDbname(), lckCmp.getTablename()));
+  }
+}
+  } else {
+// The lock has a single components, e.g., SimpleHiveLock or 
ZooKeeperHiveLock
+if (lock.getHiveLockMode() == HiveLockMode.EXCLUSIVE ||
+lock.getHiveLockMode() == HiveLockMode.SEMI_SHARED) {
+  if (lock.getHiveLockObject().getPaths().length == 2) {
+// Pos 0 of lock paths array contains dbname, pos 1 contains 
tblname
+nonSharedLocks.add(
+Warehouse.getQualifiedName(
+lock.getHiveLockObject().getPaths()[0], 
lock.getHiveLockObject().getPaths()[1]));
+  }
 }
   }
 }
@@ -1938,6 +1954,7 @@ public class Driver implements IDriver {
 
   try {
 if (!isValidTxnListState()) {
+  LOG.info("Compiling after acquiring locks");
   // Snapshot was outdated when locks were acquired, hence regenerate 
context,
   // txn list and retry
   // TODO: Lock acquisition should be moved before analyze, this is a 
bit hackish.

http://git-wip-us.apache.org/repos/asf/hive/blob/230ae362/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 ab94475..1a04278 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
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hive.ql.lockmgr;
 
+import com.google.common.collect.ImmutableList;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.exec.DDLTask;
 import org.slf4j.Logger;
@@ -1