Author: fhanik
Date: Mon Mar 12 13:37:22 2007
New Revision: 517384
URL: http://svn.apache.org/viewvc?view=rev&rev=517384
Log:
Added in the skeleton for fairness logic, currently the tests for fairness are
coming out extremely fair, could it be that the Selector.selectedKeys() sorts
the keys properly?
Anyway, to implement a scheduler, I can use the "fairness" numbers added in
here. Won't do it until I deem it necessary.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=517384&r1=517383&r2=517384
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Mon
Mar 12 13:37:22 2007
@@ -47,6 +47,7 @@
import org.apache.tomcat.util.res.StringManager;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.CountDownLatch;
+import java.util.Comparator;
/**
* NIO tailored thread pool, providing the following services:
@@ -1385,7 +1386,8 @@
}//for
}
}
-
+
+// ----------------------------------------------------- Key Attachment Class
public static class KeyAttachment {
public KeyAttachment() {
@@ -1400,6 +1402,7 @@
timeout = -1;
error = false;
fairness = 0;
+ lastRegistered = 0;
}
public void reset() {
@@ -1435,6 +1438,9 @@
public int getFairness() { return fairness; }
public void setFairness(int f) { fairness = f;}
public void incFairness() { fairness++; }
+ public long getLastRegistered() { return lastRegistered; };
+ public void setLastRegistered(long reg) { lastRegistered = reg; }
+
protected Object mutex = new Object();
protected long lastAccess = -1;
protected boolean currentAccess = false;
@@ -1444,6 +1450,28 @@
protected NioChannel channel = null;
protected CountDownLatch latch = null;
protected int fairness = 0;
+ protected long lastRegistered = 0;
+ }
+// ----------------------------------------------------- Key Fairness
Comparator
+ public static class KeyFairnessComparator implements
Comparator<KeyAttachment> {
+ public int compare(KeyAttachment ka1, KeyAttachment ka2) {
+ long lr1 = ka1.getLastRegistered();
+ long lr2 = ka2.getLastRegistered();
+ int f1 = ka1.getFairness();
+ int f2 = ka2.getFairness();
+ if ( f1 == f2 ) {
+ if ( lr1 == lr2 ) return 0;
+ //earlier objects have priorioty
+ else return lr1<lr2?-1:1;
+ } else {
+ //higher fairness means earlier in the queue
+ //as fairness count means how many times the poller has
skipped
+ //this socket, and the socket has been ready, there just
hasn't
+ //been any worker thread available to handle it
+ return ka1.getFairness()>ka2.getFairness()?-1:1;
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]