tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Rossbach ...@objektpark.de>
Subject Re: It seems that Http11NioProtocol handler not working at mac os x 10.4.8 ppc
Date Mon, 30 Oct 2006 16:14:26 GMT
Oops, as you find a fix, I will test it :-)

regards
Peter


Am 30.10.2006 um 17:05 schrieb Filip Hanik - Dev Lists:

> yeah, that fix is not entirely correct and can lead to problems  
> down the road,
> the problem is bigger than that, I have to catch the socket being  
> closed earlier so that I can unattach the attachment from the key
>
> Filip
>
> Filip Hanik - Dev Lists wrote:
>> how do you reproduce this? I've added in your fix, but cant  
>> reproduce the problem
>>
>> Filip
>>
>> Peter Rossbach wrote:
>>> Hi Filip.
>>>
>>> you see at my situation the key can be null:
>>>
>>> 30.10.2006 16:03:20 org.apache.tomcat.util.net.NioEndpoint$Worker  
>>> run
>>> INFO:  
>>> socket=org.apache.tomcat.util.net.NioChannel@58473e:java.nio.channel 
>>> s.SocketChannel[connected local=/127.0.0.1:8080 remote=/ 
>>> 127.0.0.1:50517] key=sun.nio.ch.SelectionKeyImpl@5138a4
>>> 30.10.2006 16:03:40 org.apache.tomcat.util.net.NioEndpoint$Worker  
>>> run
>>> INFO:  
>>> socket=org.apache.tomcat.util.net.NioChannel@a6343d:java.nio.channel 
>>> s.SocketChannel[closed] key=null
>>>                                                                      
>>>                                                                      
>>>                                                       
>>> #################
>>>
>>> Exception in thread "http-8080-2" java.lang.NullPointerException
>>>         at org.apache.tomcat.util.net.NioEndpoint$Worker.run 
>>> (NioEndpoint.java:1442)
>>>         at java.lang.Thread.run(Thread.java:613)
>>>
>>>
>>> Here my patch:
>>>
>>> === L 1436 f
>>>
>>>                         NioChannel socket = (NioChannel)channel;
>>>
>>>                         SelectionKey key = socket.getIOChannel 
>>> ().keyFor(socket.getPoller().getSelector());
>>>                         int handshake = -1;
>>>                         log.info("socket=" + socket + " key=" +  
>>> key );
>>>                         if(key != null) {
>>>                             try {
>>>                                 handshake = socket.handshake 
>>> (key.isReadable(), key.isWritable());
>>>                             }catch ( IOException x ) {
>>>                                 handshake = -1;
>>>                                 if ( log.isDebugEnabled() )  
>>> log.debug("Error during SSL handshake",x);
>>>                             }catch ( CancelledKeyException ckx ) {
>>>                                 handshake = -1;
>>>                             }
>>>                         } else {
>>>                                handshake = -1;
>>>                         }
>>>
>>>                         if ( handshake == 0 ) {
>>>                             // Process the request from this socket
>>>                             if ((status != null) && (handler.event 
>>> (socket, status) == Handler.SocketState.CLOSED)) {
>>>                                 // Close socket and pool
>>>                                 try {
>>>                                     KeyAttachment att =  
>>> (KeyAttachment)socket.getAttachment(true);
>>>                                     try {socket.close();}catch  
>>> (Exception ignore){}
>>>                                     if ( socket.isOpen() )  
>>> socket.close(true);
>>>                                     nioChannels.offer(socket);
>>>                                     if ( att!=null )  
>>> keyCache.offer(att);
>>>                                 }catch ( Exception x ) {
>>>                                     log.error("",x);
>>>                                 }
>>>                             } else if ((status == null) &&  
>>> (handler.process(socket) == Handler.SocketState.CLOSED)) {
>>>                                 // Close socket and pool
>>>                                 try {
>>>                                     KeyAttachment att =  
>>> (KeyAttachment)socket.getAttachment(true);
>>>                                     try {socket.close();}catch  
>>> (Exception ignore){}
>>>                                     if ( socket.isOpen() )  
>>> socket.close(true);
>>>                                     nioChannels.offer(socket);
>>>                                     if ( att!=null )  
>>> keyCache.offer(att);
>>>                                 }catch ( Exception x ) {
>>>                                     log.error("",x);
>>>                                 }
>>>                             }
>>>                         } else if (handshake == -1 ) {
>>>                             if ( key != null && key.isValid() )  
>>> key.cancel();
>>>                             try {socket.close(true);}catch  
>>> (IOException ignore){}
>>>                             nioChannels.offer(socket);
>>>                         } else {
>>>                             final SelectionKey fk = key;
>>>                             final int intops = handshake;
>>>                             final KeyAttachment ka =  
>>> (KeyAttachment)fk.attachment();
>>>                             ka.getPoller().add(socket,intops);
>>>                         }
>>>                     }
>>>                 } finally {
>>>                     //dereference socket to let GC do its job
>>>                     socket = null;
>>>                     // Finish up this request
>>>                     recycleWorkerThread(this);
>>>                 }
>>>             }
>>>         }
>>>
>>> ====
>>>
>>> But why the chat messages don't responce only as socket close?
>>>
>>>     <Connector port="8080"
>>>                maxThreads="150" connectionTimeout="20000"
>>>                redirectPort="8443"
>>>                protocol="org.apache.coyote.http11.Http11NioProtocol"
>>>                />
>>>
>>> I only see comet begin event?
>>> ==
>>> 30.10.2006 16:19:28 org.apache.catalina.core.ApplicationContext log
>>> INFO: ContextListener: attributeAdded 
>>> ('org.apache.jasper.runtime.JspApplicationC
>>> ontextImpl',  
>>> 'org.apache.jasper.runtime.JspApplicationContextImpl@428ffa')
>>> 30.10.2006 16:19:32 org.apache.catalina.core.ApplicationContext log
>>> INFO: SessionListener: attributeReplaced 
>>> ('C3E6394AC176D22B752C75D55343AA02', 'ni
>>> ckname', 'pero')
>>> 30.10.2006 16:19:35 org.apache.catalina.core.ApplicationContext log
>>> INFO: ChatServlet: Begin for session:  
>>> C3E6394AC176D22B752C75D55343AA02
>>> 30.10.2006 16:25:17 org.apache.catalina.core.ApplicationContext log
>>> INFO: SessionListener: contextDestroyed()
>>> 30.10.2006 16:25:17 org.apache.catalina.core.ApplicationContext log
>>> INFO: ContextListener: contextDestroyed()
>>> 30.10.2006 16:25:22 org.apache.catalina.core.ApplicationContext log
>>> INFO: ContextListener: contextInitialized()
>>> 30.10.2006 16:25:22 org.apache.catalina.core.ApplicationContext log
>>> INFO: SessionListener: contextInitialized()
>>> 30.10.2006 16:25:33 org.apache.catalina.core.ApplicationContext log
>>> INFO: ContextListener: attributeAdded 
>>> ('org.apache.jasper.runtime.JspApplicationC
>>> ontextImpl',  
>>> 'org.apache.jasper.runtime.JspApplicationContextImpl@428ffa')
>>> 30.10.2006 16:25:36 org.apache.catalina.core.ApplicationContext log
>>> INFO: SessionListener: attributeReplaced 
>>> ('C3E6394AC176D22B752C75D55343AA02', 'ni
>>> ckname', 'pero')
>>> 30.10.2006 16:25:40 org.apache.catalina.core.ApplicationContext log
>>> INFO: ChatServlet: Begin for session:  
>>> C3E6394AC176D22B752C75D55343AA02
>>>
>>> ===
>>>
>>> Regards
>>> Peter
>>>
>>>
>>>
>>> Am 30.10.2006 um 15:53 schrieb Peter Rossbach:
>>>
>>>> Hi Filip,
>>>>
>>>> I found that MAC OS X only support setTrafficClass with  
>>>> following JDK option
>>>>
>>>> -Djava.net.preferIPv4Stack=true
>>>>
>>>> http://lists.apple.com/archives/java-dev/2006/Jun/msg00414.html
>>>>
>>>> It seems a older IPV6 bug. At which place we can document those  
>>>> things? -> F&Q
>>>>
>>>>
>>>> The chat example flush the messages only I got NPE:
>>>>
>>>> INFO: Server startup in 2642 ms
>>>> Exception in thread "http-8080-1" java.lang.NullPointerException
>>>>         at org.apache.tomcat.util.net.NioEndpoint$Worker.run 
>>>> (NioEndpoint.java:1441)
>>>>         at java.lang.Thread.run(Thread.java:613)
>>>>
>>>> After this NPE the messages flush to the browser an connection  
>>>> are closed.
>>>>
>>>> Regards
>>>> Peter
>>>>
>>>>
>>>> Am 30.10.2006 um 15:04 schrieb Filip Hanik - Dev Lists:
>>>>
>>>>> try to set the property socket.soTrafficClass to some other value,
>>>>> if it's not working, what JDK are you running, here is the flag  
>>>>> described by SUN
>>>>>
>>>>> http://java.sun.com/j2se/1.5.0/docs/api/java/net/ 
>>>>> Socket.html#setTrafficClass(int)
>>>>>
>>>>>
>>>>>
>>>>> Peter Rossbach wrote:
>>>>>> Hi Filip,
>>>>>>
>>>>>> I am starting testing your new NioProtocol handler, but I got  
>>>>>> following exception:
>>>>>>
>>>>>> 30.10.2006 13:37:24 org.apache.tomcat.util.net.NioEndpoint  
>>>>>> setSocketOptions
>>>>>> SCHWERWIEGEND:
>>>>>> java.net.SocketException: Invalid argument
>>>>>>         at sun.nio.ch.Net.setIntOption0(Native Method)
>>>>>>         at sun.nio.ch.Net.setIntOption(Net.java:152)
>>>>>>         at sun.nio.ch.SocketChannelImpl$1.setInt 
>>>>>> (SocketChannelImpl.java:372)
>>>>>>         at sun.nio.ch.SocketOptsImpl.setInt 
>>>>>> (SocketOptsImpl.java:46)
>>>>>>         at sun.nio.ch.SocketOptsImpl$IP.typeOfService 
>>>>>> (SocketOptsImpl.java:249)
>>>>>>         at sun.nio.ch.OptionAdaptor.setTrafficClass 
>>>>>> (OptionAdaptor.java:158)
>>>>>>         at sun.nio.ch.SocketAdaptor.setTrafficClass 
>>>>>> (SocketAdaptor.java:320)
>>>>>>         at  
>>>>>> org.apache.tomcat.util.net.SocketProperties.setProperties 
>>>>>> (SocketProperties.java:107)
>>>>>>         at  
>>>>>> org.apache.tomcat.util.net.NioEndpoint.setSocketOptions 
>>>>>> (NioEndpoint.java:742)
>>>>>>         at org.apache.tomcat.util.net.NioEndpoint$Worker.run 
>>>>>> (NioEndpoint.java:1423)
>>>>>>         at java.lang.Thread.run(Thread.java:613)
>>>>>>
>>>>>>
>>>>>> ==
>>>>>>
>>>>>> My connector config is:
>>>>>>
>>>>>>     <Connector port="8080"
>>>>>>                maxThreads="150" connectionTimeout="20000"
>>>>>>                redirectPort="8443"
>>>>>>                 
>>>>>> protocol="org.apache.coyote.http11.Http11NioProtocol" />
>>>>>>
>>>>>> After some google search I found that soTrafficClass are not  
>>>>>> supported at mac os x :-(
>>>>>> s. http://jira.safehaus.org/browse/PENROSE-71
>>>>>>
>>>>>> I comment out  L 106 at class o.a.t.util.net.SocketProperties.
>>>>>>
>>>>>> //        socket.setTrafficClass(soTrafficClass);
>>>>>>
>>>>>> Before I did this: I check starting connector with some  
>>>>>> different values without success
>>>>>>
>>>>>> ex.
>>>>>>     <Connector port="8080"
>>>>>>                maxThreads="150" connectionTimeout="20000"
>>>>>>                redirectPort="8443"
>>>>>>                 
>>>>>> protocol="org.apache.coyote.http11.Http11NioProtocol"
>>>>>>         socket.soTrafficClass="2" />
>>>>>>
>>>>>> After that patch the Connector work, but with the comet style  
>>>>>> chat example I have more trouble:
>>>>>>
>>>>>> INFO: Server startup in 3025 ms
>>>>>> Exception in thread "http-8080-1" java.lang.NullPointerException
>>>>>>         at org.apache.tomcat.util.net.NioEndpoint$Worker.run 
>>>>>> (NioEndpoint.java:1441)
>>>>>>         at java.lang.Thread.run(Thread.java:613)
>>>>>> Exception in thread "http-8080-2" java.lang.NullPointerException
>>>>>>         at org.apache.tomcat.util.net.NioEndpoint$Worker.run 
>>>>>> (NioEndpoint.java:1441)
>>>>>>         at java.lang.Thread.run(Thread.java:613)
>>>>>>
>>>>>> --Chat example really working? I see the posted messages only  
>>>>>> after socket is closed (with Firefox 1.5)...
>>>>>>
>>>>>> Next I test the chat example with APR handler, again.
>>>>>>
>>>>>> Regards
>>>>>> Peter Ro├čbach
>>>>>> pr@objektpark.de
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----------------------------------------------------------------

>>>>>> -------
>>>>>>
>>>>>> No virus found in this incoming message.
>>>>>> Checked by AVG Free Edition.
>>>>>> Version: 7.1.408 / Virus Database: 268.13.17/505 - Release  
>>>>>> Date: 10/27/2006
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------ 
>>>>> ---
>>>>> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
>>>>> For additional commands, e-mail: dev-help@tomcat.apache.org
>>>>>
>>>>>
>>>>
>>>
>>>
>>> -------------------------------------------------------------------- 
>>> ----
>>>
>>> No virus found in this incoming message.
>>> Checked by AVG Free Edition.
>>> Version: 7.1.408 / Virus Database: 268.13.17/505 - Release Date:  
>>> 10/27/2006
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: dev-help@tomcat.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message