RE: FW: TBTF: Trace Bindings - wire view v requester/responder vi ew.

Since you asked for my opinion specifically, here is what I am thinking
(following your convention, I'm also attaching a .txt file, in case the
e-mail itself has any wrapping problems):

I think that each of these iterations has made the trace based approach
more promising.  On the other hand, I'm still not sure we've turned the
corner to where we have a presentation that I believe would be simple and
comprehensible, especially for novice readers.  The choices are exactly the
ones you've outlined at the end: go back to the status quo, or keep working
on this.  I am willing to put a little more effort into exploring this
option, if you are, but I still think we have to assume the status quo
until this approach reaches a level of polish where everybody feels good
about it.

It feels to me like the right balance might be to use some of the
formalism, but not to carry it all the way down to the properties.  Would
it makes sense to do something like the following:

* Outline the traces on the wire using the algebraic notation, more or less
as you have been proposing right along.  Do not include the local state
properties at this level.

* Describe each state with a triple.  This would be a simple English state
name such as "Sending Request" as we have today (I like this better than
S1, S2), a list of the trace fragments that characterize the inbound edges,
and an informal English description.  See below for an illustration.

* Keep the named typed properties and operational descriptions that we have
in our existing working draft.  Put these in a table immediately below the
triple.  The result would be something along the lines of:

      *************************Description of State "Sending Request"
********************
      State name: Sending Request
      Traces leading to this state:
               eoReq.S2 +                            //Finished sending
Request
              !soResp.receiving.S3 +                 //Start of overlapping
response
              !channelfail.Fail +                    //Channel/media
failure
              !localException.Fail                   //Local Timeout or
reason to abort
      Description:  Requesting node begins transmission of request


=========================================================================================
    | Next State   |       Action
|
    |   Fail       |   Set "transport:FailureReason" to
"transmissionFailure"  |
    |   Waiting    |
|

=========================================================================================
      *************************End Description of State "Sending Request"
*****************

I don't think the actual traces line up with the action illustrated, but
the idea is that the traces would illustrate the different means by which
one can enter the state.

I still feel like I'm missing something, but I'm trying to put in enough
plain English and formatting, and put the traces in a context where even
novices will have a sense of their purpose.  I think I would find something
like this easier than:

!soHTTPResp(status
==200,responder=x).setProperty(transport:ImmediateSender=x
).
         receiving.SentAndReceiving
      +
!soHTTPResp(status
==202,responder=x).setProperty(transport:ImmediateSender=x
)....
      +
!soHTTPResp(status==500,responder=x).setProperty(transport:FaultHint,true).
        setProperty(transport:ImmediateSender=x).SentAndReceiving
      + !soHTTPResp(
      + ...

Are we making progress?  Thanks very much.

(See attached file: tracebased.txt)

------------------------------------------------------------------
Noah Mendelsohn                              Voice: 1-617-693-4036
IBM Corporation                                Fax: 1-617-693-8676
One Rogers Street
Cambridge, MA 02142
------------------------------------------------------------------





                                                                                                                                      
                      "Williams,                                                                                                      
                      Stuart"                  To:      Noah Mendelsohn/CAM/Lotus@Lotus                                               
                      <skw@hplb.hpl.hp         cc:      "'Christopher Ferris (E-mail)'" <chris.ferris@east.sun.com>,                  
                      .com>                    "'distobj@acm.org'" <distobj@acm.org>, "'Glen Daniels (E-mail)'"                       
                                               <gdaniels@macromedia.com>, "Henrik Frystyk Nielsen (E-mail)" <henrikn@microsoft.com>,  
                      01/17/02 10:00           "'Highland M Mountain (E-mail)'" <highland.m.mountain@intel.com>, "'Mark A. Jones      
                      AM                       (E-mail)'" <jones@research.att.com>, "'Marc Hadley (E-mail)'"                          
                                               <marc.hadley@uk.sun.com>, Noah Mendelsohn/CAM/Lotus@Lotus, "'Oisin Hurley (E-mail)'"   
                                               <ohurley@iona.com>, "'www-archive@w3.org'" <www-archive@w3.org>                        
                                               Subject: RE: FW: TBTF: Trace Bindings - wire view v requester/responder vi ew.         
                                                                                                                                      




Hi Noah,

[This is a much briefer response than yesterday (although not brief in any
absolute sense :-)). I think this response does more directly address your
concern/confusion and may improve your comfort level with the approach...
so
please bear with it.

When I started this response I was pretty much of the mind - lets stick
with
what we know best... the tables... as the response developed I have become
more convinced that it is do-able with the algebraic notation... I think
that our schedule requires we make a sufficiently well-informed speedy
choice rather an optimal choice... ]

> I think the main point of confusion for me can be summarized as: what
> happened to the named properties?

Ahah... now a clearly understand the concern...

