MINA
  1. MINA
  2. DIRMINA-200

IBM iSeries throws unexpected SocketException

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: 0.9.3, 0.9.4
    • Fix Version/s: 0.9.5
    • Component/s: None
    • Labels:
      None
    • Environment:
      mina-0.9.3 JDK 1.4.2 IBM iSeries OS/400 V5R2

      Description

      Proposal of a change to nio SocketSessionImpl.

      I'd like the calls to:

      getTrafficClass
      setTrafficClass
      setSendBufferSize
      setReceiveBufferSize

      to not throw RuntimeIOException when a SocketException is caught.

      My reasoning is based on the Socket class javadoc:

      E.g. setTrafficClass

      "As the underlying network implementation may ignore this value applications should consider it a hint."

      and

      "Setting bits in the precedence field may result in a SocketException indicating that the operation is not permitted."

      The other getter/setter method javadoc also refer to 'hints' and a 'if there is an error obtaining' condition.

      Some operating systems (OS/400 in my case ), do not allow the trafficClass value to be read or written. I think this may also be the case as reported here on Linux:

      http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4709474

      By ignoring the SocketException thrown by these methods (perhaps issuing a log4j WARN instead? Or hooking up with an appropriate monitor?), socket sessions can be established without error on an IBM iSeries.

      Example stack trace:

      2006-04-03 17:26:26,343 WARN [org.apache.mina.common.support.DefaultExceptionMonitor](SocketAcceptor-0) Unexpected exception.
      org.apache.mina.common.RuntimeIOException: java.net.SocketException
      at java.lang.Throwable.<init>(Throwable.java:240)
      at java.lang.Exception.<init>(Exception.java:77)
      at java.lang.RuntimeException.<init>(RuntimeException.java:77)
      at org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48)
      at org.apache.mina.transport.socket.nio.support.SocketSessionImpl$SocketSessionConfigImpl.setTrafficClass(SocketSessionImpl.java:342)
      at org.apache.mina.transport.socket.nio.support.SocketSessionImpl.<init>(SocketSessionImpl.java:71)
      at org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.processSessions(SocketAcceptorDelegate.java:379)
      at org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run(SocketAcceptorDelegate.java:326)
      Caused by: java.net.SocketException
      at java.lang.Throwable.<init>(Throwable.java:180)
      at java.lang.Exception.<init>(Exception.java:29)
      at java.io.IOException.<init>(IOException.java:28)
      at java.net.SocketException.<init>(SocketException.java:35)
      at sun.nio.ch.Net.setIntOption(Net.java:156)
      at sun.nio.ch.SocketChannelImpl$1.setInt(SocketChannelImpl.java:398)
      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)
      ... 4 more

      I have attached a proposed patch and welcome any comments.

      SimonT

      1. mina-ex.patch
        2 kB
        Simon Temple

        Activity

        Hide
        Simon Temple added a comment -

        This is an example patch I have used to fix the nio socket connection problem on IBM iSeries

        Show
        Simon Temple added a comment - This is an example patch I have used to fix the nio socket connection problem on IBM iSeries
        Hide
        Trustin Lee added a comment -

        I think we could just return false for setter methods instead of logging.

        Is it fine for us to patch these four methods only?

        Show
        Trustin Lee added a comment - I think we could just return false for setter methods instead of logging. Is it fine for us to patch these four methods only?
        Hide
        Simon Temple added a comment -

        We're using MINA via DS RC1. If returning false does not cause the socket connection to be rejected then your suggestion is fine.

        I think the 'four methods' may occur in other classes: DatagramSessionImpl.java, for example.

        It may be best to grep the whole source tree for occurences...?

        Show
        Simon Temple added a comment - We're using MINA via DS RC1. If returning false does not cause the socket connection to be rejected then your suggestion is fine. I think the 'four methods' may occur in other classes: DatagramSessionImpl.java, for example. It may be best to grep the whole source tree for occurences...?
        Hide
        Trustin Lee added a comment -

        I checked in the fix to the trunk and deployed 0.9.4-SNAPSHOT. Please let me know if it fixes this issue.

        Show
        Trustin Lee added a comment - I checked in the fix to the trunk and deployed 0.9.4-SNAPSHOT. Please let me know if it fixes this issue.
        Hide
        Simon Temple added a comment -

        Sorry for the delay Trustin...

        We just upgraded our production systems to 0.9.4 release and noticed the patch was not included.

        I realise it is my fault for not getting back to you... sorry.

        Could you patch the current trunk so we can work towards a fix in your next release?

        Thanks

        SimonT

        Show
        Simon Temple added a comment - Sorry for the delay Trustin... We just upgraded our production systems to 0.9.4 release and noticed the patch was not included. I realise it is my fault for not getting back to you... sorry. Could you patch the current trunk so we can work towards a fix in your next release? Thanks SimonT
        Hide
        Trustin Lee added a comment -

        Well, I fixed this issue AFAIK though I didn't apply your patch directly. Here's the change I've made:

        http://svn.apache.org/viewvc?view=rev&revision=394852

        Did you try to run with 0.9.4? If it didn't work, please try with the trunk. It should work fine. Otherwise, please reopen this issue.

        Show
        Trustin Lee added a comment - Well, I fixed this issue AFAIK though I didn't apply your patch directly. Here's the change I've made: http://svn.apache.org/viewvc?view=rev&revision=394852 Did you try to run with 0.9.4? If it didn't work, please try with the trunk. It should work fine. Otherwise, please reopen this issue.
        Hide
        Simon Temple added a comment -

        We are running 0.9.4 (Release)

        It looks like:

        SocketSessionConfigImpl.isGetTrafficClassAvailable() is returning true...but...

        2006-06-20 09:44:59,315 WARN [org.apache.mina.common.support.DefaultExceptionMonitor](SocketAcceptor-0) Unexpected exception.
        org.apache.mina.common.RuntimeIOException: java.net.SocketException
        at java.lang.Throwable.<init>(Throwable.java:240)
        at java.lang.Exception.<init>(Exception.java:77)
        at java.lang.RuntimeException.<init>(RuntimeException.java:77)Sock
        at org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48)
        at org.apache.mina.transport.socket.nio.SocketSessionImpl$SessionConfigImpl.getTrafficClass(SocketSessionImpl.java:348)
        at org.apache.mina.transport.socket.nio.SocketSessionImpl.<init>(SocketSessionImpl.java:96)
        at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.processSessions(SocketAcceptor.java:435)
        at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.run(SocketAcceptor.java:362)
        Caused by: java.net.SocketException
        at java.lang.Throwable.<init>(Throwable.java:180)
        at java.lang.Exception.<init>(Exception.java:29)
        at java.io.IOException.<init>(IOException.java:28)
        at java.net.SocketException.<init>(SocketException.java:35)
        at sun.nio.ch.Net.getIntOption(Net.java:145)
        at sun.nio.ch.SocketChannelImpl$1.getInt(SocketChannelImpl.java:393)
        at sun.nio.ch.SocketOptsImpl.getInt(SocketOptsImpl.java:42)
        at sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:245)
        at sun.nio.ch.OptionAdaptor.getTrafficClass(OptionAdaptor.java:166)
        at sun.nio.ch.SocketAdaptor.getTrafficClass(etAdaptor.java:325)
        at org.apache.mina.transport.socket.nio.SocketSessionImpl$SessionConfigImpl.getTrafficClass(SocketSessionImpl.java:344)
        ... 3 more

        Show
        Simon Temple added a comment - We are running 0.9.4 (Release) It looks like: SocketSessionConfigImpl.isGetTrafficClassAvailable() is returning true...but... 2006-06-20 09:44:59,315 WARN [org.apache.mina.common.support.DefaultExceptionMonitor] (SocketAcceptor-0) Unexpected exception. org.apache.mina.common.RuntimeIOException: java.net.SocketException at java.lang.Throwable.<init>(Throwable.java:240) at java.lang.Exception.<init>(Exception.java:77) at java.lang.RuntimeException.<init>(RuntimeException.java:77)Sock at org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48) at org.apache.mina.transport.socket.nio.SocketSessionImpl$SessionConfigImpl.getTrafficClass(SocketSessionImpl.java:348) at org.apache.mina.transport.socket.nio.SocketSessionImpl.<init>(SocketSessionImpl.java:96) at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.processSessions(SocketAcceptor.java:435) at org.apache.mina.transport.socket.nio.SocketAcceptor$Worker.run(SocketAcceptor.java:362) Caused by: java.net.SocketException at java.lang.Throwable.<init>(Throwable.java:180) at java.lang.Exception.<init>(Exception.java:29) at java.io.IOException.<init>(IOException.java:28) at java.net.SocketException.<init>(SocketException.java:35) at sun.nio.ch.Net.getIntOption(Net.java:145) at sun.nio.ch.SocketChannelImpl$1.getInt(SocketChannelImpl.java:393) at sun.nio.ch.SocketOptsImpl.getInt(SocketOptsImpl.java:42) at sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:245) at sun.nio.ch.OptionAdaptor.getTrafficClass(OptionAdaptor.java:166) at sun.nio.ch.SocketAdaptor.getTrafficClass(etAdaptor.java:325) at org.apache.mina.transport.socket.nio.SocketSessionImpl$SessionConfigImpl.getTrafficClass(SocketSessionImpl.java:344) ... 3 more
        Hide
        Trustin Lee added a comment -

        It seems like my fix didn't work because getTrafficClass() doesn't always throw an exception. It would be nice if I have a machine which can reproduce this issue.

        Show
        Trustin Lee added a comment - It seems like my fix didn't work because getTrafficClass() doesn't always throw an exception. It would be nice if I have a machine which can reproduce this issue.
        Hide
        Trustin Lee added a comment -

        I checked in the candidate for fixing this issue. Simon, could you try again with the trunk?

        Show
        Trustin Lee added a comment - I checked in the candidate for fixing this issue. Simon, could you try again with the trunk?
        Hide
        Simon Temple added a comment -

        Sorry I can't deploy and test a trunk build without rebuilding all other DS related JARs (due to refactoring changes since V1RC3)

        I tried patching a couple of files in 0.9.3 but classes have moved between:

        org\apache\mina\transport\socket\nio\support
        and
        org\apache\mina\transport\socket\nio

        the class SocketConnectorDelegate.java also looks like its gone and...

        Bottom line is I'm struggling with the trunk patch. Can you supply a patch for 0.9.4 or 0.9.3?

        Thanks

        Show
        Simon Temple added a comment - Sorry I can't deploy and test a trunk build without rebuilding all other DS related JARs (due to refactoring changes since V1RC3) I tried patching a couple of files in 0.9.3 but classes have moved between: org\apache\mina\transport\socket\nio\support and org\apache\mina\transport\socket\nio the class SocketConnectorDelegate.java also looks like its gone and... Bottom line is I'm struggling with the trunk patch. Can you supply a patch for 0.9.4 or 0.9.3? Thanks
        Hide
        Trustin Lee added a comment -

        SocketAcceptor/ConnectorDelegate has been replaced with SocketAcceptor/Connector in 0.9.5. Unfortunately, you'll have to patch it manually for now though the next RC of ApacheDS will use MINA 0.9.5 or above.

        The following URL shows all changes made for this issue:

        http://issues.apache.org/jira/browse/DIRMINA-200?page=com.atlassian.jira.plugin.ext.subversion:subversion-commits-tabpanel

        Show
        Trustin Lee added a comment - SocketAcceptor/ConnectorDelegate has been replaced with SocketAcceptor/Connector in 0.9.5. Unfortunately, you'll have to patch it manually for now though the next RC of ApacheDS will use MINA 0.9.5 or above. The following URL shows all changes made for this issue: http://issues.apache.org/jira/browse/DIRMINA-200?page=com.atlassian.jira.plugin.ext.subversion:subversion-commits-tabpanel
        Hide
        Trustin Lee added a comment -

        And other missing files in socket.nio.support package should exist in socket.nio package. Please lt me any other missing files.

        Show
        Trustin Lee added a comment - And other missing files in socket.nio.support package should exist in socket.nio package. Please lt me any other missing files.
        Hide
        Trustin Lee added a comment -

        (X) Please lt me any other missing files.
        (O) Please let me know any other missing files.

        Sorry for flooding comments!

        Show
        Trustin Lee added a comment - (X) Please lt me any other missing files. (O) Please let me know any other missing files. Sorry for flooding comments!
        Hide
        Trustin Lee added a comment -

        There has been no feed back since my last fix. I will mark this issue as resolved for now and reopen it when someone reports the problem again.

        Show
        Trustin Lee added a comment - There has been no feed back since my last fix. I will mark this issue as resolved for now and reopen it when someone reports the problem again.
        Hide
        Simon Temple added a comment -

        Sorry I took so long!

        I've just test DS 1.0 and MINA 1.0.0 and the bug is fixed.

        Many Thanks

        SimonT

        22 June 2006 02:06
        To: simon.temple@saaconsultants.com
        cc:
        From: "Trustin Lee (JIRA)" <jira@apache.org>
        Subject: [jira] Commented: (DIRMINA-200) IBM iSeries throws unexpected
        SocketException

        [
        http://issues.apache.org/jira/browse/DIRMINA-200?page=comments#action_12417223
        ]

        Trustin Lee commented on DIRMINA-200:
        -------------------------------------

        SocketAcceptor/ConnectorDelegate has been replaced with
        SocketAcceptor/Connector in 0.9.5. Unfortunately, you'll have to patch it
        manually for now though the next RC of ApacheDS will use MINA 0.9.5 or
        above.

        The following URL shows all changes made for this issue:

        http://issues.apache.org/jira/browse/DIRMINA-200?page=com.atlassian.jira.plugin.ext.subversion:subversion-commits-tabpanel

        applications should consider it a hint."
        indicating that the operation is not permitted."
        there is an error obtaining' condition.
        trafficClass value to be read or written. I think this may also be the
        case as reported here on Linux:
        a log4j WARN instead? Or hooking up with an appropriate monitor?), socket
        sessions can be established without error on an IBM iSeries.
        [org.apache.mina.common.support.DefaultExceptionMonitor](SocketAcceptor-0)
        Unexpected exception.
        org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48)
        org.apache.mina.transport.socket.nio.support.SocketSessionImpl$SocketSessionConfigImpl.setTrafficClass(SocketSessionImpl.java:342)
        org.apache.mina.transport.socket.nio.support.SocketSessionImpl.<init>(SocketSessionImpl.java:71)
        org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.processSessions(SocketAcceptorDelegate.java:379)
        org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run(SocketAcceptorDelegate.java:326)
        sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:249)

        This message is automatically generated by JIRA.
        -
        If you think it was sent incorrectly contact one of the administrators:
        http://issues.apache.org/jira/secure/Administrators.jspa
        -
        For more information on JIRA, see:
        http://www.atlassian.com/software/jira

        Show
        Simon Temple added a comment - Sorry I took so long! I've just test DS 1.0 and MINA 1.0.0 and the bug is fixed. Many Thanks SimonT 22 June 2006 02:06 To: simon.temple@saaconsultants.com cc: From: "Trustin Lee (JIRA)" <jira@apache.org> Subject: [jira] Commented: ( DIRMINA-200 ) IBM iSeries throws unexpected SocketException [ http://issues.apache.org/jira/browse/DIRMINA-200?page=comments#action_12417223 ] Trustin Lee commented on DIRMINA-200 : ------------------------------------- SocketAcceptor/ConnectorDelegate has been replaced with SocketAcceptor/Connector in 0.9.5. Unfortunately, you'll have to patch it manually for now though the next RC of ApacheDS will use MINA 0.9.5 or above. The following URL shows all changes made for this issue: http://issues.apache.org/jira/browse/DIRMINA-200?page=com.atlassian.jira.plugin.ext.subversion:subversion-commits-tabpanel applications should consider it a hint." indicating that the operation is not permitted." there is an error obtaining' condition. trafficClass value to be read or written. I think this may also be the case as reported here on Linux: a log4j WARN instead? Or hooking up with an appropriate monitor?), socket sessions can be established without error on an IBM iSeries. [org.apache.mina.common.support.DefaultExceptionMonitor] (SocketAcceptor-0) Unexpected exception. org.apache.mina.common.RuntimeIOException.<init>(RuntimeIOException.java:48) org.apache.mina.transport.socket.nio.support.SocketSessionImpl$SocketSessionConfigImpl.setTrafficClass(SocketSessionImpl.java:342) org.apache.mina.transport.socket.nio.support.SocketSessionImpl.<init>(SocketSessionImpl.java:71) org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.processSessions(SocketAcceptorDelegate.java:379) org.apache.mina.transport.socket.nio.support.SocketAcceptorDelegate$Worker.run(SocketAcceptorDelegate.java:326) sun.nio.ch.SocketOptsImpl$IP.typeOfService(SocketOptsImpl.java:249) – This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira

          People

          • Assignee:
            Trustin Lee
            Reporter:
            Simon Temple
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development