apache / apache/texera

fix(workflow): a save's response must not overwrite a newer local edit (WorkflowPersistService)

Open
#8,536 2 comments 0 reactions 1 assignee Claimed by @yangzhang75 View on GitHub
Dominant language
Scala
Stars
314
Forks
187
Avg merge
1d 21h
Merged PRs (30d)
214

Description

### What happened?

Every save applies its response as the workflow's metadata: the workspace autosave (`workspace.component.ts`), the menu's own save (`MenuComponent.persistWorkflow`: rename, description, revert) and the Canvas -> Form View switch's save. Saves are sent one at a time since #8456, so a response can land after a newer local edit and overwrite it:

- Rename the workflow while an autosave is in flight: the autosave's response puts the old name back (until the rename's own save answers).
- Click Form View, then rename while the switch's save is out: the rename's save is queued behind the switch's, the switch navigates when its own save completes, and the full-page load aborts the rename's save (metadata edits do not emit `workflowChanged()`, so the hand-over does not wait for them).

Deferred from #8456 on review (threads on `menu.component.ts:692` and `:231`): the rule belongs in `WorkflowPersistService`, the one place every save goes through, not in one caller.

### How to reproduce?

1. Open a workflow on the operator canvas and make a graph edit (an autosave starts).
2. Before it answers, rename the workflow in the title bar.
3. The title flips back to the old name when the autosave's response is applied.

Or: click Form View and rename during the hand-over's save; the rename is lost.

### Proposed fix

In `WorkflowPersistService`: do not apply (or hand back for applying) a response a newer local edit has overtaken, for every caller alike -- e.g. a revision per save, or apply from the response only the fields that still match what was sent; and let the Form View hand-over wait for the save queue to drain rather than for its own save only.

### Version/Branch

main, after #8456.

### Commit Hash

main

### Browsers

All

### Relevant log output

n/a

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.