Restore: durable background restore (restore_id, persisted pending request, late replies applied)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start by reading the prerequisite issue #215 and the related idempotency issue #218, then trace the restore dispatcher, RestoreData handling, and local state used by the restore screen. Done means pending restores survive navigation and app restarts, late and duplicate replies are handled safely, and users can explicitly abandon a restore.
Written by the indexing model from the issue text.
Description
Sub-issue of #142. Depends on: #215.
Problem
The handshake currently waits on a fixed 10-second in-process timeout. The daemon's restore window is on the order of an hour, so a valid reply routinely arrives after the waiter is gone — and is then discarded. Logging the late reply only makes the loss visible; it does not fix it.
Restore is not a foreground RPC. It is a durable background operation.
Scope
- Give each restore an explicit
restore_id/request_id, echoed by progress, final and error messages. - Persist the pending restore locally, so it survives navigating away from the screen and a full app restart.
- The dispatcher must apply a valid final
RestoreDataeven when no UI waiter is attached. - Drop the fixed short timeout in favour of the durable model; keep a bounded retry/abort path so a restore cannot hang forever with no way out.
- Late, duplicate or out-of-order replies must be handled safely (this pairs with the idempotency requirement in #218).
Acceptance criteria
- A reply arriving well after the request (> 10s, and after an app restart) is still applied
- Navigating away from the restore screen does not discard the result
- A restore in flight is visible in local state after a cold start
- A duplicate final reply for the same
restore_idis a no-op - The user can cancel/abandon a restore explicitly, and the abandoned
restore_idis then ignored
- Dominant language
- Dart
- Stars
- 11
- Forks
- 9
- Avg merge
- 21h 30m
- Merged PRs (30d)
- 225
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from MostroP2P/app
-
area: ui feature priority: medium
Difficulty 1/5 Under an hour Newbie friendliness 90/100
Maintainers usually reply within 1 day
-
area: rust-core bug priority: low
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
area: ui
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
Similar issues
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 65/100
chriskelly/wish-together#36 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
AppFlowy-IO/AppFlowy#9075 ·
-
Paste asks for iOS paste permission because the default context menu ignores SystemContextMenuPossibly taken @dorklein claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
maheshj01/searchfield#267 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
hajisensai/Fushi#2340 · 2 comments ·
Maintainers usually reply within 1 day