Fwd: Mail delivery failed: returning message to sender
Guy Rixon
gtr at ast.cam.ac.uk
Fri Oct 30 07:15:37 PDT 2009
>
> On 30 Oct 2009, at 13:45, Tom McGlynn wrote:
>
>> I've had a few questions with the implementation of the asynchronous
>> access for TAP. Most of these are relevant to UWS document
>> generally rather than just TAP so I've copied the GWS group in this
>> mail.
>>
>> Tom McGlynn
>>
>> -- UWS general questions --
>>
>> - As defined a user needs to always do two web actions to start the
>> service. Is there some reason that the user cannot simply request
>> the service to start running immediately? I suspect that that is
>> what the user wants to do in 99% of the cases. It would be much
>> easier for clients too. The example given in the UWS document of
>> starting a job omits the error checking that the a user presumably
>> should do after starting the job. Why not allow
>> {root}/tap/async?request=doQuery&query=...&phase=RUN
>> to both create and start a query? [Describe it as a POST if you
>> prefer.]
>
> That would work, but would have to be POSTed.
>
>
>>
>> - I'm continue to be confused by the benefits conferred by various
>> practices. Why do we require POSTs specifically in a number of
>> intances? E.g., what would be wrong with using
>> ../jobid/phase?phase=RUN
>> as an HTTP GET rather than an HTTP POST. Since my code cannot tell
>> the difference between these I certainly will be supporting both,
>> but, other than bowing to the mantra REST, I'm not sure why it's
>> supposed to matter.
>
> Whether or not a web service follows REST principles, it has to
> distinguish between requests that change the service state and
> requests that are idempotent. This is a basic part of HTTP. Starting a
> job changes the service state by creating web resources for that job.
> Sending the same query twice gets you two jobs doing the same query;
> they have separate web-resources. Therefore, not idempotent; therefore
> a POSTed request.
>
> GET responses can be cached, and the caching is out of your control as
> a service provider - it may be on the user's LAN (HTTP proxy) or in
> their client (browser cache). If you send the same query twice then
> via GET, for the second request you could get the response for the
> first, pulled from the cache, and no new job. This doesn't happen too
> often but when it does it's brain-bendingly harder to debug.
>
> I suggest that your code must not accept UWS create-job requests via
> HTTP GET. Your users won't like it if they get given the wrong answer
> from a cache. And Google tend to spider all the GETable URLs so you
> don't want them creating jobs.
>
>
>
>>
>> - Similarly I don't think that there should be a strict limitation
>> of the coding used in sending requests. There may be a requirement
>> that a given encoding be supported but there should not be a
>> requirement that it be used. As with POST/GET this level of HTTP
>> detail is handled below the UWS logic in our implementation, so for
>> services that the HEASARC supports we'll be allowing multipart/form
>> encoding as well unless someone can tell us why we should reject
>> such requests.
>
> You're free to support this as well as the stated encoding because it
> doesn't break anything. However, if you write a client that assumes
> this encoding then it won't work on all implementations. So it seems
> pointless to add the feature even in the service. Personally, I think
> that supporting broken clients in this way is not helpful.
>
>>
>> - From what states is a user allowed to start a job? E.g., can a
>> user attempt to restart a job that has previously had an error or
>> aborted? Could the user change the parameters and then rerun the
>> same job? I'm guessing this isn't supposed to happen, but I didn't
>> see where it was forbidden.
>
> You can only change things while it's pending. If you need to re-run a
> failed job then you have to resubmit it.
>
>
>>
>> - What is supposed to happen if there is a problem in creating the
>> job.
>> Should a job be created with an immediate status of ERROR? Is there
>> any way of flagging an error if the system cannot create even an
>> error job? E.g., we're going to use the database to store all job
>> information. What are we supposed to do if the database is down? It
>> would be nice to be able to inform the user of an error in a
>> standard way.
>
> If you can create the job at all then you should immediately set the
> phase to ERROR and make the error document available. If you can't do
> this, then I guess giving up with a 500 "I'm completely stuffed" error
> is reasonable. By extension, UWS clients need to deal minimally with
> 500 errors as well as with proper error-documents.
>
>
>>
>> - Is there supposed to be a one-one mapping between there being an
>> error resource and the job failing with error or aborted. I.e., if
>> I have a job with phase COMPLETED can it still have an error
>> document? Can I have phase ABORTED without an error document?
>
> Not formally defined. I don't see why you can't have an "error"
> document saying "OK, no problem" for status COMPLETED.
>
>
>
>>
>> - Is is allowed to have an empty error document? E.g., can I have a
>> URL
>> ".../jobid/error"
>> which exists but has no content (either as an actually zero length
>> string, or as an empty VOTable)?
>
> In UWS, yes, because the form of the document is not fixed. In TAP, no
> you may not do that. It has to be a VOTable with the status filled in.
>
>
>>
>>
>>
>> -- TAP specific questions. --
>>
>> - The description of where to get the TAP result in an async request
>> is not given (as far as I can see) in what is described as the
>> normative parts of the document. There it says that result will be
>> in
>> root/async/jobid/results/
>> but this is the list of results and can, in principle, contain a
>> number of results. Only in section 5.2 which is described as
>> informative does it say that the result document is .../results/
>> result. Is this actually a requirement or can the result be named
>> anything?
>
> In my service implementation, I take it to be a requirement. In my
> client implementation it currently assumes the one result with the
> standard name but I plan to make it parse the list. (In case we add to
> the results list in future TAP versions.)
>
>
>>
>> - The UWS standard discusses the naming of results. Does TAP
>> require a specific name for the result? In fact it looks like the
>> way UWS is supposed to be used the jobid/results returns a document
>> that looks like
>>
>> <results>
>> <result id='someid' xlink:href='someurl' />
>> <result id='anotherid' xlink:href='anotherurl' />
>> </results>
>>
>> and the user is supposed to find the id of the desired result and
>> use whatever URL is given there, not use a specifically defined
>> URL. I'm guessing the the ID attributes of the <result> fields is
>> the UWS name. The UWS standard says
>> "When a protocol specifies standard results it must do so by
>> naming those results; the names appear in the Results list in
>> addition to the URI's. Not all results need to be named, sometimes
>> the meaning of the result is obvious from the context and the
>> name is omitted."
>> Since the second sentence here seems to contradict the first it's a
>> bit hard to follow, but my reading of this is that it would be
>> better for TAP to specify a name for the output result rather than a
>> specific URL.
>
> For a given service-protocol incorporating UWS, a result can be in one
> of thread cases:
>
> - formally named and mandated by the protocol: name is fixed; result
> must be present when status=COMPLETED; clients can assume these things
> and bypass the results list;
>
> - formally named and made optional by the protocol: name is fixed,
> result might not be present on job completion; clients can either use
> the results list to find whether it's there or just get its and handle
> the 404 if it's missing;
>
> - not formally named: neither URI nor presence is predictable:
> clients must use the links in the results lists to find these results.
>
> TAP has one result that is both named and mandated and nothing in the
> other two categories.
>
>
>>
>> - The TAP RFC document still links to the June version of the
>> document. While there is a comment before the TCG review section
>> indicating that there is a new document, this should probably be
>> noted and linked to at the very top of the document.
>
>
> --Apple-Mail-14--568047058
> Content-Type: text/html;
> charset=US-ASCII
> Content-Transfer-Encoding: quoted-printable
>
> <html><body style=3D"word-wrap: break-word; -webkit-nbsp-mode:
> space; =
> -webkit-line-break: after-white-space; "><br><div><div>On 30 Oct
> 2009, =
> at 13:45, Tom McGlynn wrote:</div><br =
> class=3D"Apple-interchange-newline"><blockquote
> type=3D"cite"><div>I've =
> had a few questions with the implementation of the asynchronous
> access =
> for TAP. Most of these are relevant to UWS document generally =
> rather than just TAP so I've copied the GWS group in this =
> mail.<br><br><span class=3D"Apple-tab-span" style=3D"white-
> space:pre"> =
> </span>Tom McGlynn<br><br>-- UWS general questions --<br><br>- As =
> defined a user needs to always do two web actions to start the
> service. =
> Is there some reason that the user cannot simply request the =
> service to start running immediately? I suspect that that is
> what =
> the user wants to do in 99% of the cases. It would be much
> easier =
> for clients too. The example given in the UWS document of
> starting =
> a job omits the error checking that the a user presumably should do =
> after starting the job. Why not allow<br> =
> {root}/tap/async?
> request=3DdoQuery&query=3D...=
> &phase=3DRUN<br>to both create and start a query?
> [Describe it =
> as a POST if you prefer.]<br></div></blockquote><div><br></
> div><div>That =
> would work, but would have to be =
> POSTed.</div><div><br></div><br><blockquote type=3D"cite"><div><br>-
> I'm =
> continue to be confused by the benefits conferred by various
> practices. =
> Why do we require POSTs specifically in a number of intances? =
> E.g., what would be wrong with using<br> =
> ../jobid/phase?phase=3DRUN<br>as an HTTP GET
> rather =
> than an HTTP POST. Since my code cannot tell the difference =
> between these I certainly will be supporting both, but, other than =
> bowing to the mantra REST, I'm not sure why it's supposed to =
> matter.<br></div></blockquote><div><br></div><div>Whether or not a
> web =
> service follows REST principles, it <i>has </i>to distinguish
> between =
> requests that change the service state and requests that are
> idempotent. =
> This is a basic part of HTTP. Starting a job changes the service
> state =
> by creating web resources for that job. Sending the same query twice =
> gets you two jobs doing the same query; they have separate =
> web-resources. Therefore, not idempotent; therefore a POSTed =
> request.</div><div><br></div><div>GET responses can be cached, and
> the =
> caching is out of your control as a service provider - it may be on
> the =
> user's LAN (HTTP proxy) or in their client (browser cache). If you
> send =
> the same query twice then via GET, for the second request you could
> get =
> the response for the first, pulled from the cache, and no new job.
> This =
> doesn't happen too often but when it does it's brain-bendingly
> harder to =
> debug.</div><div><br></div><div>I suggest that your code must not
> accept =
> UWS create-job requests via HTTP GET. Your users won't like it if
> they =
> get given the wrong answer from a cache. And Google tend to spider
> all =
> the GETable URLs so you don't want them creating =
> jobs.</div><div><br></div><div><br></div><br><blockquote =
> type=3D"cite"><div><br>- Similarly I don't think that there should
> be a =
> strict limitation of the coding used in sending requests.
> There =
> may be a requirement that a given encoding be supported but there
> should =
> not be a requirement that it be used. As with POST/GET this
> level =
> of HTTP detail is handled below the UWS logic in our implementation,
> so =
> for services that the HEASARC supports we'll be allowing multipart/
> form =
> encoding as well unless someone can tell us why we should reject
> such =
> requests.<br></div></blockquote><div><br></div><div>You're free to =
> support this as well as the stated encoding because it doesn't break =
> anything. However, if you write a client that assumes this encoding
> then =
> it won't work on all implementations. So it seems pointless to add
> the =
> feature even in the service. Personally, I think that
> supporting =
> broken clients in this way is not helpful.</div><br><blockquote =
> type=3D"cite"><div><br>- =46rom what states is a user allowed to
> start a =
> job? E.g., can a user attempt to restart a job that has
> previously =
> had an error or aborted? Could the user change the parameters and
> then =
> rerun the same job? I'm guessing this isn't supposed to
> happen, =
> but I didn't see where it was =
> forbidden.<br></div></blockquote><div><br></div><div>You can only
> change =
> things while it's pending. If you need to re-run a failed job then
> you =
> have to resubmit it.</div><div><br></div><br><blockquote =
> type=3D"cite"><div><br>- What is supposed to happen if there is a =
> problem in creating the job.<br>Should a job be created with an =
> immediate status of ERROR? Is there any way of flagging an
> error =
> if the system cannot create even an error job? E.g., we're
> going =
> to use the database to store all job information. What are we
> supposed =
> to do if the database is down? It would be nice to be able to =
> inform the user of an error in a standard =
> way.<br></div></blockquote><div><br></div><div>If you can create the
> job =
> at all then you should immediately set the phase to ERROR and make
> the =
> error document available. If you can't do this, then I guess giving
> up =
> with a 500 "I'm completely stuffed" error is reasonable. By
> extension, =
> UWS clients need to deal minimally with 500 errors as well as with =
> proper error-documents.</div><div><br></div><br><blockquote =
> type=3D"cite"><div><br>- Is there supposed to be a one-one mapping =
> between there being an error resource and the job failing with error
> or =
> aborted. I.e., if I have a job with phase COMPLETED can it
> still =
> have an error document? Can I have phase ABORTED without an
> error =
> document?<br></div></blockquote><div><br></div><div>Not formally =
> defined. I don't see why you can't have an "error" document saying
> "OK, =
> no problem" for status =
> COMPLETED.</div><div><br></div><div><br></div><br><blockquote =
> type=3D"cite"><div><br>- Is is allowed to have an empty error
> document? =
> E.g., can I have a URL<br> ".../jobid/error"<br>which
> exists =
> but has no content (either as an actually zero length string, or as
> an =
> empty VOTable)?<br></div></blockquote><div><br></div><div>In UWS,
> yes, =
> because the form of the document is not fixed. In TAP, no you may
> not do =
> that. It has to be a VOTable with the status filled =
> in.</div><div><br></div><br><blockquote
> type=3D"cite"><div><br><br><br>-- =
> TAP specific questions. --<br><br>- The description of where to get
> the =
> TAP result in an async request is not given (as far as I can see) in =
> what is described as the normative parts of the document.
> There it =
> says that result will be in<br> =
> root/async/jobid/results/<br>but this is the list of
> results =
> and can, in principle, contain a number of results. Only in section
> 5.2 =
> which is described as informative does it say that the result
> document =
> is .../results/result. Is this actually a requirement or
> can =
> the result be named =
> anything?<br></div></blockquote><div><br></div><div>In my service =
> implementation, I take it to be a requirement. In my client =
> implementation it currently assumes the one result with the standard =
> name but I plan to make it parse the list. (In case we add to the =
> results list in future TAP =
> versions.)</div><div><br></div><br><blockquote
> type=3D"cite"><div><br>- =
> The UWS standard discusses the naming of results. Does TAP
> require =
> a specific name for the result? In fact it looks like the way
> UWS =
> is supposed to be used the jobid/results returns a document that
> looks =
> like<br><br> <results><br> =
> &l
More information about the grid
mailing list