You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@mina.apache.org by Julien Vermillard <jv...@archean.fr> on 2009/08/17 10:57:47 UTC

Re: Serial exceptions --- MINA DEVELOPER FYI

Hi,
Look like we can add some lock in the port discovery/opening code.
I'll check if RXTX is supposed to be thread safe on this portion.
for the port in use problem, I never seen it. On what kind of operating
system you are trying ?
Julien
 
Le Tue, 28 Jul 2009 11:08:25 -0400,
boB Gage <bg...@merge.com> a écrit :

> Ah ha!!   :-)  I appreciate the feedback!
> 
> Thanks!!
> 
> Emmanuel Lecharny wrote:
> >
> > Hi,
> >
> > I see you are posting mails here, may be expecting some help from
> > the only guy who knows hwat's inside this part of the code : he is 
> > enjoying 3 weeks off in China atm...
> >
> > Just to give you some feedback :)
> >
> > boB Gage wrote:
> >> Found a work-around for my immediate issue, but it speaks of a
> >> much deeper problem in the Mina and/or rxtx layers.
> >>
> >> I have added a static lock around my chunk of code that calls the 
> >> IoConnector.connect() method.    I have locked code lazily, so the 
> >> critical code includes the bulk of my open() method; this consists
> >> of building the IoConnector, configuring it, calling connect(),
> >> and waiting on the ConnectFuture returned (if not null).     It
> >> may be that a much tighter lock is all that is needed -- that is
> >> beyond the scope of my work-around.
> >>
> >> With no two ports attempting an open operation concurrently, the 
> >> symptoms (Exceptions and loss of the serial port) have stopped.
> >> I have two tests going on (different pieces of hardware), and both
> >> have passed 12 hours now without showing any problems.
> >>
> >> Apparently that maybe-collision the logs were hinting at was a
> >> real collision (though I misnamed IoSession.open() as the culprit)
> >> -- whether it's Mina or rxtx is beyond my knowledge.   But
> >> apparently two threads attempting to open different serial ports
> >> at the same time *can* cause fatal problems.   [ It's very timing
> >> based; I've seen runs go 6 hours before failing; seen others fail
> >> in under 10 minutes. ]
> >>
> >> A repeating (ie unrecoverable) SerialPortUnavailableException is
> >> the one consistent symptom.   I cannot explain why early tests got
> >> a single PortInUseException first, nor why later tests got a 
> >> recoverable SerialPortUnavailableException before complete failure
> >> -- but the RejectedExecutionExceptions were definitely unrelated
> >> red herrings.
> >>
> >> It seems likely this is a serial-specific issue, as I have run
> >> many similar tests using socket connections without seeing this
> >> behaviour.
> >>
> >> Thanks again for all the help!!
> >> boB
> >>
> >> PS.  Opps, keep forgetting to say:   Mina 2.0.0-M6,   RxTx 2.1.7 r2
> >>
> >>
> >>
> >> boB Gage wrote:
> >>> Have made some more progress on this issue. The 
> >>> RejectedExecutionException's were my fault and have been 
> >>> eliminated.   [ Executor handling periodic requests was getting
> >>> shut down and re-started, rather than destroyed and recreated. ]
> >>>
> >>> I still, however, have the case where after some un-constant
> >>> number of successful serial port open/timeout/close cycles I
> >>> start seeing SerialPortUnavailableExceptions.
> >>>
> >>> With my newest code I'm seeing a new pattern (twice in two runs):
> >>>   * A number of successful open/timeout/close cycles on the port
> >>>   * A single SerialPortUnavailableException
> >>>   * Several more successful open/timeout/close cycles on the port
> >>>   * A series of SerialPortUnavailableExceptions, one for every 
> >>> connection attempt until the program is stopped and restarted.
> >>>
> >>> Two pieces of new behavior here.    1) I've never before seen the 
> >>> port go unavailable and come back again (the first single
> >>> exception). 2) I'm no longer seeing a PortInUseException at the
> >>> edge of the port going unavailable.
> >>>
> >>> Some more factoids that may or may not help:
> >>>   * With one serial port, this problem is very rare (I've seen
> >>> runs over 24 hours).  With each additional serial port, the
> >>> occurrence rate goes up.
> >>>   * Logs make it look like the problem *MIGHT* be a collision 
> >>> between two IoSession.open() calls happening concurrently
> >>> (different ports, of course).   Could there be something
> >>> non-thread safe in Mina's serial layer and/or the rxtx library
> >>> it's using??
> >>>   * The message text of the SerialPortUnavailableExceptions reads 
> >>> "Serial port not found"
> >>>
> >>> Thanks in advance,
> >>> boB Gage
> >>>
> >>>
> >>>
> >>> boB Gage wrote:
> >>>> I'm seeing three different exceptions on the serial ports and am 
> >>>> unsure what they exactly mean.
> >>>>
> >>>> Can anyone provide details as to *why* each of these may be
> >>>> throw:
> >>>>   * PortInUseException
> >>>>   * SerialPortUnavailableException
> >>>>   * RejectedExecutionException
> >>>>
> >>>> I have seen each of the preceding exceptions while trying to
> >>>> open a serial port.    The first two make the open fail, the
> >>>> third does not (though the open operation has not completely
> >>>> succeeded either -- no data flows on the port.)
> >>>>
> >>>> There are two specific cases that I have seen, both while 
> >>>> attempting to connect to a device that's temporarily unavailable 
> >>>> (ie powered off):
> >>>>
> >>>>   1) My program opens the port, times out, closes it, waits, and 
> >>>> tries again (proper behavior).    This cycle continues fine for 
> >>>> awhile (time varies) then a single PortInUseException is
> >>>> thrown. On the next, and every following, attempt a 
> >>>> SerialPortUnavailableException is thrown.    The 
> >>>> SerialPortUnavailableException continues until my program is
> >>>> shut down and restarted -- then it immediately can open the port
> >>>> again.
> >>>>
> >>>>   2) Same situation, same timeout cycles, but for some reason a 
> >>>> RejectedExecutionException is thrown.   The "open" still returns 
> >>>> true, but no data flows on the port.   Eventually the attempt
> >>>> times out.   One the next, and every following, attempt the 
> >>>> RejectedExecutionException is thrown and the behavior does not
> >>>> change.
> >>>>
> >>>> In both cases, turning on the far end device after the first 
> >>>> exception has no affect.    The port, once failed stays that 
> >>>> way.    Stopping and restarting our program has immediately
> >>>> cleared up the issue each and every time.    Unfortunately,
> >>>> stopping & restarting our problem is not a viable solution.
> >>>>
> >>>> I have seen timing changes have some effect.   With a 5-second 
> >>>> delay between connection attempts only 27 attempts succeeded
> >>>> (timed out) over a period of about 8 minutes before throwing the 
> >>>> PortInUseException.    Changing that delay to 20 seconds, over
> >>>> 220 attempts were made over a period of 6+ hours before the
> >>>> exception was thrown.
> >>>>
> >>>> Any clues???????
> >>>>
> >>>> Thanks in advance!!!
> >>>>
> >>>
> >>
> >>
> >
> >
> 

