You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/12/12 03:18:04 UTC

svn commit: r1550331 - in /manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core: system/ManifoldCF.java throttler/ConnectionThrottler.java throttler/Throttler.java

Author: kwright
Date: Thu Dec 12 02:18:04 2013
New Revision: 1550331

URL: http://svn.apache.org/r1550331
Log:
Hook up connection throttler to shutdown hook.

Modified:
    manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java
    manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ConnectionThrottler.java
    manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/Throttler.java

Modified: manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java?rev=1550331&r1=1550330&r2=1550331&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java (original)
+++ manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/system/ManifoldCF.java Thu Dec 12 02:18:04 2013
@@ -253,6 +253,8 @@ public class ManifoldCF
           masterDatabaseUsername = LockManagerFactory.getStringProperty(threadContext,masterDatabaseUsernameProperty,"manifoldcf");
           masterDatabasePassword = LockManagerFactory.getStringProperty(threadContext,masterDatabasePasswordProperty,"local_pg_passwd");
 
+          // Register the throttler for cleanup on shutdown
+          addShutdownHook(new ThrottlerShutdown());
           // Register the file tracker for cleanup on shutdown
           tracker = new FileTrack();
           addShutdownHook(tracker);
@@ -1383,6 +1385,38 @@ public class ManifoldCF
 
   }
 
+  /** Class that cleans up throttler on exit */
+  protected static class ThrottlerShutdown implements IShutdownHook
+  {
+    public ThrottlerShutdown()
+    {
+    }
+    
+    @Override
+    public void doCleanup(IThreadContext threadContext)
+      throws ManifoldCFException
+    {
+      IConnectionThrottler connectionThrottler = ConnectionThrottlerFactory.make(threadContext);
+      connectionThrottler.destroy();
+    }
+    
+    /** Finalizer, which is designed to catch class unloading that tomcat 5.5 does.
+    */
+    protected void finalize()
+      throws Throwable
+    {
+      try
+      {
+        doCleanup(ThreadContextFactory.make());
+      }
+      finally
+      {
+        super.finalize();
+      }
+    }
+
+  }
+  
   /** Class that cleans up database handles on exit */
   protected static class DatabaseShutdown implements IShutdownHook
   {

Modified: manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ConnectionThrottler.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ConnectionThrottler.java?rev=1550331&r1=1550330&r2=1550331&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ConnectionThrottler.java (original)
+++ manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ConnectionThrottler.java Thu Dec 12 02:18:04 2013
@@ -48,6 +48,7 @@ public class ConnectionThrottler impleme
   *@param binNames is the set of bin names to throttle for, within the throttle group.
   *@param currentTime is the current time, in ms. since epoch.
   */
+  @Override
   public void obtainConnectionPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime)
     throws ManifoldCFException
@@ -62,6 +63,7 @@ public class ConnectionThrottler impleme
   *@param throttleSpec is the throttle specification to use for the throttle group,
   *@param currentTime is the current time, in ms. since epoch.
   */
+  @Override
   public void releaseConnectionPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime)
     throws ManifoldCFException
@@ -79,6 +81,7 @@ public class ConnectionThrottler impleme
   *@param binNames is the set of bin names describing this documemnt.
   *@param currentTime is the current time, in ms. since epoch.
   */
+  @Override
   public void obtainFetchDocumentPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime)
     throws ManifoldCFException
@@ -95,6 +98,7 @@ public class ConnectionThrottler impleme
   *@param binNames is the set of bin names describing this documemnt.
   *@param currentTime is the current time, in ms. since epoch.
   */
+  @Override
   public void releaseFetchDocumentPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime)
     throws ManifoldCFException
@@ -110,6 +114,7 @@ public class ConnectionThrottler impleme
   *@param currentTime is the current time, in ms. since epoch.
   *@param byteCount is the number of bytes to get permissions to read.
   */
+  @Override
   public void obtainReadPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime, int byteCount)
     throws ManifoldCFException
@@ -127,6 +132,7 @@ public class ConnectionThrottler impleme
   *@param origByteCount is the originally requested number of bytes to get permissions to read.
   *@param actualByteCount is the number of bytes actually read.
   */
+  @Override
   public void releaseReadPermission(String throttleGroup,
     IThrottleSpec throttleSpec, String[] binNames, long currentTime, int origByteCount, int actualByteCount)
     throws ManifoldCFException
@@ -137,6 +143,7 @@ public class ConnectionThrottler impleme
 
   /** Poll periodically.
   */
+  @Override
   public void poll()
     throws ManifoldCFException
   {
@@ -145,6 +152,7 @@ public class ConnectionThrottler impleme
   
   /** Free unused resources.
   */
+  @Override
   public void freeUnusedResources()
     throws ManifoldCFException
   {
@@ -153,6 +161,7 @@ public class ConnectionThrottler impleme
   
   /** Shut down throttler permanently.
   */
+  @Override
   public void destroy()
     throws ManifoldCFException
   {

Modified: manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/Throttler.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/Throttler.java?rev=1550331&r1=1550330&r2=1550331&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/Throttler.java (original)
+++ manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/Throttler.java Thu Dec 12 02:18:04 2013
@@ -41,6 +41,15 @@ public class Throttler
   {
   }
   
+  /** Check if throttle group name is still valid.
+  * This can be overridden, but right now nobody does it.
+  */
+  protected boolean isThrottleGroupValid(IThreadContext threadContext, String throttleGroupName)
+    throws ManifoldCFException
+  {
+    return true;
+  }
+  
   /** Get permission to use a connection, which is described by the passed array of bin names.
   * The connection can be used multiple
   * times until the releaseConnectionPermission() method is called.
@@ -141,7 +150,23 @@ public class Throttler
   public void poll(IThreadContext threadContext)
     throws ManifoldCFException
   {
-    // MHL
+    // Go through the whole pool and notify everyone
+    synchronized (poolHash)
+    {
+      Iterator<String> iter = poolHash.keySet().iterator();
+      while (iter.hasNext())
+      {
+        String throttleGroup = iter.next();
+        Pool p = poolHash.get(throttleGroup);
+        if (isThrottleGroupValid(threadContext,throttleGroup))
+          p.poll(threadContext);
+        else
+        {
+          p.destroy(threadContext);
+          iter.remove();
+        }
+      }
+    }
   }
   
   /** Free unused resources.
@@ -161,7 +186,7 @@ public class Throttler
     }
   }
   
-  /** Shut down throttler permanently.
+  /** Shut down all throttlers and deregister them.
   */
   public void destroy(IThreadContext threadContext)
     throws ManifoldCFException