-
Notifications
You must be signed in to change notification settings - Fork 21
Description
Why?
SPARQL 1.1 Update discusses atomicity, and also notes that "Deleting triples that are not present, or from a graph that is not present will have no effect and will result in success."
The Solid project has encountered a problem around this in the case where isolation could not be maintained.
My interpretation of this is the following (based in part on the discussion within the Solid project but also with @afs ): Consider the case where two concurrent users do a DELETE-INSERT operation, then if the endpoint does not maintain isolation, the success status will not be helpful in determining if isolation was breached. Thus, for this use case, it seems to be an expectation that atomicity and isolation is maintained.
It is not necessarily a requirement everyone should meet (though, I personally prefer to use conditional requests).
I think we should discuss relaxing this requirement, and instead communicate a conflict.
Previous work
@timbl has a Design Issue where he strongly advocates that a 409 Conflict
should be sent at the protocol level in this case.
Proposed solution
Add a "conflict" operation result to SPARQL Update, that SPARQL implementations that does not maintain ACID can/should/must use to indicate conflict.
Add 409 Conflict
to the SPARQL Protocol to be used whenever the underlying implementation indicates a conflict.
Considerations for backward compatibility
For services currently supporting ACID, there should be no changes. Clients that have previously relied on that the servers supports ACID, will need to add logic to support conflicts, including detecting 409, update and reschedule their writes.