Skip to content

fix(native-sidecar): always answer sync-RPC waiters on handler failure#1809

Open
NathanFlurry wants to merge 1 commit into
stack/fix-native-sidecar-tolerate-guest-filesystem-quota-errors-in-shadow-sync-muvrpwuzfrom
stack/fix-native-sidecar-always-answer-sync-rpc-waiters-on-handler-failure-wynsztxp
Open

fix(native-sidecar): always answer sync-RPC waiters on handler failure#1809
NathanFlurry wants to merge 1 commit into
stack/fix-native-sidecar-tolerate-guest-filesystem-quota-errors-in-shadow-sync-muvrpwuzfrom
stack/fix-native-sidecar-always-answer-sync-rpc-waiters-on-handler-failure-wynsztxp

Conversation

@NathanFlurry

Copy link
Copy Markdown
Member

Three sites could complete or abandon guest-driven work without ever
answering the guest, leaving it blocked until the ~31s bridge deadline:

  • service.rs: the deferred fd wakes ran with ? BEFORE response delivery,
    so a wake failure discarded an already-successful result. The wakes are a
    side effect for OTHER waiters and must not fail this request.
  • service.rs: the chmod shadow mirror had the same pre-delivery ?.
  • process_events.rs: an internal event is leased (popped) before dispatch,
    so a handler error destroyed it outright; when it was a sync-RPC request
    the waiter ceased to exist anywhere. The waiter is now answered with the
    errno.

Answering is preferred over requeueing: a deterministic handler failure
would otherwise be retried forever, and the guest is owed the errno rather
than silence.

Three sites could complete or abandon guest-driven work without ever
answering the guest, leaving it blocked until the ~31s bridge deadline:

- service.rs: the deferred fd wakes ran with `?` BEFORE response delivery,
  so a wake failure discarded an already-successful result. The wakes are a
  side effect for OTHER waiters and must not fail this request.
- service.rs: the chmod shadow mirror had the same pre-delivery `?`.
- process_events.rs: an internal event is leased (popped) before dispatch,
  so a handler error destroyed it outright; when it was a sync-RPC request
  the waiter ceased to exist anywhere. The waiter is now answered with the
  errno.

Answering is preferred over requeueing: a deterministic handler failure
would otherwise be retried forever, and the guest is owed the errno rather
than silence.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant