Skip to content

Document Nexus with Global Namespaces (multi-region failover) for self-hosted#4906

Open
stephanos wants to merge 54 commits into
mainfrom
stephan/self-hosted-nexus-global-namespaces
Open

Document Nexus with Global Namespaces (multi-region failover) for self-hosted#4906
stephanos wants to merge 54 commits into
mainfrom
stephan/self-hosted-nexus-global-namespaces

Conversation

@stephanos

@stephanos stephanos commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

WISOTT

Documents how Nexus Operation completion callbacks behave when a Global
Namespace fails over between clusters, and the configuration required for
worker-target endpoints: endpoint registry parity, replicated Namespaces,
auto-forwarding, and a frontend httpPort plus advertised httpAddress on every
cluster. Reorders "Build and use Nexus Services" above the new section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
temporal-documentation Ready Ready Preview, Comment Jul 17, 2026 8:40pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📖 Docs PR preview links

stephanos and others added 2 commits July 17, 2026 07:49
- Capitalize Temporal proper nouns (Cluster, Namespace, Workflow, Worker,
  Task Queue, Endpoint, Nexus Operation) to match sibling multi-cluster docs.
- Replace em-dashes with plain punctuation; drop "e.g."/"via" per style guide.
- Add that caller and handler Namespaces can be active on different Clusters
  (per-Namespace active cluster), so cross-Cluster completion forwarding is a
  steady state, handled automatically once httpAddress is advertised.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Move the target-type scope into a note that also mentions external-target
  Endpoints (--target-url) for completeness.
- Vale pass: fix Worker casing, use contractions, split the long intro
  sentence, and use "automatic forwarding" instead of "auto-forwarding".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tion

- Split auto-forwarding into its two required parts: the static
  dcRedirectionPolicy (defaults to no redirection) and the per-Namespace
  system.enableNamespaceNotActiveAutoForwarding dynamic config.
- Trim the httpAddress step to the Nexus-specific delta (httpPort + httpAddress)
  and defer base clusterMetadata/rpcAddress setup to the Multi-Cluster
  Replication page it links to.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ion entry

- Link dcRedirectionPolicy to references/configuration, its canonical entry.
- Clarify that the per-Cluster clusterInformation entry already contains the
  replication fields (enabled, rpcName, rpcAddress, initialFailoverVersion) and
  that httpAddress is added to it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 4 commits July 17, 2026 11:36
Step 3 repeated the httpPort/httpAddress config already shown in Enable Nexus.
Reference that section and keep only the multi-cluster delta: set them on every
Cluster, plus the operator cluster upsert caveat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compress the 'What to expect on failover' list from five verbose bullets to
four, folding the async-replication caveat into the permanent-loss point.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 2 commits July 17, 2026 11:41
It conflated the dynamic cluster-connection flow with the static-config
instruction; httpAddress is set in static clusterInformation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Explain system.enableNamespaceNotActiveAutoForwarding (per-Namespace,
  defaults to true) and note it has the opposite default of dcRedirectionPolicy.
- Redraw the failover sequence so replication (not a failover-time handoff)
  carries state to Cluster B; remove the misleading A->B arrow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 2 commits July 17, 2026 11:47
- Remove semicolon from a sequence-diagram Note (mermaid treats ; as a
  statement separator, causing a render-time parse error).
- Reword enableNamespaceNotActiveAutoForwarding as 'make sure it isn't turned
  off' since it defaults to true.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the literal quotes and wrap the replication note across two lines so the
Note-over box doesn't overflow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 8 commits July 17, 2026 12:57
Nexus forwarding is on by default (enableNamespaceNotActiveAutoForwarding).
dcRedirectionPolicy is an optional client-API convenience, not a requirement
(default noop; not mandated by the multi-cluster docs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The CI mermaid linter parses headless (no DOM) and can't handle sequence
'box'. A flowchart with subgraphs shows the same Cluster boxes containing the
Namespaces and passes the linter.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 2 commits July 17, 2026 13:26
lint-mermaid runs mermaid.parse() headless, which fails on syntaxes that need
browser DOM APIs (e.g. sequence-diagram 'box': 'window is not defined'). Set up
a jsdom DOM before loading mermaid, and add jsdom as a devDependency (it was
only a transitive dep before).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Use the sequence diagram with Cluster boxes (now that the linter parses it).
- dcRedirectionPolicy: mention selected-apis-forwarding forwards
  StartNexusOperationExecution for standalone Nexus Operations.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
default via `system.enableNamespaceNotActiveAutoForwarding` (per-Namespace
dynamic config).

Optionally, set the server's

@stephanos stephanos Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I wasn't sure if this should be optional or recommended?

Replace the manual jsdom global-copy loop with a one-line
'import global-jsdom/register'. (jsdom-global is unmaintained and doesn't expose
the globals mermaid's box syntax needs; global-jsdom does.) Swap the direct
jsdom devDependency for global-jsdom.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread scripts/lint-mermaid.mjs
// Set up a browser-like DOM before loading mermaid. mermaid.parse() uses DOM
// APIs for some diagram syntaxes (for example a sequence diagram `box`) and
// otherwise fails headless with "window is not defined".
import 'global-jsdom/register';

@stephanos stephanos Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This was needed to make the mermaid chart above work; the box is crucial to convey the topology clearly.

stephanos and others added 5 commits July 17, 2026 13:34
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stephanos
stephanos marked this pull request as ready for review July 17, 2026 20:45
@stephanos
stephanos requested a review from a team as a code owner July 17, 2026 20:45
@stephanos
stephanos requested a review from bergundy July 17, 2026 20:45
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