KYLIN-2624 fix IT with refactored DistributedLock

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

Branch: refs/heads/KYLIN-2606
Commit: d21c8170b7bbc8f750aadab5c68d229dee6d252f
Parents: f36372b
Author: Hongbin Ma <mahong...@apache.org>
Authored: Fri May 19 22:44:50 2017 +0800
Committer: hongbin ma <m...@kyligence.io>
Committed: Fri May 19 22:48:41 2017 +0800

----------------------------------------------------------------------
 .../hbase/util/ZookeeperDistributedLock.java    | 30 +++++++++++++-------
 1 file changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/d21c8170/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
----------------------------------------------------------------------
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
index d181d81..ea64bbf 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
@@ -123,7 +123,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
             throw new NullPointerException("client must not be null");
         if (zkPathBase == null)
             throw new NullPointerException("zkPathBase must not be null");
-        
+
         this.curator = curator;
         this.zkPathBase = zkPathBase;
         this.client = client;
@@ -138,7 +138,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
     @Override
     public boolean lock(String lockPath) {
         lockPath = norm(lockPath);
-        
+
         logger.debug(client + " trying to lock " + lockPath);
 
         try {
@@ -148,7 +148,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
         } catch (Exception ex) {
             throw new RuntimeException("Error while " + client + " trying to 
lock " + lockPath, ex);
         }
-        
+
         String lockOwner = peekLock(lockPath);
         if (client.equals(lockOwner)) {
             logger.info(client + " acquired lock at " + lockPath);
@@ -214,7 +214,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
     public boolean isLockedByMe(String lockPath) {
         return client.equals(peekLock(lockPath));
     }
-    
+
     @Override
     public void unlock(String lockPath) {
         lockPath = norm(lockPath);
@@ -236,7 +236,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
             throw new RuntimeException("Error while " + client + " trying to 
unlock " + lockPath, ex);
         }
     }
-    
+
     @Override
     public void purgeLocks(String lockPathRoot) {
         lockPathRoot = norm(lockPathRoot);
@@ -245,7 +245,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
             
curator.delete().guaranteed().deletingChildrenIfNeeded().forPath(lockPathRoot);
 
             logger.info(client + " purged all locks under " + lockPathRoot);
-            
+
         } catch (Exception ex) {
             throw new RuntimeException("Error while " + client + " trying to 
purge " + lockPathRoot, ex);
         }
@@ -278,13 +278,21 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
         }
         return cache;
     }
-    
+
     // normalize lock path
     private String norm(String lockPath) {
-        if (lockPath.startsWith(zkPathBase))
-            return lockPath;
-        else
-            return zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+        if (!lockPath.startsWith(zkPathBase))
+            lockPath = zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+
+        return dropDoubleSlash(lockPath);
+    }
+
+    public static String dropDoubleSlash(String path) {
+        for (int n = Integer.MAX_VALUE; n > path.length();) {
+            n = path.length();
+            path = path.replace("//", "/");
+        }
+        return path;
     }
 
     // 
============================================================================

Reply via email to