Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(core): move plugin worker to socket #26558

Merged
merged 12 commits into from
Jun 26, 2024

Conversation

AgentEnder
Copy link
Member

@AgentEnder AgentEnder commented Jun 14, 2024

Current Behavior

Plugin isolation communicates with workers via built-in node IPC with forked processes. When doing this, the parent process will not exit until the child process has exited, in case more messages would be sent. This requires an explicit call to shut down the plugin workers.

We set this up as a process.on('exit') listener, to shutdown the workers whenever the main Nx process dies. This is "fine", but requires explicit calls to process.exit as node won't exit on its own otherwise.

Expected Behavior

To allow plugin workers to clean themselves up on exit, but not require explicit process.exit calls, we need to detach them from the main process and call unref. This only works when IPC is not being used. As such, we need a different way to communicate with the worker.

This PR updates the communication method to mirror the daemon, and communicate over a socket. Additionally, this PR enables isolation during the Nx repo's E2E tests.

Related Issue(s)

Fixes #

Copy link

vercel bot commented Jun 14, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Ignored Deployment
Name Status Preview Updated (UTC)
nx-dev ⬜️ Ignored (Inspect) Visit Preview Jun 26, 2024 5:12pm

@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch 7 times, most recently from c20872a to 0e6a210 Compare June 20, 2024 22:11
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch from 3b67a1c to 6d905f9 Compare June 24, 2024 21:41
@AgentEnder AgentEnder marked this pull request as ready for review June 24, 2024 22:07
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch 2 times, most recently from eba4ddb to 7488713 Compare June 25, 2024 13:09
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch from 7b6269e to fb7bd25 Compare June 25, 2024 18:24
@AgentEnder AgentEnder requested a review from a team as a code owner June 25, 2024 18:24
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch from fb7bd25 to 8338304 Compare June 25, 2024 20:02
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch 2 times, most recently from 71d4a67 to ee02f28 Compare June 25, 2024 21:22
@AgentEnder AgentEnder force-pushed the fix/move-plugin-worker-to-socket branch from ee02f28 to 4e9c414 Compare June 25, 2024 23:06
@FrozenPandaz FrozenPandaz merged commit a0e8f83 into master Jun 26, 2024
6 checks passed
@FrozenPandaz FrozenPandaz deleted the fix/move-plugin-worker-to-socket branch June 26, 2024 21:31
meeroslav pushed a commit that referenced this pull request Jun 27, 2024
<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
Plugin isolation communicates with workers via built-in node IPC with
forked processes. When doing this, the parent process will not exit
until the child process has exited, in case more messages would be sent.
This requires an explicit call to shut down the plugin workers.

We set this up as a `process.on('exit')` listener, to shutdown the
workers whenever the main Nx process dies. This is "fine", but requires
explicit calls to `process.exit` as node won't exit on its own
otherwise.

## Expected Behavior
To allow plugin workers to clean themselves up on exit, but not require
explicit `process.exit` calls, we need to detach them from the main
process and call `unref`. This only works when IPC is not being used. As
such, we need a different way to communicate with the worker.

This PR updates the communication method to mirror the daemon, and
communicate over a socket. Additionally, this PR enables isolation
during the Nx repo's E2E tests.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
Copy link

github-actions bot commented Jul 2, 2024

This pull request has already been merged/closed. If you experience issues related to these changes, please open a new issue referencing this pull request.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jul 2, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants