Author: jvermillard
Date: Wed Feb 15 15:37:21 2012
New Revision: 1244543
URL: http://svn.apache.org/viewvc?rev=1244543&view=rev
Log:
DIRMINA-850 idle checker javadoc
Modified:
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IdleChecker.java
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IndexedIdleChecker.java
Modified:
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IdleChecker.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IdleChecker.java?rev=1244543&r1=1244542&r2=1244543&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IdleChecker.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IdleChecker.java
Wed Feb 15 15:37:21 2012
@@ -20,12 +20,33 @@ package org.apache.mina.service.idlechec
import org.apache.mina.session.AbstractIoSession;
+/**
+ * Utility for checking detecting idle sessions.
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
public interface IdleChecker {
+ /**
+ * Inform the IdleCheker a session have a write event
+ * @param session the session with the write event
+ * @param time the data in ms (unix time) of the event
+ */
void sessionWritten(AbstractIoSession session, long time);
+ /**
+ * Inform the IdleCheker a session have a read event
+ * @param session the session with the read event
+ * @param time the data in ms (unix time) of the event
+ */
void sessionRead(AbstractIoSession session, long time);
+ /**
+ * Find idle session, to be called for each select() call.
+ *
+ * @param time current unix time in ms
+ * @return the number of idle event detected
+ */
int processIdleSession(long time);
}
Modified:
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IndexedIdleChecker.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IndexedIdleChecker.java?rev=1244543&r1=1244542&r2=1244543&view=diff
==============================================================================
---
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IndexedIdleChecker.java
(original)
+++
mina/trunk/core/src/main/java/org/apache/mina/service/idlechecker/IndexedIdleChecker.java
Wed Feb 15 15:37:21 2012
@@ -27,6 +27,32 @@ import org.apache.mina.session.Attribute
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * An session idle detector using an index in place of polling every session
every seconds.<br>
+ *
+ * For each session read/write event :<br>
+ * <ul>
+ * <li>we calculate what is the supposed future idle date</li>
+ * <li>we round it at the next second</li>
+ * <li>we store a reference to this session in a circular buffer like :</li>
+ * </ul>
+ * <pre>
+ *
+ * +--- Current time
+ * |
+ * v
+ * +---+---+...+---+---+...+---+
+ * | 0 | 1 | | T |T+1| |599|
+ * +---+---+...+---+---+...+---+
+ * | |
+ * | +--> { S2, S7, S12...} (sessions that will TO in one
second)
+ * +------> { S5, S6, S8...} (sessions that are idle for the
maximum delay of 1 hour )
+ * </pre>
+ *
+ *The maximum idle itme is one hour.
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
public class IndexedIdleChecker implements IdleChecker {
private static int MAX_IDLE_TIME_IN_SEC = 60 * 60; // 1 hour max idle
@@ -68,7 +94,7 @@ public class IndexedIdleChecker implemen
if (idleTimeInMs <= 0L) {
LOG.debug("no read idle configuration");
} else {
- int nextIdleTimeInSeconds = (int) ((timeInMs + idleTimeInMs) /
1000L);
+ int nextIdleTimeInSeconds = (int) ((timeInMs + idleTimeInMs) /
1000L) + 1;
int index = nextIdleTimeInSeconds % MAX_IDLE_TIME_IN_SEC;
if (readIdleSessionIndex[index] == null) {
readIdleSessionIndex[index] = new HashSet<AbstractIoSession>();
@@ -98,7 +124,7 @@ public class IndexedIdleChecker implemen
if (idleTimeInMs <= 0L) {
LOG.debug("no write idle configuration");
} else {
- int nextIdleTimeInSeconds = (int) ((timeInMs + idleTimeInMs) /
1000L);
+ int nextIdleTimeInSeconds = (int) ((timeInMs + idleTimeInMs) /
1000L) + 1;
int index = nextIdleTimeInSeconds % MAX_IDLE_TIME_IN_SEC;
if (writeIdleSessionIndex[index] == null) {
writeIdleSessionIndex[index] = new
HashSet<AbstractIoSession>();