Re: Serial exceptions --- MINA DEVELOPER FYI

Posted by boB Gage <bg...@merge.com>.
The app I'm developing is for both Linux and windows platforms.    This 
behavior was tracked and fixed on a Linux box.

boB


Julien Vermillard wrote:
> Hi,
> Look like we can add some lock in the port discovery/opening code.
> I'll check if RXTX is supposed to be thread safe on this portion.
> for the port in use problem, I never seen it. On what kind of operating
> system you are trying ?
> Julien
>  
> Le Tue, 28 Jul 2009 11:08:25 -0400,
> boB Gage <bg...@merge.com> a écrit :
>
>   
>> Ah ha!!   :-)  I appreciate the feedback!
>>
>> Thanks!!
>>
>> Emmanuel Lecharny wrote:
>>     
>>> Hi,
>>>
>>> I see you are posting mails here, may be expecting some help from
>>> the only guy who knows hwat's inside this part of the code : he is 
>>> enjoying 3 weeks off in China atm...
>>>
>>> Just to give you some feedback :)
>>>
>>> boB Gage wrote:
>>>       
>>>> Found a work-around for my immediate issue, but it speaks of a
>>>> much deeper problem in the Mina and/or rxtx layers.
>>>>
>>>> I have added a static lock around my chunk of code that calls the 
>>>> IoConnector.connect() method.    I have locked code lazily, so the 
>>>> critical code includes the bulk of my open() method; this consists
>>>> of building the IoConnector, configuring it, calling connect(),
>>>> and waiting on the ConnectFuture returned (if not null).     It
>>>> may be that a much tighter lock is all that is needed -- that is
>>>> beyond the scope of my work-around.
>>>>
>>>> With no two ports attempting an open operation concurrently, the 
>>>> symptoms (Exceptions and loss of the serial port) have stopped.
>>>> I have two tests going on (different pieces of hardware), and both
>>>> have passed 12 hours now without showing any problems.
>>>>
>>>> Apparently that maybe-collision the logs were hinting at was a
>>>> real collision (though I misnamed IoSession.open() as the culprit)
>>>> -- whether it's Mina or rxtx is beyond my knowledge.   But
>>>> apparently two threads attempting to open different serial ports
>>>> at the same time *can* cause fatal problems.   [ It's very timing
>>>> based; I've seen runs go 6 hours before failing; seen others fail
>>>> in under 10 minutes. ]
>>>>
>>>> A repeating (ie unrecoverable) SerialPortUnavailableException is
>>>> the one consistent symptom.   I cannot explain why early tests got
>>>> a single PortInUseException first, nor why later tests got a 
>>>> recoverable SerialPortUnavailableException before complete failure
>>>> -- but the RejectedExecutionExceptions were definitely unrelated
>>>> red herrings.
>>>>
>>>> It seems likely this is a serial-specific issue, as I have run
>>>> many similar tests using socket connections without seeing this
>>>> behaviour.
>>>>
>>>> Thanks again for all the help!!
>>>> boB
>>>>
>>>> PS.  Opps, keep forgetting to say:   Mina 2.0.0-M6,   RxTx 2.1.7 r2
>>>>
>>>>
>>>>
>>>> boB Gage wrote:
>>>>         
>>>>> Have made some more progress on this issue. The 
>>>>> RejectedExecutionException's were my fault and have been 
>>>>> eliminated.   [ Executor handling periodic requests was getting
>>>>> shut down and re-started, rather than destroyed and recreated. ]
>>>>>
>>>>> I still, however, have the case where after some un-constant
>>>>> number of successful serial port open/timeout/close cycles I
>>>>> start seeing SerialPortUnavailableExceptions.
>>>>>
>>>>> With my newest code I'm seeing a new pattern (twice in two runs):
>>>>>   * A number of successful open/timeout/close cycles on the port
>>>>>   * A single SerialPortUnavailableException
>>>>>   * Several more successful open/timeout/close cycles on the port
>>>>>   * A series of SerialPortUnavailableExceptions, one for every 
>>>>> connection attempt until the program is stopped and restarted.
>>>>>
>>>>> Two pieces of new behavior here.    1) I've never before seen the 
>>>>> port go unavailable and come back again (the first single
>>>>> exception). 2) I'm no longer seeing a PortInUseException at the
>>>>> edge of the port going unavailable.
>>>>>
>>>>> Some more factoids that may or may not help:
>>>>>   * With one serial port, this problem is very rare (I've seen
>>>>> runs over 24 hours).  With each additional serial port, the
>>>>> occurrence rate goes up.
>>>>>   * Logs make it look like the problem *MIGHT* be a collision 
>>>>> between two IoSession.open() calls happening concurrently
>>>>> (different ports, of course).   Could there be something
>>>>> non-thread safe in Mina's serial layer and/or the rxtx library
>>>>> it's using??
>>>>>   * The message text of the SerialPortUnavailableExceptions reads 
>>>>> "Serial port not found"
>>>>>
>>>>> Thanks in advance,
>>>>> boB Gage
>>>>>
>>>>>
>>>>>
>>>>> boB Gage wrote:
>>>>>           
>>>>>> I'm seeing three different exceptions on the serial ports and am 
>>>>>> unsure what they exactly mean.
>>>>>>
>>>>>> Can anyone provide details as to *why* each of these may be
>>>>>> throw:
>>>>>>   * PortInUseException
>>>>>>   * SerialPortUnavailableException
>>>>>>   * RejectedExecutionException
>>>>>>
>>>>>> I have seen each of the preceding exceptions while trying to
>>>>>> open a serial port.    The first two make the open fail, the
>>>>>> third does not (though the open operation has not completely
>>>>>> succeeded either -- no data flows on the port.)
>>>>>>
>>>>>> There are two specific cases that I have seen, both while 
>>>>>> attempting to connect to a device that's temporarily unavailable 
>>>>>> (ie powered off):
>>>>>>
>>>>>>   1) My program opens the port, times out, closes it, waits, and 
>>>>>> tries again (proper behavior).    This cycle continues fine for 
>>>>>> awhile (time varies) then a single PortInUseException is
>>>>>> thrown. On the next, and every following, attempt a 
>>>>>> SerialPortUnavailableException is thrown.    The 
>>>>>> SerialPortUnavailableException continues until my program is
>>>>>> shut down and restarted -- then it immediately can open the port
>>>>>> again.
>>>>>>
>>>>>>   2) Same situation, same timeout cycles, but for some reason a 
>>>>>> RejectedExecutionException is thrown.   The "open" still returns 
>>>>>> true, but no data flows on the port.   Eventually the attempt
>>>>>> times out.   One the next, and every following, attempt the 
>>>>>> RejectedExecutionException is thrown and the behavior does not
>>>>>> change.
>>>>>>
>>>>>> In both cases, turning on the far end device after the first 
>>>>>> exception has no affect.    The port, once failed stays that 
>>>>>> way.    Stopping and restarting our program has immediately
>>>>>> cleared up the issue each and every time.    Unfortunately,
>>>>>> stopping & restarting our problem is not a viable solution.
>>>>>>
>>>>>> I have seen timing changes have some effect.   With a 5-second 
>>>>>> delay between connection attempts only 27 attempts succeeded
>>>>>> (timed out) over a period of about 8 minutes before throwing the 
>>>>>> PortInUseException.    Changing that delay to 20 seconds, over
>>>>>> 220 attempts were made over a period of 6+ hours before the
>>>>>> exception was thrown.
>>>>>>
>>>>>> Any clues???????
>>>>>>
>>>>>> Thanks in advance!!!
>>>>>>
>>>>>>             
>>>>         
>>>