What the process algebra/traces do very nicely is capture the 'shape' of
the
state-machines and their transitions. I think it might overload the
notation
to try to work all that detail into the algebraic expressions - however
I've
tried to give a flavour of what that might look like below.

> Anyway:  does it make any sense to think of the trace
> formalism as not in any sense eliminating the state machine, but rather
as

> a means of providing more organized names for the states and the edges?

Yes... exactly, particular the algebraic expression (particularly the
factorised version) is 'just' another way of describing a state-machine...
at least it can be viewed that way.

> So, instead of states named things like "requesting" as in our current
> draft, states might be named  in the manner of your comments
> e.g. [start,soReq,soResp,receiving].

The traces actually reveal the path by which the machine came to be in a
given state (at least with a deterministic state machine which this one is
so far - a given sequence of events will aways land you in the same state).
However, in general there can be multiple paths, event traces that lead to
the same state... so the event sequencing might not be the most comfortable
way of 'naming' MEP states. The names that we have 'requesting'
'receiving'... do it better. Just to take the requester example from
yesterday's posting and relabel S1,S2,S3,S4 and S4 as Sending,
SendingAndWaiting, SendingAndReceiving, SentAndReceiving,
SendingAndReceived
probably more clearly exposes the state machine structure.

[Just glance over this if your pressed for time each state is a set of
choices, each choice within the state being guarded by an event, then a
sequence of . (. means followed by) separated actions ending in a next
state.]

Srr-requester = !start.soReq.Sending

//Sending Request
Sending = eoReq.SentAndWaiting +                //Finished sending
Request
     !soResp.receiving.SendingAndReceiving +    //Start of overlapping
response
     !channelfail.Fail +                        //Channel/media
failure
     !localException.Fail                       //Local Timeout or
reason to abort

//Request sent waiting for start of response
SendAndWaiting = !soResp.receiving.SentAndReceiving + //Start of
non-overlapping response
     !channelFail.Fail +
     !localExpception.Fail

//Sending request and Receiving response
SendingAndReceiving = eoReq.SentAndReceiving +  //Finished sending, still
receiving
     !eoResp.SendingAndReceived +
//Finished receiving, still sending
     !channelFail.Fail +
     !localException.Fail

//Waiting to receive end of response.
SentAndReceiving = !eoResp.Success +            //Exchange completed
successfully
     !channelFail.Fail +
     !localException.Fail

//End of overlapping response received, still sending request
SendingAndReceived = eoReq.Success +
     !channelFail.Fail +
     !localException.Fail

Fail = fail.0           //Signal local failure and stop (0 = Null process)

Success = success.0     //Signal local success and stop

I hope that you can also see that we can equally describe the machine
captured in the algebra with a table of current-state, input, next-state,
action. Note that the input column of our current WD MEP tables is empty
and
we need to work on filling those in.

If we were going with the algebraic formulation, the transitions paths
could
be made more elaborate to include more direct interaction with the local
state (Message Exchange Context) eg:

      ...
      +
!channelFail.setProperty(fail:FailureReason,fail:ReceptionFailure).
                     setProperty(transport:FailReason,fail:TransportError).
                     Fail
      + !localException.setProperty(fail:FailureReason,
fail;LocalException).Fail
      +

or if receiving a message

      + !soResp(responder=x,message=y).
         setProperty(transport:ImmediateSender,x).
         setProperty(transport:CurrentMessage,y).
         receiving.SentAndReceiving
      + ...

The introduction of the x,y variables is my own invention (not to say it
hasn't been done before, or more elegantly elsewhere) which I will again
checkout with my local guru if it looks favourable - at the moment I'd
rather not have to think about typing and scoping rules for such variables.

In the more concrete binding specification sending an HTTP request message
could be modelled as:

      + !start.soHTTPReq(requestURI=transport:ImmediateDestination,
                         message=transport:CurrentMessage).Sending
      + ...

and again, structurally the over all expression would be 'reasonate' with
the one in the MEP.

For behaviours influenced by things like HTTP status codes, something like:
      ....

      +
!soHTTPResp(status
==200,responder=x).setProperty(transport:ImmediateSender=x
).
         receiving.SentAndReceiving
      +
!soHTTPResp(status
==202,responder=x).setProperty(transport:ImmediateSender=x
)....
      +
!soHTTPResp(status==500,responder=x).setProperty(transport:FaultHint,true).
        setProperty(transport:ImmediateSender=x).SentAndReceiving
      + !soHTTPResp(
      + ...

might work [again some 'invention' on my part for testing the status code
values].

> On balance, I suppose I'm intrigued but nervous about making the change
(I
know that's
> not very helpful).

To a large extent I think thats where I was when I floated this. When I set
out to write this response I was at the brink of saying... big and ugly
though they might be lets stick with the tables and pictures... we know we
understand them and connecting up with the named properties from the
algebra
may be a little ugly.

However, from the little fragments above, I think that connecting the
algebra to the named properties is readily doable... *if* we want to go
this
way.

I think that a key question to ask/answer is do you (we) prefer, say, the
Srr-requester behaviour expressed as a table or as a set of algebraic
expressions (with friendly state names). Both can be supported with the
*same* state transition diagram.

[The state-machine here is different from the one in the WD because it
addresses the overlapping request/response cases... there IS an equivalent
tabular presentation]

If we have an overridding preference for the tabular presentation... thats
fine... we can decide an move on.

If we find the algebraically presented version at least intriguing and
maybe
even appealling, have we (I) derisked the approach enough for us to move
forward with it?

I am willing to put what energies I have into any one of:

      a) Completing the tables (including consideration of overlapping
request/response)
      b) Revisiting/generating fuller versions of the
