Skip to content

Relaxation of transaction requirements #60

@kjetilk

Description

@kjetilk

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    communicationerrorHow to pass any kind of failures to the clientprotocolimproving sending queries over the wirequeryExtends the Query specupdateExtends the Update spec

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions