Author: hashutosh
Date: Mon Jul 8 03:48:32 2013
New Revision: 1500569
URL: http://svn.apache.org/r1500569
Log:
HIVE-4733 : HiveLockObjectData is not compared properly (Navis via Ashutosh
Chauhan)
Modified:
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
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=1500569&r1=1500568&r2=1500569&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
Mon Jul 8 03:48:32 2013
@@ -18,6 +18,8 @@
package org.apache.hadoop.hive.ql.lockmgr;
+import java.util.Arrays;
+
import org.apache.hadoop.hive.ql.metadata.DummyPartition;
import org.apache.hadoop.hive.ql.metadata.Partition;
import org.apache.hadoop.hive.ql.metadata.Table;
@@ -94,16 +96,16 @@ public class HiveLockObject {
}
HiveLockObjectData target = (HiveLockObjectData) o;
- boolean ret = (queryId == null) ? target.getQueryId() == null :
- queryId.equals(target.getQueryId());
- ret = ret && (lockTime == null) ? target.getLockTime() == null :
- queryId.equals(target.getLockTime());
- ret = ret && (lockMode == null) ? target.getLockMode() == null :
- queryId.equals(target.getLockMode());
- ret = ret && (queryStr == null) ? target.getQueryStr() == null :
- queryStr.equals(target.getQueryStr());
- ret = ret && (clientIp == null) ? target.getClientIp() == null :
- clientIp.equals(target.getClientIp());
+ boolean ret = (queryId == null ? target.queryId == null :
+ target.queryId != null && queryId.equals(target.queryId));
+ ret = ret && (lockTime == null ? target.lockTime == null :
+ target.lockTime != null && lockTime.equals(target.lockTime));
+ ret = ret && (lockMode == null ? target.lockMode == null :
+ target.lockMode != null && lockMode.equals(target.lockMode));
+ ret = ret && (queryStr == null ? target.queryStr == null :
+ target.queryStr != null && queryStr.equals(target.queryStr));
+ ret = ret && (clientIp == null ? target.clientIp == null :
+ target.clientIp != null && clientIp.equals(target.clientIp));
return ret;
}
@@ -145,20 +147,17 @@ public class HiveLockObject {
}
public String getName() {
- if (this.pathNames == null) {
+ if (pathNames == null) {
return null;
}
- String ret = "";
- boolean first = true;
+ StringBuilder builder = new StringBuilder();
for (int i = 0; i < pathNames.length; i++) {
- if (!first) {
- ret = ret + "/";
- } else {
- first = false;
+ if (i > 0) {
+ builder.append('/');
}
- ret = ret + pathNames[i];
+ builder.append(pathNames[i]);
}
- return ret;
+ return builder.toString();
}
public String getDisplayName() {
@@ -200,7 +199,8 @@ public class HiveLockObject {
}
HiveLockObject tgt = (HiveLockObject) o;
- return getName().equals(tgt.getName()) &&
- data == null ? tgt.getData() == null : data.equals(tgt.getData());
+ return Arrays.equals(pathNames, tgt.pathNames) &&
+ data == null ? tgt.getData() == null :
+ tgt.getData() != null && data.equals(tgt.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=1500569&r1=1500568&r2=1500569&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
Mon Jul 8 03:48:32 2013
@@ -446,20 +446,20 @@ public class ZooKeeperHiveLockManager im
HiveLock hiveLock, String parent) throws
LockException {
ZooKeeperHiveLock zLock = (ZooKeeperHiveLock)hiveLock;
try {
+ // can throw KeeperException.NoNodeException, which might mean something
is wrong
zkpClient.delete(zLock.getPath(), -1);
// Delete the parent node if all the children have been deleted
HiveLockObject obj = zLock.getHiveLockObject();
String name = getLastObjectName(parent, obj);
- List<String> children = zkpClient.getChildren(name, false);
- if ((children == null) || (children.isEmpty()))
- {
- try {
+ try {
+ List<String> children = zkpClient.getChildren(name, false);
+ if (children == null || children.isEmpty()) {
zkpClient.delete(name, -1);
- } catch (KeeperException.NoNodeException e) {
- LOG.debug("Node " + name + " previously deleted when attempting to
delete.");
}
+ } catch (KeeperException.NoNodeException e) {
+ LOG.debug("Node " + name + " previously deleted when attempting to
delete.");
}
} catch (Exception e) {
LOG.error("Failed to release ZooKeeper lock: ", e);