opengeospatial / opengeospatial/ogcapi-processes

[RFC comment] Lost-update race condition

Open
#631 1 comment 1 reaction 1 assignee View on GitHub

@pvretano is already working on this.

Since Sep 14, 2026.

Dominant language
AsciiDoc
Stars
63
Forks
46
Avg merge
2d 1h
Merged PRs (30d)
8

Description

Hello OGC Standards Team,

I would like to submit the following public-review comment for OGC API – Processes Version 2, Part 2: Deploy, Replace, Undeploy (current RFC closing September 5, 2026). The RFC announcement points commenters to GitHub; I cannot reliably use that submission path from my current environment, so please either record this comment in the review or let me know the appropriate non-GitHub public-comment path.

Issue: stale administrative clients can silently overwrite or delete a newer deployed process.

The current draft defines replacement as PUT /processes/{processID} and says the new process definition replaces the old one. It also states that version control is not discussed in the Standard. I could not find a requirement for an HTTP entity validator such as ETag, or for conditional mutation using If-Match, on replace or undeploy. The HTTP status material includes 412 Precondition Failed, but the process-management operations do not appear to define how clients use a precondition to prevent lost updates.

This creates a standard lost-update race:

Client A and Client B both retrieve or otherwise base changes on the same deployed process definition.
A replaces the process.
B, unaware that A changed it, performs its own PUT using stale state.
B’s request succeeds and silently removes A’s change.

The same issue applies to an undeploy/delete based on stale knowledge of the resource. Because a process identifier can represent executable geospatial/scientific workflows, a silent administrative overwrite can also affect reproducibility: the same process ID may later refer to materially different code/configuration without the caller having intended to replace a newer definition.

Suggested change, remaining implementation-neutral:

• Require or strongly recommend that mutable deployed-process representations expose a strong concurrency validator (HTTP ETag is the natural REST mechanism, or an equivalent if the Standard intentionally abstracts it).
• Require replace and undeploy operations to support a conditional mutation using the current validator (for HTTP, If-Match).
• When the supplied validator no longer represents the current resource, reject the mutation with 412 Precondition Failed rather than silently overwriting/deleting the newer state.
• If PUT is allowed to act as upsert, clarify that a request intended to create a missing resource must not accidentally overwrite an existing resource without satisfying the existing-resource precondition.
• Return the new validator after a successful deploy/replace so subsequent administrative operations can be based on the state that actually committed.
• Add a conformance test with two clients based on the same initial representation: after A successfully replaces the process, B’s stale replace and stale undeploy must fail rather than erase A’s change.
• Clarify that the process version property is application/semantic version information and should not be assumed to be an HTTP concurrency validator unless the specification explicitly defines it that way.

This does not require process-history/version-control semantics. It only prevents one current resource state from being unknowingly overwritten by an operation based on an older state, using normal HTTP conditional-request behavior already represented by status 412 in the draft.

Thank you for considering the comment.

Seth Morrow

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.