The following sequence of requests would fail, due to the fact that we only call pickup() after the original request has completed.
Client: GET /somepage
Server web app: Begins sending /somepage response including provenance-id: 42 HTTP header
Client: GET /prov/42---> FAILURE
Server web app: Finishes sending /somepage response
Server web app: Calls ProvenanceTracker.pickup()
It's unreasonable to burden the client with waiting for a (subsequent) notification that the provenance ticket is "ready", so the best solution would be to make GET /prov/<id> block until pickup() has been called iff start() has already returned <id>.
It remains to be seen whether this is an issue in practice.
The following sequence of requests would fail, due to the fact that we only call
pickup()
after the original request has completed.GET /somepage
/somepage
response includingprovenance-id: 42
HTTP headerGET /prov/42
---> FAILURE/somepage
responseProvenanceTracker.pickup()
It's unreasonable to burden the client with waiting for a (subsequent) notification that the provenance ticket is "ready", so the best solution would be to make
GET /prov/<id>
block untilpickup()
has been called iffstart()
has already returned<id>
.It remains to be seen whether this is an issue in practice.