Skip to content

fix(execd): ensure uploaded files are visible before responding#895

Merged
hittyt merged 2 commits into
alibaba:mainfrom
Pangjiping:hotfix/execd-write-visibility
May 17, 2026
Merged

fix(execd): ensure uploaded files are visible before responding#895
hittyt merged 2 commits into
alibaba:mainfrom
Pangjiping:hotfix/execd-write-visibility

Conversation

@Pangjiping
Copy link
Copy Markdown
Collaborator

Summary

On weakly-coherent filesystems (virtio-fs, 9pfs), a freshly-written file can be invisible to subsequent processes for a brief window after the upload handler returns 200, causing intermittent "file not found" errors when callers immediately invoke /command after /files/upload.

  • fsync the parent directory after closing the new file so the new dirent is durable and observable. Best-effort: ignore ENOTSUP.
  • Re-stat the file after chmod and retry once with a short sleep to absorb metadata-propagation delay. Failure is logged, not returned, to preserve existing success semantics.

Testing

  • Not run (explain why)
  • Unit tests
  • Integration tests
  • e2e / manual verification

Breaking Changes

  • None
  • Yes (describe impact and migration path)

Checklist

  • Linked Issue or clearly described motivation
  • Added/updated docs (if needed)
  • Added/updated tests (if needed)
  • Security impact considered
  • Backward compatibility considered

@Pangjiping Pangjiping added bug Something isn't working component/execd labels May 15, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c446c02997

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread components/execd/pkg/web/controller/filesystem_upload.go Outdated
On weakly-coherent filesystems (virtio-fs, 9pfs), a freshly-written file
can be invisible to subsequent processes for a brief window after the
upload handler returns 200, causing intermittent "file not found" errors
when callers immediately invoke /command after /files/upload.

- fsync the parent directory after closing the new file so the new
  dirent is durable and observable. Best-effort: ignore ENOTSUP.
- Wrap ChmodFile in a one-shot retry with a short sleep. ChmodFile
  always invokes chown under the hood, so a freshly-created dirent that
  has not yet propagated would otherwise surface as ENOENT and turn a
  recoverable visibility delay into a 500 response.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Pangjiping Pangjiping force-pushed the hotfix/execd-write-visibility branch from c446c02 to c0f77b8 Compare May 15, 2026 04:34
@hittyt
Copy link
Copy Markdown
Collaborator

hittyt commented May 17, 2026

Please fix the go lint issue.

Extract form parsing, metadata parsing, target resolution, file write,
and permission application into helpers so UploadFile passes the gocognit
threshold (>30). Behavior unchanged; errors flow via *uploadError and
funnel through a single RespondError call site.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Pangjiping
Copy link
Copy Markdown
Collaborator Author

Please fix the go lint issue.

Resolved

Copy link
Copy Markdown
Collaborator

@hittyt hittyt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@hittyt hittyt merged commit a0f66f3 into alibaba:main May 17, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working component/execd

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants