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/14 02:09:41 UTC
svn commit: r1550863 - in
/manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler:
ThrottleBin.java Throttler.java
Author: kwright
Date: Sat Dec 14 01:09:40 2013
New Revision: 1550863
URL: http://svn.apache.org/r1550863
Log:
Add runt polling infrastructure that assumes only one cluster member, for debugging
Modified:
manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ThrottleBin.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/throttler/ThrottleBin.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ThrottleBin.java?rev=1550863&r1=1550862&r2=1550863&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ThrottleBin.java (original)
+++ manifoldcf/branches/CONNECTORS-829/framework/core/src/main/java/org/apache/manifoldcf/core/throttler/ThrottleBin.java Sat Dec 14 01:09:40 2013
@@ -81,7 +81,9 @@ public class ThrottleBin
protected long seriesStartTime = -1L;
/** Total actual bytes read in this series; this includes fetches in progress */
protected long totalBytesRead = -1L;
-
+ /** The minimum milliseconds per byte per server */
+ protected double minimumMillisecondsPerBytePerServer = Double.MAX_VALUE;
+
/** Constructor. */
public ThrottleBin(String binName)
{
@@ -94,6 +96,12 @@ public class ThrottleBin
return binName;
}
+ /** Update minimumMillisecondsPerBytePerServer */
+ public void updateMinimumMillisecondsPerBytePerServer(double min)
+ {
+ this.minimumMillisecondsPerBytePerServer = min;
+ }
+
/** Note the start of a fetch operation for a bin. Call this method just before the actual stream access begins.
* May wait until schedule allows.
*/
@@ -129,7 +137,7 @@ public class ThrottleBin
/** Note the start of an individual byte read of a specified size. Call this method just before the
* read request takes place. Performs the necessary delay prior to reading specified number of bytes from the server.
*/
- public void beginRead(int byteCount, double minimumMillisecondsPerBytePerServer)
+ public void beginRead(int byteCount)
throws InterruptedException
{
long currentTime = System.currentTimeMillis();
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=1550863&r1=1550862&r2=1550863&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 Sat Dec 14 01:09:40 2013
@@ -333,6 +333,10 @@ public class Throttler
/** The throttle bins */
protected final Map<String,ThrottleBin> throttleBins = new HashMap<String,ThrottleBin>();
+ // For synchronization, we use several in this class.
+ // Modification to the connectionBins, fetchBins, or throttleBins hashes uses the appropriate local synchronizer.
+ // Changes to other local variables use the main synchronizer.
+
/** Constructor
*/
public ThrottlingGroup(IThreadContext threadContext, String throttlingGroupType, String throttleGroup, IThrottleSpec throttleSpec)
@@ -343,6 +347,8 @@ public class Throttler
// Now, register and activate service anonymously, and record the service name we get.
ILockManager lockManager = LockManagerFactory.make(threadContext);
this.serviceName = lockManager.registerServiceBeginServiceActivity(serviceTypeName, null, null);
+ // Once all that is done, perform the initial setting of all the bin cutoffs
+ poll(threadContext);
}
/** Update the throttle spec.
@@ -361,7 +367,34 @@ public class Throttler
public synchronized void poll(IThreadContext threadContext)
throws ManifoldCFException
{
+ // This is where we reset all the bin targets using ILockManager.
+ // But for now, to get things working, we just do the "stupid" thing,
+ // and presume we're the only actor.
// MHL
+ synchronized (connectionBins)
+ {
+ for (ConnectionBin bin : connectionBins.values())
+ {
+ bin.updateMaxActiveConnections(throttleSpec.getMaxOpenConnections(bin.getBinName()));
+ }
+ }
+
+ synchronized (fetchBins)
+ {
+ for (FetchBin bin : fetchBins.values())
+ {
+ bin.updateMinTimeBetweenFetches(throttleSpec.getMinimumMillisecondsPerFetch(bin.getBinName()));
+ }
+ }
+
+ synchronized (throttleBins)
+ {
+ for (ThrottleBin bin : throttleBins.values())
+ {
+ bin.updateMinimumMillisecondsPerBytePerServer(throttleSpec.getMinimumMillisecondsPerByte(bin.getBinName()));
+ }
+ }
+
}
/** Free unused resources.