manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r1540056 [2/2] - in /manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core: ./ lockmanager/
Date Fri, 08 Nov 2013 14:44:20 GMT
Copied: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockManager.java
(from r1539618, manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZookeeperLockManager.java)
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockManager.java?p2=manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockManager.java&p1=manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZookeeperLockManager.java&r1=1539618&r2=1540056&rev=1540056&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZookeeperLockManager.java
(original)
+++ manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockManager.java
Fri Nov  8 14:44:19 2013
@@ -29,51 +29,48 @@ import java.io.*;
 
 /** The lock manager manages locks across all threads and JVMs and cluster members, using
Zookeeper.
 * There should be no more than ONE instance of this class per thread!!!  The factory should
enforce this.
-* Note well: This class extends LockManager because zookeeper implementations of some features
(e.g.
-* critical sections) do not need to be overridden.
 */
-public class ZookeeperLockManager extends LockManager implements ILockManager
+public class ZooKeeperLockManager extends BaseLockManager implements ILockManager
 {
   public static final String _rcsid = "@(#)$Id: LockManager.java 988245 2010-08-23 18:39:35Z
kwright $";
 
   protected final static String zookeeperConnectStringParameter = "org.apache.manifoldcf.zookeeper.connectstring";
   protected final static String zookeeperSessionTimeoutParameter = "org.apache.manifoldcf.zookeeper.sessiontimeout";
-  
-  // Zookeeper construction values
-  protected final String connectString;
-  protected final int sessionTimeout;
 
-  // One zookeeper client per thread
-  protected ZooKeeper zookeeper = null;
-  protected ZookeeperWatcher zookeeperWatcher = null;
+  private final static String CONFIGURATION_PATH = "org.apache.manifoldcf.configuration";
+  private final static String RESOURCE_PATH_PREFIX = "org.apache.manifoldcf.resources/";
+  private final static String FLAG_PATH_PREFIX = "org.apache.manifoldcf.flags/";
+    
+  // ZooKeeper connection pool
+  protected static Integer connectionPoolLock = new Integer(0);
+  protected static ZooKeeperConnectionPool pool = null;
+  protected static Integer zookeeperPoolLocker = new Integer(0);
+  protected static LockPool myZooKeeperLocks = null;
 
   /** Constructor */
-  public ZookeeperLockManager()
-    throws ManifoldCFException
-  {
-    connectString = ManifoldCF.getStringProperty(zookeeperConnectStringParameter,null);
-    if (connectString != null)
-      throw new ManifoldCFException("Zookeeper lock manager requires a valid "+zookeeperConnectStringParameter+"
property");
-    sessionTimeout = ManifoldCF.getIntProperty(zookeeperSessionTimeoutParameter,300000);
-  }
-  
-  public ZooKeeper getSession()
+  public ZooKeeperLockManager()
     throws ManifoldCFException
   {
-    if (zookeeper == null)
+    synchronized (connectionPoolLock)
     {
-      try
+      if (pool == null)
       {
-        ZookeeperWatcher zookeeperWatcher = new ZookeeperWatcher();
-        zookeeper = new ZooKeeper(connectString, sessionTimeout, zookeeperWatcher);
-        this.zookeeperWatcher = zookeeperWatcher;
+        // Initialize the ZooKeeper connection pool
+        String connectString = ManifoldCF.getStringProperty(zookeeperConnectStringParameter,null);
+        if (connectString != null)
+          throw new ManifoldCFException("Zookeeper lock manager requires a valid "+zookeeperConnectStringParameter+"
property");
+        int sessionTimeout = ManifoldCF.getIntProperty(zookeeperSessionTimeoutParameter,300000);
+        ManifoldCF.addShutdownHook(new ZooKeeperShutdown());
+        pool = new ZooKeeperConnectionPool(connectString, sessionTimeout);
       }
-      catch (IOException e)
+    }
+    synchronized (zookeeperPoolLocker)
+    {
+      if (myZooKeeperLocks == null)
       {
-        throw new ManifoldCFException("Zookeeper initialization error: "+e.getMessage(),e);
+        myZooKeeperLocks = new LockPool(new ZooKeeperLockObjectFactory(pool));
       }
     }
-    return zookeeper;
   }
   
   /** Get the current shared configuration.  This configuration is available in common among
all nodes,
@@ -85,8 +82,27 @@ public class ZookeeperLockManager extend
   public ManifoldCFConfiguration getSharedConfiguration()
     throws ManifoldCFException
   {
-    // MHL
-    return null;
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        // Read as a byte array, then parse
+        byte[] configurationData = connection.readData(CONFIGURATION_PATH);
+        if (configurationData != null)
+          return new ManifoldCFConfiguration(new ByteArrayInputStream(configurationData));
+        else
+          return new ManifoldCFConfiguration();
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
 
   /** Raise a flag.  Use this method to assert a condition, or send a global signal.  The
flag will be reset when the
@@ -97,7 +113,22 @@ public class ZookeeperLockManager extend
   public void setGlobalFlag(String flagName)
     throws ManifoldCFException
   {
-    // MHL
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        connection.setGlobalFlag(FLAG_PATH_PREFIX + flagName);
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
 
   /** Clear a flag.  Use this method to clear a condition, or retract a global signal.
@@ -107,7 +138,22 @@ public class ZookeeperLockManager extend
   public void clearGlobalFlag(String flagName)
     throws ManifoldCFException
   {
-    // MHL
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        connection.clearGlobalFlag(FLAG_PATH_PREFIX + flagName);
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
   
   /** Check the condition of a specified flag.
@@ -118,8 +164,22 @@ public class ZookeeperLockManager extend
   public boolean checkGlobalFlag(String flagName)
     throws ManifoldCFException
   {
-    // MHL
-    return false;
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        return connection.checkGlobalFlag(FLAG_PATH_PREFIX + flagName);
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
 
   /** Read data from a shared data resource.  Use this method to read any existing data,
or get a null back if there is no such resource.
@@ -131,8 +191,22 @@ public class ZookeeperLockManager extend
   public byte[] readData(String resourceName)
     throws ManifoldCFException
   {
-    // MHL
-    return null;
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        return connection.readData(RESOURCE_PATH_PREFIX + resourceName);
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
   
   /** Write data to a shared data resource.  Use this method to write a body of data into
a shared resource.
@@ -144,270 +218,69 @@ public class ZookeeperLockManager extend
   public void writeData(String resourceName, byte[] data)
     throws ManifoldCFException
   {
-    // MHL
-  }
-
-  /** Enter a write locked code area (i.e., block out both readers and other writers).
-  * Write locks permit only ONE thread to be in the named section, across JVM's
-  * as well.  In order to guarantee this, the current thread may wait until all other
-  * threads have left the section.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterWriteLock(String lockKey)
-    throws ManifoldCFException
-  {
-    // From Zookeeper recipes
-
-    ZooKeeper zk = getSession();
-    
-    /*
-    1. Call create( ) to create a node with pathname "guid-/write-". This is the lock node
-       spoken of later in the protocol. Make sure to set both sequence and ephemeral flags.
-       If a recoverable error occurs calling create() the client should call getChildren()
and
-       check for a node containing the guid used in the path name. This handles the case
-       (noted above) of the create() succeeding on the server but the server crashing before
-       returning the name of the new node.
-    */
-
-    /*
-    2. Call getChildren( ) on the lock node without setting the watch flag - this is important,
-       as it avoids the herd effect.
-    */
-
-    /*
-    3. If there are no children with a lower sequence number than the node created in step
-       1, the client has the lock and the client exits the protocol.
-    */
-
-    /*
-    4. Call exists( ), with watch flag set, on the node with the pathname that has the next
-       lowest sequence number.
-    */
-
-    /* 5. If exists( ) returns false, goto step 2. Otherwise, wait for a notification for
the
-       pathname from the previous step before going to step 2.
-    */
-
-    // MHL
-  }
-
-  /** Enter a write locked code area (i.e., block out both readers and other writers),
-  * but do not wait if the lock cannot be obtained.
-  * Write locks permit only ONE thread to be in the named section, across JVM's
-  * as well.  In order to guarantee this, an exception (LockException) will be
-  * thrown if the lock condition cannot be met immediately.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterWriteLockNoWait(String lockKey)
-    throws ManifoldCFException, LockException
-  {
-    // MHL
-  }
-
-  /** Leave a write locked code area.  Use this method to exit a write-locked section. The
lockKey
-  * parameter must correspond to the key used for the enter method.
-  * @param lockKey is the name of the lock.
-  */
-  @Override
-  public void leaveWriteLock(String lockKey)
-    throws ManifoldCFException
-  {
-    // From Zookeeper recipes
-    
-    /*
-    Delete the node we created in step 1 above.
-    */
-
-    // MHL
-  }
-
-  /** Enter a non-exclusive write-locked area (blocking out all readers, but letting in other
"writers").
-  * This kind of lock is designed to be used in conjunction with read locks.  It is used
typically in
-  * a situation where the read lock represents a query and the non-exclusive write lock represents
a modification
-  * to an individual item that might affect the query, but where multiple modifications do
not individually
-  * interfere with one another (use of another, standard, write lock per item can guarantee
this).
-  * This method works across JVMs, and may wait if the required lock cannot be immediately
obtained.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterNonExWriteLock(String lockKey)
-    throws ManifoldCFException
-  {
-    // MHL
-  }
-
-  /** Enter a non-exclusive write-locked area (blocking out all readers, but letting in other
"writers").
-  * This kind of lock is designed to be used in conjunction with read locks.  It is used
typically in
-  * a situation where the read lock represents a query and the non-exclusive write lock represents
a modification
-  * to an individual item that might affect the query, but where multiple modifications do
not individually
-  * interfere with one another (use of another, standard, write lock per item can guarantee
this).
-  * This method works across JVMs, and will throw LockException if the lock condition cannot
be immediately met.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterNonExWriteLockNoWait(String lockKey)
-    throws ManifoldCFException, LockException
-  {
-    // MHL
-  }
-
-  /** Leave a non-exclusive write locked code area.  Use this method to exit a non-ex-write-locked
section.
-  * The lockKey
-  * parameter must correspond to the key used for the enter method.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void leaveNonExWriteLock(String lockKey)
-    throws ManifoldCFException
-  {
-    // MHL
-  }
-
-  /** Enter a read-only locked area (i.e., block ONLY if there's a writer).  This kind of
lock
-  * permits multiple threads inside the same code area, but only if there is no "writer"
in the
-  * same section at the same time.
-  * This method works across JVMs, and may wait if the required lock cannot be immediately
obtained.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterReadLock(String lockKey)
-    throws ManifoldCFException
-  {
-
-    // From Zookeeper recipes
-    
-    /*
-    1. Call create( ) to create a node with pathname "guid-/read-". This is the lock node
use later in the
-       protocol. Make sure to set both the sequence and ephemeral flags.
-       If a recoverable error occurs calling create() the client should call getChildren()
and
-       check for a node containing the guid used in the path name. This handles the case
-       (noted above) of the create() succeeding on the server but the server crashing before
-       returning the name of the new node.
-    */
-
-    /*
-    2. Call getChildren( ) on the lock node without setting the watch flag - this is important,
as it
-       avoids the herd effect.
-    */
-
-    /*
-    3. If there are no children with a pathname starting with "write-" and having a lower
-       sequence number than the node created in step 1, the client has the lock and can exit
the protocol.
-    */
-
-    /*
-    4. Otherwise, call exists( ), with watch flag, set on the node in lock directory with
pathname
-       staring with "write-" having the next lowest sequence number.
-    */
-
-    /*
-    5. If exists( ) returns false, goto step 2.
-    */
-
-    /*
-    6. Otherwise, wait for a notification for the pathname from the previous step before
going to step 2
-    */
-
-    // MHL
-  }
-
-  /** Enter a read-only locked area (i.e., block ONLY if there's a writer).  This kind of
lock
-  * permits multiple threads inside the same code area, but only if there is no "writer"
in the
-  * same section at the same time.
-  * This method works across JVMs, and will throw LockException if the required lock cannot
be immediately met.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void enterReadLockNoWait(String lockKey)
-    throws ManifoldCFException, LockException
-  {
-    // MHL
-  }
-
-  /** Leave a read-locked code area.  Use this method to exit a read-locked section.  The
lockKey
-  * parameter must correspond to the key used for the enter method.
-  *@param lockKey is the name of the lock.
-  */
-  @Override
-  public void leaveReadLock(String lockKey)
-    throws ManifoldCFException
-  {
-    // From Zookeeper recipes
-    
-    /*
-    Delete the node we created in step 1 above.
-    */
-
-    // MHL
-  }
-
-  /** Enter multiple locks simultaneously.  Use this method if a series or set of locks needs
to be
-  * thrown for an operation to take place.  This operation will avoid deadlock if all the
locks are
-  * thrown at the start of the area using this method.
-  * This method works cross-JVM, and will wait if the required locks are not available.
-  *@param readLocks is an array of read lock names, or null if there are no read locks desired.
-  *@param nonExWriteLocks is an array of non-ex write lock names, or null if none desired.
-  *@param writeLocks is an array of write lock names, or null if there are none desired.
-  */
-  @Override
-  public void enterLocks(String[] readLocks, String[] nonExWriteLocks, String[] writeLocks)
-    throws ManifoldCFException
-  {
-    // MHL
-  }
-
-  /** Enter multiple locks simultaneously.  Use this method if a series or set of locks needs
to be
-  * thrown for an operation to take place.  This operation will avoid deadlock if all the
locks are
-  * thrown at the start of the area using this method.
-  * This method works cross-JVM, and will throw LockException if the required locks are not
available.
-  *@param readLocks is an array of read lock names, or null if there are no read locks desired.
-  *@param nonExWriteLocks is an array of non-ex write lock names, or null if none desired.
-  *@param writeLocks is an array of write lock names, or null if there are none desired.
-  */
-  @Override
-  public void enterLocksNoWait(String[] readLocks, String[] nonExWriteLocks, String[] writeLocks)
-    throws ManifoldCFException, LockException
-  {
-    // MHL
+    try
+    {
+      ZooKeeperConnection connection = pool.grab();
+      try
+      {
+        connection.writeData(RESOURCE_PATH_PREFIX + resourceName, data);
+      }
+      finally
+      {
+        pool.release(connection);
+      }
+    }
+    catch (InterruptedException e)
+    {
+      throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+    }
   }
 
-  /** Leave multiple locks. Use this method to leave a section started with enterLocks()
or
-  * enterLocksNoWait().  The parameters must correspond to those passed to the enter method.
-  *@param readLocks is an array of read lock names, or null if there are no read locks desired.
-  *@param nonExWriteLocks is an array of non-ex write lock names, or null if none desired.
-  *@param writeLocks is an array of write lock names, or null if there are none desired.
+  /** Override this method to change the nature of global locks.
   */
   @Override
-  public void leaveLocks(String[] readLocks, String[] nonExWriteLocks, String[] writeLocks)
-    throws ManifoldCFException
+  protected LockPool getGlobalLockPool()
   {
-    // MHL
+    return myZooKeeperLocks;
   }
 
-  /** Clear all outstanding locks in the system.
-  * This is a very dangerous method to use (obviously)...
+  /** Shutdown the connection pool.
   */
-  @Override
-  public void clearLocks()
+  protected static void shutdownPool()
     throws ManifoldCFException
   {
-    // MHL
+    synchronized (connectionPoolLock)
+    {
+      if (pool != null)
+      {
+        try
+        {
+          pool.closeAll();
+          pool = null;
+        }
+        catch (InterruptedException e)
+        {
+          throw new ManifoldCFException(e.getMessage(),e,ManifoldCFException.INTERRUPTED);
+        }
+      }
+    }
   }
-
-  /** Watcher class for zookeeper, so we get notified about zookeeper events. */
-  protected static class ZookeeperWatcher implements Watcher
+  
+  protected static class ZooKeeperShutdown implements IShutdownHook
   {
-    public ZookeeperWatcher()
+    public ZooKeeperShutdown()
     {
-      // MHL
     }
     
-    public void process(WatchedEvent event)
+    /** Do the requisite cleanup.
+    */
+    @Override
+    public void doCleanup()
+      throws ManifoldCFException
     {
-      // MHL
+      shutdownPool();
     }
 
   }
+  
 }

