Mantis - Resin
Viewing Issue Advanced Details
4822 minor always 10-24-11 16:10 06-15-12 14:05
alex  
ferg  
normal  
closed 4.0.23  
fixed  
none    
none 4.0.29  
0004822: java.lang.IllegalStateException: COMET_SUSPEND_KA TcpSocketLink[id=http://*:8081-17,http://*:8081,COMET_SUSPEND_KA]
rep by Elliot Barlas
[11-10-24 15:37:33.059] {http://*:8081-17} [^] TcpSocketLink[id=http://*:8081-17,http://*:8081,COMET_SUSPEND_KA] [^] start thread http://*:8081-17 [^] (count=17, idle=0)
[11-10-24 15:37:33.059] {http://*:8081-6} [^] TcpSocketLink[id=http://*:8081-6,http://*:8081,CLOSED] [^] finish thread: http://*:8081-6 [^]
[11-10-24 15:37:33.060] {http://*:8081-17} [^] TcpSocketLink[id=http://*:8081-17,http://*:8081,COMET_SUSPEND_KA] [^] destroying connection
[11-10-24 15:37:33.060] {http://*:8081-2} [^] TcpSocketLink[id=2,default] closing connection TcpSocketLink[id=http://*:8081-2,http://*:8081,CLOSED], [^] total=27
[11-10-24 15:37:33.060] {http://*:8081-17} [^] java.lang.IllegalStateException: COMET_SUSPEND_KA TcpSocketLink[id=http://*:8081-17,http://*:8081,COMET_SUSPEND_KA] [^]
                                                at com.caucho.network.listen.SocketLinkState$9.toClosed(SocketLinkState.java:347)
                                                at com.caucho.network.listen.TcpSocketLink.closeConnection(TcpSocketLink.java:1531)
                                                at com.caucho.network.listen.TcpSocketLink.destroy(TcpSocketLink.java:765)
                                                at com.caucho.network.listen.TcpSocketLink.handleDestroyTask(TcpSocketLink.java:947)
                                                at com.caucho.network.listen.DestroyTask.doTask(DestroyTask.java:55)
                                                at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:97)
                                                at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:80)
                                                at com.caucho.env.thread.ResinThread.runTasks(ResinThread.java:164)
                                                at com.caucho.env.thread.ResinThread.run(ResinThread.java:130)
 jvm-default.log.10sockets [^] (194,883 bytes) 10-24-11 16:10

Notes
(0005578)
alex   
10-24-11 16:11   
Servlet:

package qa;
import java.io.*;

import java.util.concurrent.*;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;

@WebServlet(asyncSupported = true, urlPatterns = "/async*")
    public class TestServlet extends HttpServlet {

        private ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(5);

 @Override
     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     final AsyncContext context = request.startAsync();

     Runnable runnable = new Runnable() {
             public void run() {
                 ((HttpServletResponse)context.getResponse()).setStatus(202);
                 context.complete();
             }
         };

     scheduler.schedule(runnable, 5, TimeUnit.SECONDS);
 }

    }
(0005579)
alex   
10-24-11 16:11   
client:

import java.io.*;
import java.net.*;

public class X {
    public static void main(String[] args) throws Exception {
        Socket[] sockets = new Socket[10];
        for(int i=0; i<sockets.length; i++) {
            sockets[i] = new Socket("debosx", 8080);
        }

        int n=1;
        while(true) {
            for(int i=0; i<sockets.length; i++) {
                String request = "GET /async-1.0.0-SNAPSHOT HTTP/1.1\r\nHost: localhost\r\nAccept: */*\r\n\r\n";
                sockets[i].getOutputStream().write(request.getBytes());
                sockets[i].getOutputStream().flush();
                System.out.println("sent request on socket " + (i+1));
            }

            for(int i=0; i<sockets.length; i++) {
                byte[] input = new byte[2048];
                long time = System.currentTimeMillis();
                int read = sockets[i].getInputStream().read(input);
                long duration = System.currentTimeMillis() - time;
                System.out.println("received " + read + " bytes in response on socket " + (i+1) + ", read time = " + duration);
            }

            System.out.println("finished iteration " + (n++) + ", sleeping...");
            Thread.sleep(1000);
        }
    }
}
(0005858)
ferg   
06-15-12 14:05   
server/1le0