OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

business-transaction message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Subject: Re: Managers, addressses and the like


Comments on your mark-up comments that haven't already been dealt with in other mails. The issue of the Manager and coordinator-specific addressing is very important for us to sort out. It's useful to consider your alternative approach to the one contained in the current draft that Peter put together after Boston.

Agreed, and as I'll try to indicate below, although I believe the factory approach is more suited to web services, I don't believe at this stage it's cut-and-dry either way. Therefore, what I'd like to see is a protocol that can allow for both.
 
To save space I'll delete those things I don't have a problem with or don't think there's anything more to add.

I might as well state a preference for "cancel" over "undo" here. CANCEL is the message put into the draft protocol set after discussion with Mark, among others, but of course any label will ultimately do, so we should just vote it up and down.

Actually I prefer cancel too.

Agreed, and once again I don’t think we are arguing against this. The point of difference is really whether or not a composer can call participants directly.

Or an initiator. I think that the composer can stimulate the flow of prepare messages, and that this is natural, not objectionable. In fact, to generalize things a bit, much of this discussion is about whether an application element (initiator or service), or a composer, should be able to "prepare" a participant without going through the coordinator (tell the participant that work has finished, and it's a good time to vote). Without mandating sub-coordination it's extremely difficult to accomplish. What we have to enforce is that the coordinator ensures that votes are gathered from all enrolled participants. "Early", "out of band" preparation is not dangerous, it just causes work to stop on some participants.

I'll leave this, as I think previous emails have pretty much done-this-to-death, and we seem to be in agreement that an application specific impetus ca stimulate an early prepare message being sent by the BTP participant.

I think your confusion has arise from a misinterpretation of “interface”.

No, it flowed from the fact that you had a begin with no actor to send it to.

No, there was an actor: it was a coordinator manager/factory service. I think it should be possible for us to have a protocol where there is a logical coordinator actor, that may be implemented by a separate service per coordinator, or a single service for lots of coordinators. As I've indicated before, I think the former is more in line with current web service thinking (coarse-grained components), and the latter is definitely a CORBA/J2EE object model.

The interface was described as the "coordinator interface", which implies messages sent to and from the coordinator. But you cannot send BEGIN to a non-existent coordinator. And in all other discussions (and in the draft terminology) I believe we have used Coordinator to mean the entity that manages coordination for a single atomic BT, not a Coordinator Manager or factory or the like.

See above.

This is an implied implementation in the email I sent: there is nothing to prevent the atom id from having the same address as the service that generated it.

Well, I'm not sure that's the best approach. If that is true then we have to introduce the atom id into every message sent to a "Coordinator", so that the receiver can work out which atom it's doing work for. If we have a unique address per coordinator then we only need the atom id in the context.

However, as I said, we don't believe this is the most valid model for web services. But in order to move things along we'd be happy with a protocol that encapsulates both. When you consider the amount of payload that will be accompanying any BTP message, adding the atom id to PREPARE, CONFIRM, CANCEL (UNDO) isn't going to have much of an impact. If the receiving service only knows about a single coordinator then it can either ignore the extra information or (and probably more sensibly) check that it refers to itself just in case!

We do need to define the Manager actor explicitly or the interoperable protocol is not clear. I don't see this as an implementation choice: it's part of the protocol. (An alternative would be to remove BEGIN/BEGUN from the protocol altogether, and allow atom bootstrap to be non-interoperable, but I think that is undesirable.)

I believe an interoperable protocol that supports both is possible, and desirable.

I agree that the coordinator and the entity that created it need not be the same service, and this was one of the other implementation choices I alluded to in the email. As long as the message set does not preclude this or collocation then we are not in disagreement. The main reason I selected the co-located choice for the email is that it keeps the number of actors in this to a minimum.

I disagree. You either have a BTP Manager (call it what you will) that manufactures atom coordinators and gives out their addresses in response to BEGIN, or you have to have an API or non-standard message/non-standard actor to create the coordinator. The mandatory entity is the Manager, not the Coordinator. Personally I prefer to have both in our scheme.

I don't care if we call the coordinator factory a BTP Manager, as long as it has the same functionality. Where the coordinator resides (either as a separate service that is visible to the user if he looks at the URL, or hidden in some back-end [to the BTP Manager] service, can be transparent).

I agree with you that BEGIN is useful/necessary, and its existence does not preclude collocation, any more than any of the protocol messages precludes collocation of any of the actors. Whether you want to truly send BEGIN in XML from function A to function B in a collocated implementation depends on how severe your definition of interoperable is, I guess.

What we want to see is the possibility for third-party coordinators/coordinator factories to be plugged into the protocol. That requires interoperability and hence agreement on the message-set.

Yes, but the intention of my email was to try to move us from this abstract notion of, for example, a VOTE to a more concrete implementation. If you re-read the email and take the notion of interface as it was intended (i.e., as a message set for a web service) then I do not think there is any difference.

There is little difference in the abstractness or concreteness of the proposed message set that we discussed before Peter put it out several weeks ago, and the one you propose. Each gives a (frequently different) name to the message, and each describes obligations/behaviours and gives some idea of returned responses. However the current draft set is more precise and complete in several areas. For example it actually states what the possible votes are, it mentions auto-commit/rollback, timeout qualification etc. So I think your message set should be compared with the original proposal, and absorbed only where it adds something new (like BEGIN). Otherwise we go round and round redrafting old work. Furthermore it turns out very, very little new is needed to handle all the stuff we're discussing, as I described in the original document you are commenting on.

Unfortunately I don't have the current draft to hand. But from memory I believe that the error conditions and exceptions were lacking.

More generally, we are only going to get concreteness when we define the XML schema for these messages, and the encodings for particular carriers. The current work is defining a more or less detailed abstract message set.

However, I believe that it is about time we moved onto the concrete implementation of this protocol in, say, XML and SOAP.

Certainly given a coordinator (atom) reference I should be able to get the context. However, if I created the atom in the first place I’d like the context to come back as part of that begin.

I think that improves things. Is BEGUN a synonym for CONTEXT? I suspect it should be, because it supersets the coordinator's address. In which case we'd see BEGIN/CONTEXT and GET_CONTEXT/CONTEXT. One less message.

I don't see why not.

In the case of a loosely coupled system which exists in a widely dispersed network where independent failures of nodes and networks happen more regularly than, say, on a LAN, having a subordinate coordinator know that its time is up without having to wait for an explicit signal from the root is very important.

Hmm. A sub-coordinator going heuristic because of a presumed timeout, caused by time skew, is not a happy outcome.

I did not mention anything about heuristic. Remember, you cannot generate a heuristic unless you have received a previoud PREPARE message. Up until that point the only thing a participant can do is to undo itself (c.f. transaction systems). If this is not your reading of the current protocol then I suspect we have a further email debate to conduct. However, assuming we take my reading of things, the timeout period is *only* applicable up to PREPARE. Therefore, if a subcoordinator has not received PREPARE and did get the original timeout, it can undo itself independently safe in the knowledge that one it does, it will cause all other participants to undo as well (eventually). I believe we discussed this fact briefly at the Mt Laurel face-to-face, and there was general agreement that this was the case.

In fact, this raises the question as to whether participant timeouts should be allowed for sub-coordinator participants, as they may drag down a whole tree, whereas leaf participants can only kill themselves. I guess you just cannot prevent that. And as you say, in a discontinous environment, give or take an accuracy factor, it's exactly what you want to see happen. In which case coordinator timeout becomes a kind of C-P "I want you stay up for this long" negotiation message, as you suggested at Mt Laurel? The relative time/absolute time problem gets worse here, although the use of relative time will just expand the time to expiry at the bottom of the tree (as Ed pointed out) so I guess it's safe.

Agreed.

A web service, whose WSDL supports the following series of web-methods.

I find that a rather confusing and unnecessary level of concreteness. I don't think we have (or should have) decided to use WSDL. And if we are going to debate that, can we get the issue out as a clear proposal or issue in its own right. I thought that this had been rejected at Boston, but maybe I missed something.

WSDL or an XML schema? There's very little difference. If we are talking web services we are in the world of WSDL.

We have hitherto spoken about actors (or actors-in-roles), or to be more precise, the endpoints of protocol messages, which are addressable. The interface you propose is logically a combination of two protocols: the I-M relationship and the I-C relationship. (The M and the C must have different addresses, or the contents of their messages must contain enough information to allow the recipient to sort it out. If I send INFERIOR_STATUS to a Coordinator then we have previously assumed that the Coordinator will know "who it is", i.e. will not need to be told its atom id. Ditto with VOTE, etc.)

As I indicated above, I believe that M and C do not have to have different addresses. This is a implementation choice, and should be supported in the model.

This coordinator manager (or BTP manager if you want) will create atom coordinators which may well be serviced from some other web service. However, this should be transparent to the user: the atom id should be composed of some URL and a unique id (unique in the context of the URL).

I think it would be cleaner to say: the atom id is a globally unique id (and there are several ways of creating those). The Protocol Address (exactly as defined in the Terminology section of the provisional draft) is a Carrier Protocol Address (probably a URL for most bindings) and an opaque Address Suffix. Now, an obvious scheme here is to make the address of say, a coordinator, the URL and the GUID. This allows a carrier listener to handle inbound messages for multiple coordinators. It allows the first part of the address (URL alone) to be the address of the BTP Manager ... and it allows you to do almost anything else you like with addressing.

Agreed.

 I think it is unnecessary (wrong) to bind the atom id to the address in the protocol spec.

I don't care how it's implemented as long as it's unique. However, context relative uniqueness is a lot easier to achieve and manage in a global environment - just take a look at the DNS and ip addressing for a really good example.

All coordinator-specific methods should be directed to the URL, and if this happens to be the same destination as the original creator than fair enough. If it isn’t then that’s ok too. However, it is extremely unlikely that each atom will be a separate web service: that simply isn’t the way in which web
services work – they are coarse-grained and not fine-grained entities.

See above. There is no problem with a two-part address in supporting either "manager/table-keyed-by-id" implementations, or "direct-to-the-object" implementations. No need for us to dictate.

Good. I think we're reaching agreement.

Let’s not get into the mindset of putting individual objects on the web. This isn’t CORBA or J2EE: these aren’t objects, they’re components. It is more likely that individual participants may well be individual web services, and I think this is an important distinction: although a coordinator may share some of the attributes of a participant, it isn’t the same thing. I can write a coordinator that can be used to coordinate any participant; I can’t write a participant that can be used to drive any BTP web service. That’s a bit like saying I can write a single OTS Resource that can be used for any transactional resource!

I agree. In fact in my experience of real CORBA apps you often end up with some kind of coarse, master object which manages a pool of fine objects which are not advertised to the clients. Even inside the firewall you don't want to clog a name service with a thousand objects per app.

Agreed. Currently many web service implementations are going through exactly the same design issues that CORBA went through initially: when CORBA came along, people had been writing C/C++ programs for years and thought that the best thing to do when distributing them was to distribute individual objects. However, it soon became apparent that (amongst other problems) a) this didn't scale in terms of performance and manageability, b) it was an implementation choice that made reconfiguration more difficult, and c) it tended to expose implementation objects that users shouldn't see. It only took a couple of years for people to move to coarser granularity implementations/services.

However, it is quite common to export one factory or indirector, and then have it give out references to the objects that we are manipulating as a client (our own little pool, as it were). In our context we are not compelled to advertise anything more than the Manager, as it is the bootstrap, and this is another good reason for having one. We may then get an address for an individual coordinator from the Manager, and communicate thereafter with that specific address.

And as with some CORBA services, I'd like to be able to keep my back-end implementation of a coordinator pool invisible from users. If at a later date I decide to federate this pool and have different services in, say, different parts of the world, or even a single service per coordinator, then I'd like that to not require a rewrite of applications that use the service.

I think that getting the status of an atom and a participant are identical. >From the perspective of an initiator or composer the atom is nothing but a participant.

Agreed. However, just because two services share the same name for a set of "operations" shouldn't mean that the operations are identical, and that the message payloads are the same.
 
Mark.
 
-----------------------------------------------------------------------
SENDER : Dr. Mark Little, Architect (Transactions), HP Arjuna Labs
PHONE  : +44 191 222 8066, FAX : +44 191 222 8232
EMAIL  : mark@arjuna.com


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Powered by eList eXpress LLC