TAP Implementation Issues: Final Comment: TAP and UWS, sync and async

Tom McGlynn Thomas.A.McGlynn at nasa.gov
Fri Nov 6 07:33:56 PST 2009


I'm sure everyone will be happy to see the word 'Final' in the title...

In the past couple of days I've gotten the UWS asynchronous 
implementation of TAP working (though doubtless still bug-ridden).

When I read and implemented the TAP and UWS standard I had the sense of 
UWS as being a layer within TAP.  In retrospect I think it would have 
been better (for my implementation at least), if I had distinguished 
them more clearly.

Suppose we think of UWS not as an interface layer but as the definition 
of how to build an asynchronous proxies.  UWS becomes a service 
definition, not an access protocol.  The proxy accepts and caches input 
parameters from the users, starts the underlying request when told to, 
caches the response and sends it back to the user when requested.  [I 
haven't followed the discussions of UWS earlier in the Grid list, so my 
apologies if I just discovering what everyone already knows....]

If I think of things this way, then I can implement UWS completely 
independently of the underlying application. Indeed the binding to the 
underlying application could be dynamic: I can provide a UWS layer over 
any number of distinct synchronous applications.    I don't need to know 
anything about what parameters they use, just some root URL.  The one 
piece of the  specification that might cause problems is the desire to 
support multiple outputs as well as a single result.  That's not at 
issue in TAP, but even this could easily be handled by returning a list 
of the outputs -- which is what UWS does now anyway.

UWS is not described this way in its standards document: it is shown as 
a layer within some bigger application, not as a separable entity. 
Similarly TAP shows the asynchronous interface tightly coupled within 
the rest of the TAP.

In this new view, the TAP document would say very little about the 
asynchronous interface.  TAP itself would be synchronous, but if we want 
asynchronous access to be mandatory then the requirement is that a TAP 
implementation must specify a corresponding UWS service through which 
the TAP implementation can be invoked.  We could still have a TAP 
service that is only available asynchronously: we allow that this TAP 
service is not directly callable: Only the associated UWS service can 
access it.  I'm not trying to take sides here in the sync/async wars.

Changes to the UWS document would be rather more subtle, noting that the 
interface can implemented without reference to the underlying 
implementation, and perhaps explicitly supporting the kind of dynamic 
association with the underlying synchronous service mentioned above. 
Maybe provide a convenience resource to get the output in the single 
output case (rather than having to parse the output list).

The advantage had we taken this approach before, is that it largely 
decouples TAP and UWS.  The TAP standard is shorter and simpler.  The 
UWS standard is largely unchanged.  We can change UWS in the future 
without worrying about any impact on TAP.

This is probably a bridge too far in terms of the TAP standard.  For UWS 
it's really a change in tone more than content -- hints to the user -- 
so perhaps it is doable were it to be thought a good idea.  Regardless, 
I do anticipate revising my own implementation to use this approach 
after the Interop.

	Tom McGlynn



More information about the dal mailing list