fix(android): preserve queued upload scheduling - #439
Conversation
Obiente previewNC Native · Obiente updates this comment as the preview changes. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 454d73b427
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
e2a8728 to
d4e541c
Compare
4482b93 to
c2f0cc7
Compare
c2f0cc7 to
84677b8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 84677b8a69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
84677b8 to
abcbb66
Compare
abcbb66 to
7b2e575
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7b2e575cd6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
7b2e575 to
a86e5ec
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a86e5ec1fa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
a86e5ec to
3ed84f8
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 50db150461
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } | ||
| monitorQueuedDurableUploadScheduling( | ||
| recover = { | ||
| keepRetryingQueuedDurableUploadScheduling( |
There was a problem hiding this comment.
Let the monitor consume failures during recovery retries
When any unrelated reconciliation condition keeps returning false, such as a picker cleanup that remains temporarily unavailable, this nested keepRetryingQueuedDurableUploadScheduling call never returns control to the outer monitor. A worker-failure request has already placed that job in backedOffWorkIds, but because its batch is never consumed, every periodic reconciliation skips the job via scheduleUnlessBackedOff and its deadline is never retired; the upload can therefore remain queued indefinitely behind the unrelated failure. Fresh evidence beyond the earlier backoff comments is that the final application wiring nests the uninterruptible retry loop inside the sole signal consumer; make these waits signal-aware or return after each retry cycle.
AGENTS.md reference: AGENTS.md:L457-L459
Useful? React with 👍 / 👎.
…ad-scheduling-recovery-stack
Outcome
Preserve durable attachment uploads when WorkManager accepts a job but its completion signal fails. Keep the journal and source ownership so startup and status restoration can recover the same upload without submitting a duplicate.
Recovery now also:
Cancellation after persistence remains cancellation. A source is released only when the queue can prove that no active job owns it.
Validation
The preceding recovery revision passed on the dedicated Linux build host at source tree
f26d5d41b6b6fe167a0b2138f806611e29be4503::androidApp:assembleDebug.bash tools/check-repository.shandgit diff --check.The latest revision also stops permanently retrying cleanup blocked by malformed peer metadata. Ambiguous non-preexisting grants remain quarantined. Proven preexisting grants use metadata-only removal without revoking another owner's grant. Three regression tests cover these cases.
Head
50db150461553e227b19907d7b0f2ea7ecec74e1includesmainat92dd2ae9cec1dc7dac16907e66d7b870694ebbbfand the parent provider-deadlock fix. All 49 layer commits retained identical patches during the latest restack. Full repository checks andgit diff --checkpassed. The new regression tests and inherited deadlock fix have not yet received direct build-host validation because the host stopped responding during another capture job. Hosted checks on this head are pending; the earlier 145-test result does not cover these newest changes.Limits and dependency
Deterministic tests and APK assembly do not prove emulator lifecycle behavior, a live Nextcloud attachment upload, or fault injection inside Android's real WorkManager database. Those checks were not performed for this revision.
This PR builds on #438, which owns the adjacent account-isolated queued credential lookup.
Advances #52