process-algebra/wire-trace bindings
      c) Working to further derisk b)

Basically, if I prove to be the main workhorse on this... a) feels safe, b)
has some risk but I'm willing to try to make it work and c) is more of a
tentative b) requiring more process to make a decision. I'd like some
direction from the TBTF as to where they would like me to invest my time on
this.

Best regards and thank you for the continuing discussion,

Stuart

> -----Original Message-----
> From: noah_mendelsohn@us.ibm.com [mailto:noah_mendelsohn@us.ibm.com]
> Sent: 17 January 2002 03:28
> To: Williams, Stuart
> Cc: 'Christopher Ferris (E-mail)'; 'distobj@acm.org'; 'Glen Daniels
> (E-mail)'; Henrik Frystyk Nielsen (E-mail); 'Highland M Mountain
> (E-mail)'; 'Mark A. Jones (E-mail)'; 'Marc Hadley (E-mail)'; 'Noah
> Mendelsohn (E-mail)'; 'Oisin Hurley (E-mail)'
> Subject: Re: FW: TBTF: Trace Bindings - wire view v
> requester/responder
> view.
>
>
> Stewart,
>
> As promised, I have spent some time this evening reviewing your trace
> proposals.  I'm sure I haven't given them the time they deserve, and I
> feel very inadequate in having no background in process algebras.  So,
> with all those caveats, a few comments:
>
> I think the main point of confusion for me can be summarized as: what
> happened to the named properties?  Maybe I am just not reading carefully
> enough, but I don't see them.  This is another way of saying, exactly
what

> information is available to an application or to the node logic "above"
> the binding framework at any point in the trace?  Our existing
formulation

> very clearly spells out such information.  You know whether you have a
> failure code, the URI of a destination, or whatever, and you knew the
> types of such information (e.g. integer), etc.  The courage approach also
> clearly details the information to be conveyed from node to node with
each

> message.  I need to understand where all of this shows up in your
proposed

> alternative.
>
> I have looked in some detail at the formulation that you sent this
> evening.  My first reaction was that I could not understand it at all,
and

> then when I stared at it again it began to make sense.  I must admit that
> I am trying to visualize what this will look like when we scale it to
> handle all the details, and am then trying to do the equivalent for the
> state machine approach.  Honestly, I find myself flopping back and forth.
> On balance, I think the crucial thing for me is the point I raised above:
> to understand how the local state is modeled and how we actually present
> it from a formatting point of view.  It seems to me that in the case of
> each of the choices within the states, we still need to document the
> resulting values.
>
> Now, I am going to go out way out on a limb and make a proposal.  I
> suspect your reaction will be somewhere between "but that's not a
> proposal, that's what I've been saying all along" and "that proposal
makes

> no sense at all".  Anyway:  does it make any sense to think of the trace
> formalism as not in any sense eliminating the state machine, but rather
as

> a means of providing more organized names for the states and the edges?
> So, instead of states named things like "requesting" as in our current
> draft, states might be named  in the manner of your comments
> e.g. [start,soReq,soResp,receiving].  In other respects, we would keep
the

> state machine presentation, the named properties, and so on.
>  We would describe the traces as seen on the wire, much as you are
> proposing, and I suppose label either the states or the edges entering
them (I
> must admit to being a little murky on how to do this right) with
> fragments of the trace grammar (more murkiness).  Is there a standard
approach
> such things doing process algebras?
>
> I still think, that when the dust settles, we need to put a high priority
> on making sure that novices and experts alike can easily understand what
> they're seeing, and can learn from it incrementally.  I don't  think the
> trace formulation is quite that clear yet.  One way to do  this might be
to
> present the little grammars graphically, rather than in text.

> On balance, I suppose I'm intrigued but nervous about making the change
(I
know that's
> not very helpful).
>
> Anyway, I know these comments are somewhat rambling, but that's as far as
> I've been able to get this evening.  I hope this is helpful.
>
> ------------------------------------------------------------------
> Noah Mendelsohn                              Voice: 1-617-693-4036
> IBM Corporation                                Fax: 1-617-693-8676
> One Rogers Street
> Cambridge, MA 02142
> ------------------------------------------------------------------
>
>
>

Received on Thursday, 17 January 2002 18:11:54 UTC