You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by jb...@apache.org on 2016/06/23 14:16:01 UTC

[13/56] [abbrv] incubator-carbondata git commit: [BUG] Zookeeper lock changes to allow exclusive locks for different tables (#688)

[BUG] Zookeeper lock changes to allow exclusive locks for different tables (#688)

added schema name and table name to Zookeeper lock location

Project: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/commit/f479e7ef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/tree/f479e7ef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-carbondata/diff/f479e7ef

Branch: refs/heads/master
Commit: f479e7efecfb10c16ac994a4c933d59efa6bb685
Parents: 6c2469d
Author: ravikiran23 <ra...@gmail.com>
Authored: Fri Jun 17 23:12:33 2016 +0530
Committer: Venkata Ramana G <g....@gmail.com>
Committed: Fri Jun 17 23:12:33 2016 +0530

----------------------------------------------------------------------
 .../core/constants/CarbonCommonConstants.java   |  5 ++++
 .../core/locks/CarbonLockFactory.java           |  2 +-
 .../carbondata/core/locks/ZooKeeperLocking.java | 26 +++++++++++++++++---
 .../core/locks/ZooKeeperLockingTest.java        |  7 ++++--
 4 files changed, 33 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/f479e7ef/core/src/main/java/org/carbondata/core/constants/CarbonCommonConstants.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/constants/CarbonCommonConstants.java b/core/src/main/java/org/carbondata/core/constants/CarbonCommonConstants.java
index bf0fd0b..6618ac0 100644
--- a/core/src/main/java/org/carbondata/core/constants/CarbonCommonConstants.java
+++ b/core/src/main/java/org/carbondata/core/constants/CarbonCommonConstants.java
@@ -1029,6 +1029,11 @@ public final class CarbonCommonConstants {
   public static final String CARBON_LOCK_TYPE_HDFS =
       "HDFSLOCK";
 
+  /**
+   * Lock file in zoo keeper will be of this name.
+   */
+  public static final String ZOOKEEPER_LOCK = "zookeeperLock";
+
   private CarbonCommonConstants() {
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/f479e7ef/core/src/main/java/org/carbondata/core/locks/CarbonLockFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/locks/CarbonLockFactory.java b/core/src/main/java/org/carbondata/core/locks/CarbonLockFactory.java
index 232c2b8..99f4ab1 100644
--- a/core/src/main/java/org/carbondata/core/locks/CarbonLockFactory.java
+++ b/core/src/main/java/org/carbondata/core/locks/CarbonLockFactory.java
@@ -49,7 +49,7 @@ public class CarbonLockFactory {
         return new LocalFileLock(location, lockUsage);
 
       case CarbonCommonConstants.CARBON_LOCK_TYPE_ZOOKEEPER:
-        return new ZooKeeperLocking(lockUsage);
+        return new ZooKeeperLocking(location, lockUsage);
 
       case CarbonCommonConstants.CARBON_LOCK_TYPE_HDFS:
         return new HdfsFileLock(location, lockUsage);

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/f479e7ef/core/src/main/java/org/carbondata/core/locks/ZooKeeperLocking.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/locks/ZooKeeperLocking.java b/core/src/main/java/org/carbondata/core/locks/ZooKeeperLocking.java
index f7f5d0c..8b04ac1 100644
--- a/core/src/main/java/org/carbondata/core/locks/ZooKeeperLocking.java
+++ b/core/src/main/java/org/carbondata/core/locks/ZooKeeperLocking.java
@@ -50,6 +50,11 @@ public class ZooKeeperLocking extends AbstractCarbonLock {
   private static final String zooKeeperLocation = CarbonCommonConstants.ZOOKEEPER_LOCATION;
 
   /**
+   * Unique folder for each cube with SchemaName_CubeName
+   */
+  private final String tableIdFolder;
+
+  /**
    * lockName is the name of the lock to use. This name should be same for every process that want
    * to share the same lock
    */
@@ -65,17 +70,30 @@ public class ZooKeeperLocking extends AbstractCarbonLock {
   /**
    * @param lockUsage
    */
-  public ZooKeeperLocking(LockUsage lockUsage) {
-    this.lockName = CarbonCommonConstants.METADATA_LOCK;
+  public ZooKeeperLocking(String location, LockUsage lockUsage) {
+    this.lockName = CarbonCommonConstants.ZOOKEEPER_LOCK;
     this.lockTypeFolder = zooKeeperLocation;
+    location = location.replace("\\", "/");
+    String tempStr = location.substring(0, location.lastIndexOf('/'));
+    String schemaName = tempStr.substring(tempStr.lastIndexOf('/') + 1, tempStr.length());
+
+    String cubeName = location.substring(location.lastIndexOf('/') + 1, location.length());
+
+    this.tableIdFolder = zooKeeperLocation + CarbonCommonConstants.FILE_SEPARATOR + schemaName
+        + '.' + cubeName;
 
     zk = ZookeeperInit.getInstance().getZookeeper();
 
-    this.lockTypeFolder =
-        zooKeeperLocation + CarbonCommonConstants.FILE_SEPARATOR + lockUsage.toString();
+    this.lockTypeFolder = zooKeeperLocation + CarbonCommonConstants.FILE_SEPARATOR + schemaName
+        + '.' + cubeName + CarbonCommonConstants.FILE_SEPARATOR
+        + lockUsage.toString();
     try {
       createBaseNode();
       // if exists returns null then path doesnt exist. so creating.
+      if (null == zk.exists(this.tableIdFolder, true)) {
+        zk.create(this.tableIdFolder, new byte[1], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+      }
+      // if exists returns null then path doesnt exist. so creating.
       if (null == zk.exists(this.lockTypeFolder, true)) {
         zk.create(this.lockTypeFolder, new byte[1], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
       }

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/f479e7ef/core/src/test/java/org/carbondata/core/locks/ZooKeeperLockingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/carbondata/core/locks/ZooKeeperLockingTest.java b/core/src/test/java/org/carbondata/core/locks/ZooKeeperLockingTest.java
index 5b21dde..3bf3993 100644
--- a/core/src/test/java/org/carbondata/core/locks/ZooKeeperLockingTest.java
+++ b/core/src/test/java/org/carbondata/core/locks/ZooKeeperLockingTest.java
@@ -78,10 +78,13 @@ public class ZooKeeperLockingTest {
 
     ZookeeperInit zki = ZookeeperInit.getInstance("127.0.0.1:" + freePort);
 
-    ZooKeeperLocking zkl = new ZooKeeperLocking(LockUsage.METADATA_LOCK);
+    ZooKeeperLocking zkl =
+        new ZooKeeperLocking("D:/carbondata/examples/target/store/default/t3/Metadata",
+            LockUsage.METADATA_LOCK);
     Assert.assertTrue(zkl.lock());
 
-    ZooKeeperLocking zk2 = new ZooKeeperLocking(LockUsage.METADATA_LOCK);
+    ZooKeeperLocking zk2 = new ZooKeeperLocking(
+        "D:/carbondata/examples/target/store/default/t3/Metadata", LockUsage.METADATA_LOCK);
     Assert.assertTrue(!zk2.lock());
 
     Assert.assertTrue(zkl.unlock());