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

feat: Add docs about process isolation in Node SDK #11378

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
title: Process Isolation
Copy link
Member

Choose a reason for hiding this comment

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

m: I'm not sure if "Process" isolation is a good term for the heading. We worry about isolating certain jobs/tasks/requests within one process.

I'd rather call this page "Request Isolation" or more generally "Task Isolation". WDYT?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yeah, I was also not 100% sure about this. My first instinct was also to go with Request Isolation but this does not really cover e.g. isolation background jobs 🤔 but maybe request isolation is still more understandable 🤔

Copy link
Member

Choose a reason for hiding this comment

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

sounds good to me, at least better than process isolation.

Maybe another angle to this: What about "Data Isolation"? I mean generally this page explains how to isolate data within a unit of work (job/task/request).

description: "Learn more about how process isolation (or request isolation) works in the Sentry SDK."
supported:
- javascript.nextjs
- javascript.node
- javascript.connect
- javascript.express
- javascript.fastify
- javascript.hapi
- javascript.koa
- javascript.nestjs
- javascript.nuxt
- javascript.solidstart
- javascript.sveltekit
- javascript.astro
- javascript.remix
notSupported:
- javascript
---

In server-side environments, the <PlatformLink to='/enriching-events/scopes'>isolation scope</PlatformLink> is automatically forked around request boundaries. This means that each request will have its own isolation scope, and data set on the isolation scope will only apply to events captured during that request. This is done automatically by the SDK.

However, there are also other cases where you may want to have isolation, for example in background jobs or when you want to isolate a specific part of your code. In these cases, you can use `Sentry.withIsolationScope()` to create a new isolation scope that is valid inside of the callback you pass to it - see [Using withIsolationScope](../scopes/#using-withisolationscope).

The following example shows how you can use `withIsolationScope` to attach data for a specific job run:

```javascript
async function job(jobId) {
return Sentry.withIsolationScope(async () => {
// Only valid for events in this callback
Sentry.setTag("jobId", jobId);
await doSomething();
});
}
```
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,11 @@ In the following example we use <PlatformIdentifier name="with-scope" /> to atta
The scope inside the `withScope()` callback is only valid inside of the callback. Once the callback ends, the scope will be removed and no longer applied. The inner scope is only applied to events that are captured inside of the callback. `withScope()` will clone (or fork) the current scope, so that the current scope is not modified. This allows you to
more easily isolate pieces of context information to specific locations in your code or
even call <PlatformIdentifier name="clear" /> to briefly remove all context information.

<PlatformCategorySection supported={['server']}>
## Using `withIsolationScope`

`withIsolationScope` works fundamentally the same as `withScope`, but it will fork the isolation scope instead of the current scope. Generally, the isolation scope is meant to be forked less frequently than the current scope, and in most cases the SDK will handle this automatically for you. But in cases where you e.g. want to capture SDK events in a middleware (which happens before the request is processed and thus before the SDKs automatic handling), or if you want to isolate a non-request process (e.g. a background job), you can use `withIsolationScope` to create a new isolation scope that is only active for the duration of the callback:

<PlatformContent includePath="enriching-events/scopes/with-isolation-scope" />
</PlatformCategorySection>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
```javascript
Sentry.withIsolationScope(function () {
// This user & tag is set inside of this callback
Sentry.setUser({ id: "123" });
Sentry.setTag("my-tag", "my value");

// will be tagged with my-tag="my value" & user
Sentry.captureException(new Error("my error"));
});

// will not be tagged with my-tag & user
Sentry.captureException(new Error("my other error"));
```
Loading