ws-rx-implement message
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]
Subject: Re: [ws-rx-implement] deadlock situation
- From: Doug Davis <dug@us.ibm.com>
- To: ws-rx-implement@lists.oasis-open.org
- Date: Fri, 24 Mar 2006 11:59:44 -0500
I don't think you can assume that the
RMD can send back SeqAcks before its done blocking either. One option
is that if the RMS is really worried about this situation it could set
the wsa:FaultTo and wsa:ReplyTo to WSA's "none" - but this is
only if it really wants (and knows) its a true fire-n-forgot model.
-Doug
Chamikara Jayalath <chamikara@wso2.com>
03/24/2006 08:32 AM
Please respond to
chamikara |
|
To
| ws-rx-implement@lists.oasis-open.org
|
cc
|
|
Subject
| Re: [ws-rx-implement] deadlock
situation |
|
Hi Doug,
Hmm, does this solve the actual problem. Suppose there are five threads.
Four for sending application messages and one for sending sequence acks.
The First message get lost. And the four threads which operate on application
messages send the messages 2,3,4 and 5 and since get blocked by the RMD.
After some time RMS send a sequence ack with which it can know that the
above messages got delivered. Now should the RMS timeout the blocking threads.
If that is done the RMD will never be able to deliver the possible fault,
for which it was blocking all these threads.
All these scenarios occur only if FaultTo is anonymous. So I believe this
is something that should be seperately taken into consideration just like
the anonymous ReplyTo scenario. One method may be to RECOMMEND the RMD
to send the sequenceAcks without waiting for any application level faults
which could have been easily delivered if faultTo was not anonymous.
Chamikara
Even if we go for the
Doug Davis wrote:
In the interop, if I'm remembering correctly, you only had one thread running
on the RMS side and that
was part of the problem as well. It doesn't seem entirely correct
for the RMS to assume that all connections
between the RMS and RMD will immediate be closed. As you stated,
the problem can occur with any
number of threads if the number is less than the number of messages being
sent. However, in general
I would think that its a bad idea for the RMS to use up its entire thread/connection
pool on connections
that could block. Shouldn't it reserve some of them for less problematic
operations like SeqAcks?
-Doug
Hi All,
As it was observerd in the interop a deadlock situation could occur in
a
situation where the RMD tries to do in-order delivering and and the RMS
sends the messages out of order. Even though it was stated that this can
be omitted by asking the RMS to send the messages in-order, this does
not seem to be a general solution.
The RMS may send the first message first. But suppose this does not get
delivered to the RMD. Now should the RMS re-send the first message or
should it send the second message. If the RMD does not implement the
in-order delivering the second case would work fine. But if RMD does
implement in-order delivering this would result in a deadlock. It seems
like we cannot take a desicion wothout knowing the implementation
details of RMD.
Increasing the number of threads in the RMS also does not solve the
problem since we could develop a scenario that include more number of
messages which would result in the same situation.
It seems like we need a more precise solution for this. Comments ?
Chamikara
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]