TAP Implementation issues (cont'd): UWS

Guy Rixon gtr at ast.cam.ac.uk
Mon Nov 2 08:44:30 PST 2009


Tom,

if you want to get the job list then go ahead and do HTTP-GET. That's  
part of UWS (although implementations may restrict the set of you  
reported to be those owned by the caller). What you can't do is use  
HTTP-GET to submit a query via UWS. If you want to use GET to do a  
query then you're doing a synchronous query by definition.

Cheers,
Guy

On 2 Nov 2009, at 14:13, Tom McGlynn wrote:

> Paul Harrison wrote:
>> Guy has already done a good job of answering most of these points - I
>> The UWS design of the two stage process is for two principal reasons
>> a) to be able to manipulate job metadata parameters before the job is
>> run - e.g. the DestructionTime - and receive the feedback from the
>> service whether it is prepared to honour such requests before  
>> actually
>> committing the job.
>> b) to allow complete parameter namespace freedom on the job creation
>> step - i.e. if PHASE is used by UWS then it could not be a parameter
>> for the implementation protocol.
>> So if for a particular implementation using UWS there is no problem
>> with meeting that second condition, then there is no particular  
>> reason
>> why job metadata parameters could not be included with the initial  
>> UWS
>> job creation step if desired - this would require revision of the UWS
>> specification to include this possibility - I think that this is a
>> small enough change to be added into the document as part of the  
>> RFC -
>> it does have a larger impact on possible service implementers however
>> - their code might not be structured to allow this change easily. For
>> a generalized UWS client the change would not be so great, all that
>> would happen is that after the initial submission a job object would
>> be returned with the PHASE=EXECUTING, and general clients should not
>> make any assumptions about state in their coding, so should probably
>> still be able to react appropriately.
>> Just as a side note to show that UWS is not so strange in this
>> multiple interaction between client and server - consider what  
>> happens
>> when a web browser loads a web page - it does the initial get of the
>> html, then parses this html and then gets images, javascript etc.
>> before the page is shown to the user.
>
> I trust the goal is not to require that UWS services need to have  
> the complexity of an interactive visual Web browser.  The protocol  
> should cater to simple applications as well.
>
> I'd be perfectly happy with a change that made it clear that the  
> request that created the job could return it in any state.  In fact,  
> even without the desire to be able to start jobs at creation, that  
> is probably needed to accommodate the situation where there is a  
> problem detected in creating the job but we want the user to be able  
> to parse the error with IVOA protocol level error handling.
>
> The specific text that I find problematic is in 2.1.3:
>
>  PENDING: the job is accepted by the service but not yet committed  
> for execution by the client.  In this state the job quote can be  
> read and evaluated.  This is the state into which a job enters when  
> it is first created.
>
> in conjunction with
>
> 2.2.3.1 Creating a job.
>
> Posting a request to the job list creates a new job (unless the  
> service rejects the request).
>
>
>
> I would suggest something like the following changes
> -
> In 2.1.3 add somewhere
>
>   Phases are ordered with PENDING before QUEUED, QUEUED before  
> EXECUTING and EXECUTING before the trio of COMPLETED, ABORTED and  
> ERROR.  The state of a job may change only to a later state but need  
> not pass through any intermediate state.  A job may be created in  
> any state.
> -
> Delete the last sentence in the definition of PENDING.
> -
>
>
> I think it would be desirable to suggest how a job could be created  
> in the run state even if this is not required by the standard  It  
> would be possible to do this without polluting the parameter name  
> space by specifying a new URI for that.  E.g., ${jobs} creates a new  
> request but does not start it.  ${jobs}/run could create and start  
> the job if that is permitted in the given service.  However I find  
> the worry about pollution of the parameter name space less than  
> compelling, since we require certain parameters to be used in calls  
> to start the job running or to alter other aspects of the job.  It  
> would be poor practice to have phase= mean one thing in a job  
> creation request and mean something else in a job update request.   
> In effect, these parameters are reserved already.
>
>
> This discussion brought up another thing that's not really clear.  
> 2.2.3.1 has the little parenthetical phrase "(unless the service  
> rejects the request)" which is neither explained, nor is the action  
> implied in rejection specified.  I think something like:
>
>   Errors may occur in the creation of the job.  Where possible a job  
> should be created in the ERROR phase with a error message that  
> describes the problems.  If this is not possible, an HTTP 500 error  
> must be returned.
>
> would be clearer for implementation and should replace that phrase.
>
>
> Finally,  one new issue/concern.  [This probably reflects a lack of  
> understanding on my part but if so then perhaps it could be  
> clarified in the standard.]:  It doesn't seem like there is any  
> valid way to get the current job list.
>
> I can't do a GET request for  /{$jobs} because that's cacheable and  
> the list is dynamic.  And I can't do a POST request for it since a  
> post to /{$jobs} means that I'm creating a new job and I'm supposed  
> to be redirected to the job information for the newly created job.
>
> So how do I get to it?
>
> In my TAP implementation I assume that any request to create a new  
> job needs to have a REQUEST= parameter and if I don't see this I  
> return the job list.  If I do, I create the new job.  However this  
> doesn't seem to be literally correct.  I suppose you could say that  
> I'm 'rejecting' the request and since that behavior is undefined I  
> can do anything I want. Relying on undefined behavior doesn't seem  
> satisfactory.
>
> 	Tom
>
>



More information about the grid mailing list