- From: <noah_mendelsohn@us.ibm.com>
- Date: Fri, 3 Feb 2006 09:28:56 -0500
- To: Anish Karmarkar <Anish.Karmarkar@oracle.com>
- Cc: David Orchard <dorchard@bea.com>, Marc Hadley <Marc.Hadley@Sun.COM>, Rich Salz <rsalz@datapower.com>, xml-dist-app@w3.org
Anish Karamarkar writes: > For that matter, it is also possible to do R-R over FAF. Well, I've tried to make the case several times that this is not entirely true, depending on the reliability and delivery semantics you want. What I mean is, you don't get req/resp out of merely sending one message in each direction. The problem is that the Request and the Response are not symmetric, and that r/r usually implies reliability insofar as you are waiting for the response and thus doing low level retries. HTTP over TCP winds up sending quite a few one way packets at the low level. Furthermore, Req/Resp usually relies on the underlying transport to keep a session open and to address the response. UDP, for example, doesn't do this unless you rebuild quite a bit of the equivalent of TCP on top of it. -------------------------------------- Noah Mendelsohn IBM Corporation One Rogers Street Cambridge, MA 02142 1-617-693-4036 -------------------------------------- Anish Karmarkar <Anish.Karmarkar@oracle.com> 02/01/2006 02:05 AM To: Marc Hadley <Marc.Hadley@Sun.COM> cc: noah_mendelsohn@us.ibm.com, David Orchard <dorchard@bea.com>, Rich Salz <rsalz@datapower.com>, xml-dist-app@w3.org Subject: Re: The deep difference between request/response and fire-and-forget arc Hadley wrote: > On Jan 12, 2006, at 8:55 PM, noah_mendelsohn@us.ibm.com wrote: > >> >> My preferred approach is: if we have a true one way MEP, then it's not >> supported on HTTP. Thus there's no tricky choice to be made in >> WSDL. The >> mapping of in-only to HTTP is request/response with no envelope coming >> back. The WSDL-determined code around the binding should in fact ensure >> that a 202 rather than a 200 has been received, or else we've got a >> signal >> that the server didn't believe it was in-only after all. My (current) >> view is that the one way MEP should be used on protocols like UDP >> that are >> inherently fire-n-forget. It might also be a good match to certain >> JMS-like queuing protocols. >> > I have to confess that this thread has me quite puzzled and I really > don't understand the assertion that you can't support a fire-and- forget > MEP on a request-response based protocol. Even "one-way" APIs like JMS > can generate error conditions, e.g. javax.jms.Queue.send (Message) can > throw an exception when something goes wrong as can > java.net.DatagramSocket.send(DatagramPacket). It seems to me that > there's little difference to the user between one of these methods > throwing an exception and getting. e.g., a HTTP 4xx or 5xx status code. > If you want to do fire and forget then just ignore any returned status > code and/or exceptions. > I agree. For that matter, it is also possible to do R-R over FAF. I seems like I'm in another 'sync apis over inherently async transport vs. async apis over inherently sync transport' discussion. It is clear that one can do either. Having said that, I do agree with Noah that we need a true FAF MEP (as opposed to SOAP-req-optional-soap-response MEP) for protocols like UDP. -Anish -- > Marc. > > >>> TCP/HTTP support my "entire response is optional" proposal and >> >> effectively Fire-N-forget. >> >> I'm not convinced. Rich and I have agreed that the reason it doesn't >> work >> isn't quite the one I said in my note last night, but I still believe >> that >> HTTP is a request/response protocol, and that it's always good practice >> for the receiver of an inbound HTTP request to respond with a status >> code >> (I.e. a response) as opposed to just closing the connection. Any HTTP >> experts want to disagree with me on that? >> >> Noah >> >> -------------------------------------- >> Noah Mendelsohn >> IBM Corporation >> One Rogers Street >> Cambridge, MA 02142 >> 1-617-693-4036 >> -------------------------------------- >> >> >> >> >> >> >> >> >> "David Orchard" <dorchard@bea.com> >> 01/12/06 07:11 PM >> >> To: <noah_mendelsohn@us.ibm.com>, "Rich Salz" >> <rsalz@datapower.com> >> cc: <xml-dist-app@w3.org> >> Subject: RE: The deep difference between request/ response >> and fire-and-forget >> >> >> I feel yet another "leaky abstraction" emerging. >> >> IIUC, TCP/HTTP support my "entire response is optional" proposal and >> effectively Fire-N-forget. I'm really against generalizing away from >> this awfully common case. >> >> Let's do the thought experiment. If we have an MEP for >> request-optionalresponseenvelope and an MEP for fire-N-forget, then >> somebody will have to say which one they want for a wsdl one-way. In >> the case of HTTP, they will have to choose between them. I guess that >> request-optionalresponseenvelope is the default for in-only in wsdl 1.1 >> and wsdl 2.0. I would also expect that the HTTP Binding for the MEPs >> will be very similar. They will both put the request property on the >> wire and then the FAF mep would be implemented by transitioning from >> sending state to the Success state, whereas the r-ore mep would >> transition to the sending+receiving state. >> >> This difference, the specification that the client will or will not wait >> for a response is the major difference between the two meps. And the >> reason to have them is so that the sending node can "know" that it >> doesn't have to wait. >> >> Is that right? >> >> If that's roughly right, I'll then observe that the choice of the SOAP >> MEP is dependent upon the binding. For a wsdl in-only, the binding >> might only support faf. In the case of HTTP that supports both MEPs, >> the designer will be deeply aware of the connection mgmt issues - just >> as we are talking about it. So now we have the knowledge of the binding >> affecting which soap mep is used to implement the wsdl in-only. A leaky >> abstraction imo. >> >> Further, let's look at the 2 scenarios where the sender and receiver >> "disagree" about which MEP is in use. In both cases, the receiver does >> not intend to respond with an envelope. >> >> Scenario #1: Sender thinks faf, receiver thinks r-ore. Sender closes >> connection after send. All good. Receiver gets message then socket is >> closed before it can respond. It might get confused about whether to >> move into the Success or Fail state, but seems that the Success state >> for a one-way is the logical place to go. >> >> Scenario #2: Sender thinks r-ore, receiver thinks faf. Sender waits for >> response. Receiver closes connection after receiving request and moves >> into the success state. Sender notices that connection has closed. >> Sender has choice of moving into the Success or Fail state, but it seems >> that the Success state for one-way is the logical place to go. >> >> If you believe that that the Success state is the right place for a >> sender and a receiver to goto after a connection close for a one-way, >> then there's no need to differentiate between faf and r-ore. >> >> After this little bit of analysis, it seems that the only reason to have >> the 2 different MEPs is specify what a connection close after send >> means, specifically what the next state is. For faf, connection close >> after send means Success. For r-ore that is different than faf, >> connection close after send would mean Fail. >> >> However, I think that we can hit the 80/20 by providing a r-ore mep and >> specifying that connection close after send results in Success. >> >> Cheers, >> Dave >> >>> -----Original Message----- >>> From: xml-dist-app-request@w3.org [mailto:xml-dist-app- request@w3.org] >> >> On >> >>> Behalf Of noah_mendelsohn@us.ibm.com >>> Sent: Thursday, January 12, 2006 3:12 PM >>> To: Rich Salz >>> Cc: xml-dist-app@w3.org >>> Subject: Re: The deep difference between request/response and >> >> fire-and- >> >>> forget >>> >>> >>> Rich Salz writes: >>> >>>>> A subtle problem occurs if you try to implement true FAF on a >> >> req/resp >> >>>>> protocol like HTTP. Repeating the sender code from above: >>>>> >>>>> s = socket.new(destinationURI); >>>>> s.send(Message); >>>>> // note that client does not wait here >>>>> s.close(); >>>>> >>>>> Depending on the local implementation, I don't think the >>>> >>>> above obligates >>>> >>>>> the messaging system to even send the message. >>>> >>>> >>>> I think it does. It depends on semantics of the API, but I am not >>>> aware of any "socket" library that allows a close() to bypass the >>>> normal TCP close mechanism, which requires that all bytes in-transit >>>> have been received. Not providing this guarantee (proper TCP >>>> connection shutdown) would mean that every TCP-application would >>>> have to build its own exit protocol on top of the TCP streams. >>> >>> >>> Thanks, I think you're right in the specific case of TCP and HTTP. I >>> actually realized it this morning and then saw your note. In some >> >> sense, >> >>> this traces to the fact that the TCP streams are reliable and happen >> >> to >> >>> each have a sort of Fire-N-Forget semantic, not just at the API level, >> >> but >> >>> also at the packet level. The packets that close the connection are, >> >> I >> >>> believe, ordered with respect to those that send the final data. Even >> >> if >> >>> they are delivered in the wrong order, I expect that the data is in >>> general reliably transmitted, unless the network partitions or retries >>> fail. >>> >>> Having acknowledged that, I should note that the above pseudo-code was >> >> not >> >>> intended to be HTTP/TCP specific, but rather a model for the API that >> >> you >> >>> typically use with Req/Resp. As you say, what actually happens >> >> depends on >> >>> the semantics of the API (and, I think, the protocol it's driving). I >>> believe that a Req/Resp MEP is best designed to work with a broad >> >> range of >> >>> underlying protocols, and I think it's easy to imagine the design of a >>> lightweight req/resp transport that responds to a close by immediately >>> suspending further attempts to deliver. >>> >>> Bottom line: I acknowledge that I was wrong about TCP, but I continue >> >> to >> >>> suggest that it would be imprudent to make the entire response >> >> optional in >> >>> you req/resp MEP. I remain OK with our current plan to make the >> >> response >> >>> envelope optional. Do I have the facts right now? I think so. >> >> Thanks. >> >>> >>> -------------------------------------- >>> Noah Mendelsohn >>> IBM Corporation >>> One Rogers Street >>> Cambridge, MA 02142 >>> 1-617-693-4036 >>> -------------------------------------- >>> >>> >>> >>> >> >> >> >> > > --- > Marc Hadley <marc.hadley at sun.com> > Business Alliances, CTO Office, Sun Microsystems. > >
Received on Friday, 3 February 2006 14:29:11 UTC