Added: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java?rev=1540056&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
(added)
+++ manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
Fri Nov  8 14:44:19 2013
@@ -0,0 +1,137 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.manifoldcf.core.lockmanager;
+
+import org.apache.manifoldcf.core.interfaces.*;
+import org.apache.manifoldcf.core.system.ManifoldCF;
+import org.apache.manifoldcf.core.system.Logging;
+import java.io.*;
+
+/** One instance of this object exists for each lock on each JVM!
+* This is the ZooKeeper version of the lock.
+*/
+public class ZooKeeperLockObject extends LockObject
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  private final static String LOCK_PATH_PREFIX = "org.apache.manifoldcf.locks/";
+
+  private final ZooKeeperConnectionPool pool;
+  private final String lockPath;
+  
+  public ZooKeeperLockObject(LockPool lockPool, Object lockKey, ZooKeeperConnectionPool pool)
+  {
+    super(lockPool,lockKey);
+    this.pool = pool;
+    this.lockPath = LOCK_PATH_PREFIX + lockKey.toString();
+  }
+
+  @Override
+  protected void obtainGlobalWriteLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.obtainGlobalWriteLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+  @Override
+  protected void clearGlobalWriteLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.clearGlobalWriteLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+  @Override
+  protected void obtainGlobalNonExWriteLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.obtainGlobalNonExWriteLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+  @Override
+  protected void clearGlobalNonExWriteLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.clearGlobalNonExWriteLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+  @Override
+  protected void obtainGlobalReadLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.obtainGlobalReadLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+  @Override
+  protected void clearGlobalReadLock()
+    throws ManifoldCFException, LockException, InterruptedException
+  {
+    ZooKeeperConnection connection = pool.grab();
+    try
+    {
+      connection.clearGlobalReadLock(lockPath);
+    }
+    finally
+    {
+      pool.release(connection);
+    }
+  }
+
+
+}
+

Propchange: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObject.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java?rev=1540056&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java
(added)
+++ manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java
Fri Nov  8 14:44:19 2013
@@ -0,0 +1,45 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.manifoldcf.core.lockmanager;
+
+import org.apache.manifoldcf.core.interfaces.*;
+import org.apache.manifoldcf.core.system.ManifoldCF;
+import org.apache.manifoldcf.core.system.Logging;
+import java.io.*;
+
+/** Base factory for zookeeper lock objects.
+*/
+public class ZooKeeperLockObjectFactory extends LockObjectFactory
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  protected final ZooKeeperConnectionPool pool;
+  
+  public ZooKeeperLockObjectFactory(ZooKeeperConnectionPool pool)
+  {
+    this.pool = pool;
+  }
+  
+  @Override
+  public LockObject newLockObject(LockPool lockPool, Object lockKey)
+  {
+    return new ZooKeeperLockObject(lockPool, lockKey, pool);
+  }
+}
+

Propchange: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: manifoldcf/branches/CONNECTORS-13/framework/core/src/main/java/org/apache/manifoldcf/core/lockmanager/ZooKeeperLockObjectFactory.java
------------------------------------------------------------------------------
    svn:keywords = Id



Mime
View raw message