Author: kwright
Date: Thu Jan 23 13:46:54 2014
New Revision: 1560685

URL: http://svn.apache.org/r1560685
Log:
Add calling infrastructure for ZooKeeper blocking locks

Modified:
    
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperConnection.java
    
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java

Modified: 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperConnection.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperConnection.java?rev=1560685&r1=1560684&r2=1560685&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperConnection.java
 (original)
+++ 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperConnection.java
 Thu Jan 23 13:46:54 2014
@@ -282,6 +282,21 @@ public class ZooKeeperConnection
     }
   }
   
+  /** Obtain a write lock, with wait.
+  *@param lockPath is the lock node path.
+  */
+  public void obtainWriteLock(String lockPath)
+    throws ManifoldCFException, InterruptedException
+  {
+    // MHL to do this the proper ZooKeeper way
+    while (true)
+    {
+      if (obtainWriteLockNoWait(lockPath))
+        return;
+      ManifoldCF.sleep(10L);
+    }
+  }
+
   /** Obtain a non-ex-write lock, with no wait.
   *@param lockPath is the lock node path.
   *@return true if the lock was obtained, false otherwise.
@@ -325,6 +340,21 @@ public class ZooKeeperConnection
     }
   }
 
+  /** Obtain a non-ex-write lock, with wait.
+  *@param lockPath is the lock node path.
+  */
+  public void obtainNonExWriteLock(String lockPath)
+    throws ManifoldCFException, InterruptedException
+  {
+    // MHL to do this the proper ZooKeeper way
+    while (true)
+    {
+      if (obtainNonExWriteLockNoWait(lockPath))
+        return;
+      ManifoldCF.sleep(10L);
+    }
+  }
+
   /** Obtain a read lock, with no wait.
   *@param lockPath is the lock node path.
   *@return true if the lock was obtained, false otherwise.
@@ -368,6 +398,21 @@ public class ZooKeeperConnection
     }
   }
   
+  /** Obtain a read lock, with wait.
+  *@param lockPath is the lock node path.
+  */
+  public void obtainReadLock(String lockPath)
+    throws ManifoldCFException, InterruptedException
+  {
+    // MHL to do this the proper ZooKeeper way
+    while (true)
+    {
+      if (obtainReadLockNoWait(lockPath))
+        return;
+      ManifoldCF.sleep(10L);
+    }
+  }
+  
   /** Release the (saved) lock.
   */
   public void releaseLock()

Modified: 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java?rev=1560685&r1=1560684&r2=1560685&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
 (original)
+++ 
manifoldcf/branches/CONNECTORS-867/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
 Thu Jan 23 13:46:54 2014
@@ -69,6 +69,29 @@ public class ZooKeeperLockObject extends
   }
 
   @Override
+  protected void obtainGlobalWriteLock()
+    throws ManifoldCFException, InterruptedException
+  {
+    if (currentConnection != null)
+      throw new IllegalStateException("Already have a connection before write 
locking: "+lockPath);
+    boolean succeeded = false;
+    currentConnection = pool.grab();
+    try
+    {
+      currentConnection.obtainWriteLock(lockPath);
+      succeeded = true;
+    }
+    finally
+    {
+      if (!succeeded)
+      {
+        pool.release(currentConnection);
+        currentConnection = null;
+      }
+    }
+  }
+
+  @Override
   protected void clearGlobalWriteLockNoWait()
     throws ManifoldCFException, LockException, InterruptedException
   {
@@ -102,6 +125,29 @@ public class ZooKeeperLockObject extends
   }
 
   @Override
+  protected void obtainGlobalNonExWriteLock()
+    throws ManifoldCFException, InterruptedException
+  {
+    if (currentConnection != null)
+      throw new IllegalStateException("Already have a connection before 
non-ex-write locking: "+lockPath);
+    boolean succeeded = false;
+    currentConnection = pool.grab();
+    try
+    {
+      currentConnection.obtainNonExWriteLock(lockPath);
+      succeeded = true;
+    }
+    finally
+    {
+      if (!succeeded)
+      {
+        pool.release(currentConnection);
+        currentConnection = null;
+      }
+    }
+  }
+
+  @Override
   protected void clearGlobalNonExWriteLockNoWait()
     throws ManifoldCFException, LockException, InterruptedException
   {
@@ -135,6 +181,29 @@ public class ZooKeeperLockObject extends
   }
 
   @Override
+  protected void obtainGlobalReadLock()
+    throws ManifoldCFException, InterruptedException
+  {
+    if (currentConnection != null)
+      throw new IllegalStateException("Already have a connection before read 
locking: "+lockPath);
+    boolean succeeded = false;
+    currentConnection = pool.grab();
+    try
+    {
+      currentConnection.obtainReadLock(lockPath);
+      succeeded = true;
+    }
+    finally
+    {
+      if (!succeeded)
+      {
+        pool.release(currentConnection);
+        currentConnection = null;
+      }
+    }
+  }
+
+  @Override
   protected void clearGlobalReadLockNoWait()
     throws ManifoldCFException, LockException, InterruptedException
   {


Reply via email to