Repository navigation
Conversation
taplint (E-UWS-DENO, -HTDE, -JDED, -JDDE) reports four async problems: - Deleting a job did nothing: POST ACTION=DELETE returned the job, and HTTP DELETE was a 500 because FieldStorage raises 'not indexable' on a request without form fields. Both now stop a running job, remove its workspace and answer 303 to the job list; the job is then 404. - An unknown job id was a 500; it is 404. Job ids must match the workspace name pattern (tap_...), so no id reaches outside <workdir>/TAP. - The job document wrote <uws:executionduration>; UWS names it executionDuration. Reading accepts both, for jobs written earlier. - An unset value read back as the text 'None' (/destruction before a job runs) while the job document had it empty; both are now empty. GET on the job list returned a new job; it now returns an empty <uws:jobs>, since clients follow the deletion redirect there. Job URLs join HTTP_URL and CGI_PGM with one slash (NEA keeps its form). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The Euro-VO registry runs taplint, the IVOA's TAP validator, against registered services. It reports four async (UWS) errors for an archive running nexsciTAP:
All four reproduce on
develop.Changes
POST ACTION=DELETEreturned the job document and the job remainedPOST ACTION=DELETEand HTTPDELETEstop the job if it isEXECUTING(asPHASE=ABORTdoes), remove its workspace, and answer303to the job list. The job is then404.cgi.FieldStorageraisesnot indexableon a request with no form fields, so every HTTPDELETEfailed at startup with 500<uws:executionduration>; UWS names itexecutionDuration, so taplint found no element (null)executionDuration. Reading still accepts the lowercase form, for jobs written by earlier releases (jobs live 4 days)./destructionprinted Python'sNoneAlso:
tap_followed by letters, digits or_). Before this, an ID such as..resolved to the work directory itself, which matters now that deletion removes whatever the ID names. The tests send these paths unnormalized, sincerequestswould strip.and..first.GETon the job list no longer creates a job. It created an empty job before, and clients follow the delete redirect with aGETthere, so each delete would have left a junk job. It now returns an empty<uws:jobs>. Jobs carry no owner, so the list shows none of them rather than everyone's.HTTP_URLandCGI_PGMare joined with one/(CGI_PGM=/TAPused to givehost//TAP/async/...). Compat mode keeps NEA's current form.DELETE(tests/conftest.py).Behavior changes for existing deployments
executionDurationcasing, the single-slash job URLs, and the new delete, 404 and job-list behaviors.MIGRATING.mdis updated. TheexecutionDurationpart ofnea-uwsis retired, as its release plan anticipated.Verification
tests/test_uws_conformance.pymirrors taplint's four checks and adds job-ID validation, the job list, deleting a completed job, and delete in compat mode. All of it failed before the change (17 failures) and passes now.executionDurationelement, plus the VOSI headers from Fix malformed HTTP responses from /capabilities and /availability #27, which postdate the recording.taplint itself wasn't run against this branch. The tests reproduce what it reported.
🤖 Generated with Claude Code