You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: MARKDOWN_PIPELINE.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -109,6 +109,7 @@ Each component maps to a strategy in `COMPONENT_REGISTRY` (in `scripts/mdx-to-md
109
109
|`SdkTabs` / `SdkTabs.<Lang>`|`sdk-tabs`| Same, with language labels (`DotNet` → **.NET**) |
110
110
|`CodeSnippet`|`code-snippet`| Fenced code block using the `language` prop |
111
111
|`CaptionedImage`, `EnlargeImage`, `Components.CaptionedImage`|`captioned-image`|``|
112
+
| YouTube/`<iframe>` embeds (often in a styled `<div>`) | strip | Removed; keep a markdown Watch link in surrounding tip/prose for LLMs |
112
113
|`PhotoCarousel`|`photo-carousel`| One `` per entry in the `images`/`captions` arrays |
113
114
|`CallToAction`|`call-to-action`|`- [h3 title](href): p description`|
114
115
|`ReleaseNoteHeader`|`release-note-header`|`> **Public Preview** — Go, Java…` availability note + body blockquote. The self-closing form (`<ReleaseNoteHeader … />`) emits just the note and leaves the page body intact. |
Copy file name to clipboardExpand all lines: docs/cloud/high-availability/architecture-patterns.mdx
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -189,7 +189,7 @@ These patterns work across two cloud regions, which could be in the same cloud p
189
189
| Pattern | Where Workers run | Best for and benefits | Major tradeoffs |
190
190
| --- | --- | --- | --- |
191
191
|**[Active/Passive](#active-cold)**| One region at a time | Easy initial deployment; acts like a single region with no special setup | Failing over Workers is your responsibility; highest recovery time of the three |
192
-
|**[Active/Hot-Passive](#active-hot)**| Both regions; secondary on warm standby | Low RTO with strict single-region behavior; fast Worker failover that is guaranteed to act like a single region| More configuration and the cost of a full standby fleet |
192
+
|**[Active/Hot-Passive](#active-hot)**| Both regions; secondary on warm standby | Low RTO with all task processing in the active region; fast Worker failover with no cold start| More configuration and the cost of a full standby fleet |
193
193
|**[Active/Active](#active-active)**| All regions, all processing Workflows | Low RTO with Workers active in every region; fast failover that uses fleet capacity instead of a standby fleet | Cross-region requests add Workflow latency; external systems need a cross-region consistency story |
194
194
195
195
## Active/Passive {/* #active-cold */}
@@ -299,7 +299,7 @@ Keep these in mind when setting up Active/Passive:
299
299
-**Failing over the Workers is the operator's responsibility.** The Namespace fails over automatically, but bringing up the Workers in the secondary region is up to you. Plan for these sub-considerations:
300
300
-**How do you detect an outage and decide to fail over?** Define the failover conditions and the signals (alerts, health checks) that trigger them. Because Workflows make no progress until you detect the outage and respond, detection is on the critical path of your recovery time. To monitor for an outage and a failover, see [Detect a failover or an outage](/cloud/high-availability/monitoring#detect-failover-or-outage).
301
301
-**How do you scale up the Workers?** Bring up the secondary-region fleet, ideally with tested automation, and scale down the primary region's fleet so Workers run in only one region at a time.
302
-
-**Do you need to enforce single-region processing?** This pattern relies on the operator to keep Workers in one region. To have Temporal enforce single-region processing instead, use the [Active/Hot-Passive](#active-hot) pattern.
302
+
-**Do you need to enforce single-region task processing?** This pattern relies on the operator to keep Workers in one region. To have Temporal enforce that Workflow and Activity Tasks are processed only in the active region, use the [Active/Hot-Passive](#active-hot) pattern.
303
303
304
304
```mermaid
305
305
flowchart LR
@@ -444,7 +444,7 @@ Here's how each component behaves during normal operation and after a failover:
444
444
| --- | --- | --- |
445
445
|**Workers**| Run in both regions. The primary region's Workers are active and process all Workflows; the secondary region's Workers stay connected and warm on standby, doing no work. Forwarding is disabled for Worker polls, so the standby fleet adds no cross-region overhead. | The secondary region's standby Workers — already connected and warm — begin processing immediately. No cold start and no DNS wait. |
446
446
|**Namespace**| Active replica in the primary region; passive replica in the secondary region, continuously receiving replicated Workflow state. | The Namespace and Workers fail over together, automatically: Temporal Cloud promotes the secondary replica to active. |
447
-
|**Workflow starters and Clients**| Run in both regions alongside the Workers. | No changes needed — already running in both regions. |
447
+
|**Workflow starters and Clients**| Run in both regions alongside the Workers. Disabling forwarding does not apply to them: their requests, such as Start Workflow, Signal, and Query, are still forwarded from the secondary region to the active region and succeed. | No changes needed — already running in both regions. |
448
448
|**Codec Servers and proxies**| Run in both regions continuously, not just after a failover. | No changes needed — already running in the secondary region. |
449
449
|**Databases and queues**| Workers in each region typically read and write only their local, active copy. | Promote the secondary region's copy to active, if needed, so the now-active Workers can read and write it. |
450
450
@@ -459,7 +459,7 @@ Active/Hot-Passive trades steady-state cost for a faster, more predictable failo
459
459
-**Lowest recovery time, tied with Active/Active.**
460
460
- The secondary-region Workers are already connected and warm, so failover involves no cold start. Because the standby fleet is already sized for full load, it also needs no scale-up.
461
461
-**Low latency during normal operation.**
462
-
- Tasks are processed only in the active region, with no cross-region forwarding.
462
+
-Workflow and Activity Tasks are processed only in the active region, with no cross-region forwarding of Worker polls. Client requests that originate in the secondary region are still forwarded, and pay the cross-region hop.
463
463
464
464
### Tradeoffs {/* #active-hot-tradeoffs */}
465
465
@@ -473,6 +473,7 @@ Keep this in mind when setting up Active/Hot-Passive:
473
473
474
474
-**Use Regional or VPC Endpoints and disable forwarding.**
475
475
- Connect each Worker fleet through its region's [Regional Endpoint](/cloud/high-availability/ha-connectivity#regional-endpoint) (or VPC Endpoint) and [disable forwarding](/cloud/high-availability/enable#change-forwarding-behavior) for Worker polls. Using the Namespace Endpoint by mistake routes the standby Workers to the active region and defeats the pattern.
476
+
-**Disabling forwarding applies to Worker polls only.** Client requests, such as Start Workflow, Signal, Query, Cancel, and Terminate, are always forwarded to the active region. A Workflow starter in the secondary region keeps working, and the Workflows it starts are processed by the active region's Workers. For the full list of APIs that keep forwarding, see [Client requests are forwarded regardless of this setting](/cloud/high-availability/enable#client-requests-still-forwarded).
Copy file name to clipboardExpand all lines: docs/cloud/high-availability/enable.mdx
+18-4Lines changed: 18 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -129,23 +129,37 @@ You will receive an email alert once your Namespace is ready for use.
129
129
130
130
## Change the forwarding behavior {/* #change-forwarding-behavior */}
131
131
132
-
Requests that reach the passive replica can be [forwarded](/cloud/high-availability/#request-forwarding) to the active region, and responses sent back to the Worker or Client. The `disablePassivePollerForwarding` Namespace setting controls this behavior for Worker poll traffic.
132
+
Requests that reach the passive replica can be [forwarded](/cloud/high-availability/#request-forwarding) to the active region, and responses sent back to the Worker or Client. The `disablePassivePollerForwarding` Namespace setting controls this behavior for Worker poll traffic only.
133
133
134
134
With `disablePassivePollerForwarding` enabled, Worker polls that reach a passive replica are not forwarded, and these Workers do not execute Workflows or Activities. Workers connected to such a passive replica receive a `NamespaceNotActive` error on poll requests. These Workers stay connected and will start executing Workflows and Activities if the replica becomes active.
135
135
136
-
Client APIs (Start, Signal, Cancel, Terminate, Query, and the equivalent Activity APIs) are forwarded to the active region regardless of this setting, with responses sent back to the Client.
137
-
138
136
Same-region replicas are not affected by this setting.
139
137
140
138
To deploy Worker fleets in both regions that stay on standby in the passive region until failover, see [Active/Hot-Passive](/cloud/high-availability/architecture-patterns#active-hot).
141
139
140
+
Set `disablePassivePollerForwarding` through the [Cloud Ops API](/ops), the [cloud-api SDK](https://github.com/temporalio/cloud-sdk-go), or the [`temporal cloud` CLI extension](/cli/cloud), using one of the recipes in this section.
141
+
142
142
:::info
143
143
144
144
To see which endpoints route to which replica, see [How requests reach the replica](/cloud/high-availability/ha-connectivity#how-requests-reach-the-replica).
145
145
146
146
:::
147
147
148
-
`disablePassivePollerForwarding` can be set through the [Cloud Ops API](/ops), the [cloud-api SDK](https://github.com/temporalio/cloud-sdk-go), or the [`temporal cloud` CLI extension](/cli/cloud). Use one of the recipes below.
148
+
### Client requests are forwarded regardless of this setting {/* #client-requests-still-forwarded */}
149
+
150
+
`disablePassivePollerForwarding` stops Worker polls. It does not stop Client requests. The following APIs are forwarded from the passive replica to the active region whether or not the setting is enabled, with responses returned to the Client:
For the current list, see [`selectedAPIsForwardingRedirectionPolicyWhitelistedAPIs`](https://github.com/temporalio/temporal/blob/main/common/rpc/interceptor/dc_redirection_policy.go#L59-L71) in the Temporal Server source.
159
+
160
+
A Client that reaches the passive replica, for example through the passive region's Regional Endpoint, keeps working while the setting is enabled: it can start Workflows, send Signals, and run Queries successfully. Workers in the active region process the resulting Workflow and Activity Tasks, because the passive region's Workers receive none.
161
+
162
+
Plan for this if you disable forwarding to keep a region's traffic out of the active region. The setting stops that region's Workers from processing tasks. It does not stop Workflow starters, Signal senders, or other Clients in that region from reaching the Namespace.
149
163
150
164
### Set the forwarding behavior with the `temporal cloud` CLI {/* #set-forwarding-cli */}
Copy file name to clipboardExpand all lines: docs/cloud/high-availability/ha-connectivity.mdx
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -88,6 +88,7 @@ A request can reach the passive replica in three ways:
88
88
If #1 completes before #2, a Worker that was connected to the former active before the failover will stay connected to it even after it becomes the replica. The Worker will change to point at the new active when the DNS changes propagate and the Client re-resolves DNS (typically 30 seconds, though up to 5 minutes, bounded by Temporal Cloud's maximum connection lifetime).
89
89
90
90
By default, Temporal Cloud transparently forwards any request that reaches the passive replica to the active region, and the response back.
91
+
You can turn forwarding off for Worker polls, but Client requests such as Start Workflow, Signal, and Query are always forwarded.
91
92
92
93
To learn what forwarding does, see [Request forwarding](/cloud/high-availability/#request-forwarding).
Copy file name to clipboardExpand all lines: docs/cloud/high-availability/index.mdx
+5-1Lines changed: 5 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -101,9 +101,13 @@ When a request reaches the passive replica — for example, through the passive
101
101
102
102
Forwarding adds a cross-region hop, so requests that travel through the passive replica complete with higher average latency than requests that reach the active replica directly.
103
103
104
+
You can turn off forwarding for Worker poll requests, which keeps the passive region's Workers from processing tasks. Client requests such as Start Workflow, Signal, Query, Cancel, and Terminate are always forwarded, so a Client that reaches the passive replica keeps working either way.
105
+
104
106
To route Workers to the passive region's replica, see [How requests reach the replica](/cloud/high-availability/ha-connectivity#how-requests-reach-the-replica).
105
107
106
-
To disable passive region replica forwarding, see [Change the forwarding behavior](/cloud/high-availability/enable#change-forwarding-behavior).
108
+
To stop forwarding Worker polls that reach the passive replica, see [Change the forwarding behavior](/cloud/high-availability/enable#change-forwarding-behavior).
109
+
110
+
To see which Client requests keep forwarding either way, see [Client requests are forwarded regardless of this setting](/cloud/high-availability/enable#client-requests-still-forwarded).
107
111
108
112
To run Worker fleets in both regions that rely on this forwarding, see [Active/Active](/cloud/high-availability/architecture-patterns#active-active).
Copy file name to clipboardExpand all lines: docs/design-patterns/retry-metrics.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -287,9 +287,9 @@ export async function monitoredRetryWorkflow(endpoint: string): Promise<string>
287
287
</TabItem>
288
288
</Tabs>
289
289
290
-
### Add dimension labels to the metric
290
+
### Add dimension tags to the metric
291
291
292
-
Add labels (tags) to the metric to identify which Activity type, endpoint, or Workflow is producing the high attempt counts.
292
+
Add tags to the metric to identify which Activity type, endpoint, or Workflow is producing the high attempt counts.
293
293
This makes the metric actionable in dashboards and alerts.
294
294
295
295
<TabsgroupId="language"queryString>
@@ -356,7 +356,7 @@ if (ctx.info.attempt > ALERT_THRESHOLD) {
356
356
357
357
-**Choose a threshold above normal transient noise.** If your downstream system occasionally has 1–2 retry attempts under normal conditions, set the threshold at 5 or 10 so the metric only fires for genuinely sustained failures.
358
358
-**Emit on every attempt above the threshold, not only once.** Incrementing the counter on each high-attempt invocation allows alerting systems to detect both the onset and the duration of a problem by watching the counter rate.
359
-
-**Use the SDK metrics scope, not a third-party library.** The SDK scope integrates with your Worker's existing metrics pipeline and adds default labels such as namespace and task queue automatically.
359
+
-**Use the SDK metrics scope, not a third-party library.** The SDK scope integrates with your Worker's existing metrics pipeline and adds default tags such as namespace and task queue automatically.
360
360
-**Set up rate-based alerts, not count-based.** A count alert requires resetting or remembering the baseline. A rate alert (e.g., "more than 3 increments per minute") fires when the problem is active and clears when it resolves.
361
361
-**Combine with Fast/Slow Retries.** Emit the metric in the slow-phase Activity of a [Fast/Slow Retries](/design-patterns/fast-slow-retries) pattern to alert when the Workflow has been in the slow phase long enough to be a concern.
Copy file name to clipboardExpand all lines: docs/develop/go/workflows/selectors.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -101,7 +101,7 @@ If multiple items are available, the order of matching is not defined.
101
101
102
102
An important use case of futures is setting up a race between a timer and a pending activity, effectively adding a "soft" timeout that doesn't result in any errors or retries of that activity.
103
103
104
-
For example, [the Timer sample](https://github.com/temporalio/samples-go/blob/master/timer) shows how you can write a long running order processing operation where:
104
+
For example, [the Timer sample](https://github.com/temporalio/samples-go/tree/main/timer) shows how you can write a long running order processing operation where:
105
105
106
106
- if processing takes too long, we send out a notification email to user about the delay, but we won't cancel the operation
107
107
- if the operation finishes before the timer fires, then we want to cancel the timer.
0 commit comments