You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "silver9886 (JIRA)" <ji...@apache.org> on 2017/08/02 13:15:00 UTC
[jira] [Comment Edited] (HTTPCORE-480) improve the code in check
timeout
[ https://issues.apache.org/jira/browse/HTTPCORE-480?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16110833#comment-16110833 ]
silver9886 edited comment on HTTPCORE-480 at 8/2/17 1:14 PM:
-------------------------------------------------------------
the new idea is this(i update the attach .java file) :
add a protected class MinHoldTime default value is 0.
if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval + minholdTime.get()) {
if (keys != null) {
for (final SelectionKey key : keys) {
timeoutCheck(key, currentTime,minholdTime);
}
}
}
in the timeoutCheck,we can get the min sockettimeout is all sessions and change the minholdTime.get() return value.
protected void timeoutCheck(final SelectionKey key, final long now, final MinHoldTime minHoldTime) {
final IOSessionImpl session = (IOSessionImpl) key.attachment();
if (session != null) {
final int timeout = session.getSocketTimeout();
if (minHoldTime.get() == 0 || minHoldTime.get() > timeout ) {
minHoldTime.set(timeout);
}
if (timeout > 0) {
if (session.getLastAccessTime() + timeout < now) {
sessionTimedOut(session);
}
}
}
}
was (Author: silver9886):
when return from readyCount = this.selector.select(this.selectTimeout); the time has elapsed (this.selectTimeout default is 1s).
when the code execute the code if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval) the time is elapsed larger than (this.selectTimeout default is 1s).
beacuse the pc need the time to execute the code between readyCount = this.selector.select(this.selectTimeout); and if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval)
so currentTime - this.lastTimeoutCheck >= this.timeoutCheckInterval will always return true(because timeoutCheckInterval=selectTimeout ).
I think if there is no post/get request , the currentTime - this.lastTimeoutCheck should no be true.
suppose the time executed elapsed between
readyCount = this.selector.select(this.selectTimeout); and if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval)
at last need 1 millisecond.
the new idea is this(i update the attach .java file) :
add a protected class MinHoldTime default value is 1 (means at last 1 millisecond).
if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval + minholdTime.get()) {
if (keys != null) {
for (final SelectionKey key : keys) {
timeoutCheck(key, currentTime,minholdTime);
}
}
}
in the timeoutCheck,we can get the min sockettimeout is all sessions and change the minholdTime.get() return value.
protected void timeoutCheck(final SelectionKey key, final long now, final MinHoldTime minHoldTime) {
final IOSessionImpl session = (IOSessionImpl) key.attachment();
if (session != null) {
final int timeout = session.getSocketTimeout();
if (minHoldTime.get() == 1 || minHoldTime.get() > timeout ) {
minHoldTime.set(timeout);
}
if (timeout > 0) {
if (session.getLastAccessTime() + timeout < now) {
sessionTimedOut(session);
}
}
}
}
> improve the code in check timeout
> ---------------------------------
>
> Key: HTTPCORE-480
> URL: https://issues.apache.org/jira/browse/HTTPCORE-480
> Project: HttpComponents HttpCore
> Issue Type: Improvement
> Components: HttpCore NIO
> Affects Versions: 4.4.6
> Reporter: silver9886
> Priority: Minor
> Fix For: 4.4.7
>
> Attachments: AbstractIOReactor.java, BaseIOReactor.java
>
>
> change the code in org.apache.http.impl.nio.reactor.BaseIOReactor:
> if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval) ->
> if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval + 2)
> because :the code will run for a time and network tranport expend the time too. So currentTime - this.lastTimeoutCheck should be
> larger than selectTimeout in order to check timeout. In this case , This will make the code more efficiency.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org