Skip to main content

Overview

Domains are the primary namespace and isolation boundary in Cadence. Domain types define configuration, replication settings, and metadata for multi-tenant workflow execution. Source Location: common/types/shared.go

Core Domain Types

DomainInfo

Core domain information.
type DomainInfo struct {
    Name        string
    Status      *DomainStatus
    Description string
    OwnerEmail  string
    Data        map[string]string
    UUID        string
}
Name
string
required
Domain name (globally unique identifier)
Status
DomainStatus
required
Current status (Registered, Deprecated, Deleted)
Description
string
Human-readable domain description
OwnerEmail
string
required
Contact email for domain owner
Data
map[string]string
Arbitrary key-value metadata
UUID
string
System-generated unique identifier

DomainConfiguration

Domain configuration settings.
type DomainConfiguration struct {
    WorkflowExecutionRetentionPeriodInDays int32
    EmitMetric                             bool
    BadBinaries                            *BadBinaries
    HistoryArchivalStatus                  *ArchivalStatus
    HistoryArchivalURI                     string
    VisibilityArchivalStatus               *ArchivalStatus
    VisibilityArchivalURI                  string
    IsolationGroups                        *IsolationGroupConfiguration
    AsyncWorkflowConfig                    *AsyncWorkflowConfiguration
}
WorkflowExecutionRetentionPeriodInDays
int32
required
Number of days to retain closed workflow data (minimum: 1, maximum: domain-specific)
EmitMetric
boolean
Whether to emit domain-specific metrics
BadBinaries
BadBinaries
Blocked worker binary checksums
HistoryArchivalStatus
ArchivalStatus
Whether history archival is enabled (Disabled, Enabled)
HistoryArchivalURI
string
URI for history archival storage (e.g., “s3://my-bucket/history”)
VisibilityArchivalStatus
ArchivalStatus
Whether visibility archival is enabled
VisibilityArchivalURI
string
URI for visibility archival storage
IsolationGroups
IsolationGroupConfiguration
Configuration for task isolation groups
AsyncWorkflowConfig
AsyncWorkflowConfiguration
Configuration for async workflow execution

DomainReplicationConfiguration

Cross-cluster replication configuration.
type DomainReplicationConfiguration struct {
    ActiveClusterName string
    Clusters          []*ClusterReplicationConfiguration
}
ActiveClusterName
string
required
Name of the currently active cluster for this domain
Clusters
[]ClusterReplicationConfiguration
required
List of clusters where domain is replicated

ClusterReplicationConfiguration

Per-cluster replication settings.
type ClusterReplicationConfiguration struct {
    ClusterName string
}
ClusterName
string
required
Name of the cluster in the Cadence installation
Multi-Cluster Setup:
{
  "activeClusterName": "us-east-1",
  "clusters": [
    {"clusterName": "us-east-1"},
    {"clusterName": "us-west-2"},
    {"clusterName": "eu-west-1"}
  ]
}

Domain Status

DomainStatus

Enumeration of domain lifecycle states.
type DomainStatus int32

const (
    DomainStatusRegistered DomainStatus = iota
    DomainStatusDeprecated
    DomainStatusDeleted
)
Registered
int32
default:"0"
Domain is active and accepting workflows
Deprecated
int32
default:"1"
Domain is deprecated; new workflows cannot start but existing workflows continue
Deleted
int32
default:"2"
Domain is deleted; no operations allowed

Domain API Request Types

RegisterDomainRequest

Request to register a new domain.
type RegisterDomainRequest struct {
    Name                                   string
    Description                            string
    OwnerEmail                             string
    WorkflowExecutionRetentionPeriodInDays int32
    EmitMetric                             *bool
    Clusters                               []*ClusterReplicationConfiguration
    ActiveClusterName                      string
    Data                                   map[string]string
    SecurityToken                          string
    IsGlobalDomain                         bool
    HistoryArchivalStatus                  *ArchivalStatus
    HistoryArchivalURI                     string
    VisibilityArchivalStatus               *ArchivalStatus
    VisibilityArchivalURI                  string
}
Name
string
required
Unique domain name
Description
string
Domain description
OwnerEmail
string
required
Owner contact email
WorkflowExecutionRetentionPeriodInDays
int32
required
Retention period for closed workflows (1-30 days typical)
EmitMetric
boolean
Enable domain-specific metrics
Clusters
[]ClusterReplicationConfiguration
Clusters for global domain replication
ActiveClusterName
string
Active cluster for global domain
Data
map[string]string
Custom metadata key-value pairs
SecurityToken
string
Authorization token
IsGlobalDomain
boolean
Whether this is a global (multi-cluster) domain
HistoryArchivalStatus
ArchivalStatus
Enable history archival
HistoryArchivalURI
string
Storage URI for archived history
VisibilityArchivalStatus
ArchivalStatus
Enable visibility archival
VisibilityArchivalURI
string
Storage URI for archived visibility data
Example:
{
  "name": "production-orders",
  "description": "Production order processing workflows",
  "ownerEmail": "[email protected]",
  "workflowExecutionRetentionPeriodInDays": 7,
  "emitMetric": true,
  "historyArchivalStatus": "ENABLED",
  "historyArchivalURI": "s3://cadence-archives/production-orders/history"
}

DescribeDomainRequest

Request to describe a domain.
type DescribeDomainRequest struct {
    Name *string
    UUID *string
}
Name
string
Domain name (either Name or UUID required)
UUID
string
Domain UUID (either Name or UUID required)

DescribeDomainResponse

Response containing domain details.
type DescribeDomainResponse struct {
    DomainInfo               *DomainInfo
    Configuration            *DomainConfiguration
    ReplicationConfiguration *DomainReplicationConfiguration
    FailoverVersion          int64
    IsGlobalDomain           bool
}
DomainInfo
DomainInfo
Core domain information
Configuration
DomainConfiguration
Domain configuration settings
ReplicationConfiguration
DomainReplicationConfiguration
Replication settings for global domains
FailoverVersion
int64
Current failover version for conflict resolution
IsGlobalDomain
boolean
Whether this is a global domain

UpdateDomainRequest

Request to update domain configuration.
type UpdateDomainRequest struct {
    Name                                   string
    Description                            *string
    OwnerEmail                             *string
    Data                                   map[string]string
    WorkflowExecutionRetentionPeriodInDays *int32
    EmitMetric                             *bool
    BadBinaries                            *BadBinaries
    HistoryArchivalStatus                  *ArchivalStatus
    HistoryArchivalURI                     *string
    VisibilityArchivalStatus               *ArchivalStatus
    VisibilityArchivalURI                  *string
    ActiveClusterName                      *string
    Clusters                               []*ClusterReplicationConfiguration
    SecurityToken                          string
    DeleteBadBinary                        *string
    FailoverTimeoutInSeconds               *int32
}
Name
string
required
Domain name to update
Description
string
Updated description
OwnerEmail
string
Updated owner email
Data
map[string]string
Updated metadata (merges with existing)
WorkflowExecutionRetentionPeriodInDays
int32
Updated retention period
BadBinaries
BadBinaries
Add blocked worker binaries
DeleteBadBinary
string
Remove a blocked binary by checksum
ActiveClusterName
string
Change active cluster (triggers failover)
FailoverTimeoutInSeconds
int32
Timeout for graceful failover

UpdateDomainResponse

Response after updating domain.
type UpdateDomainResponse struct {
    DomainInfo               *DomainInfo
    Configuration            *DomainConfiguration
    ReplicationConfiguration *DomainReplicationConfiguration
    FailoverVersion          int64
    IsGlobalDomain           bool
}

DeprecateDomainRequest

Request to deprecate a domain.
type DeprecateDomainRequest struct {
    Name          string
    SecurityToken string
}
Name
string
required
Domain name to deprecate
SecurityToken
string
Authorization token

DeleteDomainRequest

Request to permanently delete a domain.
type DeleteDomainRequest struct {
    Name string
}
Name
string
required
Domain name to delete
Domain deletion is permanent and cannot be undone. All workflow data will be lost.

ListDomainsRequest

Request to list domains.
type ListDomainsRequest struct {
    PageSize      int32
    NextPageToken []byte
}
PageSize
int32
Number of domains per page (default: 100)
NextPageToken
[]byte
Pagination token from previous response

ListDomainsResponse

Response with list of domains.
type ListDomainsResponse struct {
    Domains       []*DescribeDomainResponse
    NextPageToken []byte
}
Domains
[]DescribeDomainResponse
List of domain descriptions
NextPageToken
[]byte
Token for next page, or empty if no more results

Domain Failover Types

FailoverDomainRequest

Request to failover a global domain to another cluster.
type FailoverDomainRequest struct {
    Name                     string
    ActiveClusterName        string
    FailoverTimeoutInSeconds *int32
}
Name
string
required
Global domain name
ActiveClusterName
string
required
Target cluster to become active
FailoverTimeoutInSeconds
int32
Graceful failover timeout (default: 0 for immediate failover)
Failover Process:
  1. Validates target cluster exists in domain configuration
  2. Increments failover version
  3. Updates active cluster name
  4. Replicates failover markers to all clusters
  5. Drains in-flight operations if graceful timeout specified

FailoverDomainResponse

Response after domain failover.
type FailoverDomainResponse struct {
    DomainInfo               *DomainInfo
    Configuration            *DomainConfiguration
    ReplicationConfiguration *DomainReplicationConfiguration
    FailoverVersion          int64
    IsGlobalDomain           bool
}
FailoverVersion
int64
New failover version after successful failover

ListFailoverHistoryRequest

Request failover history for a domain.
type ListFailoverHistoryRequest struct {
    Domain string
}
Domain
string
required
Domain name

ListFailoverHistoryResponse

Response with failover history.
type ListFailoverHistoryResponse struct {
    History []*FailoverEvent
}

FailoverEvent

Single failover event.
type FailoverEvent struct {
    FailoverVersion    int64
    Timestamp          *int64
    SourceCluster      string
    TargetCluster      string
    FailoverType       string
}
FailoverVersion
int64
Failover version
Timestamp
int64
When failover occurred (nanoseconds)
SourceCluster
string
Previous active cluster
TargetCluster
string
New active cluster
FailoverType
string
Type of failover (Manual, Automatic)

Bad Binary Management

BadBinaries

Collection of blocked worker binaries.
type BadBinaries struct {
    Binaries map[string]*BadBinaryInfo
}
Binaries
map[string]BadBinaryInfo
required
Map of binary checksum to info

BadBinaryInfo

Information about a blocked binary.
type BadBinaryInfo struct {
    Reason          string
    Operator        string
    CreatedTimeNano *int64
}
Reason
string
required
Why this binary is blocked
Operator
string
required
Who blocked this binary
CreatedTimeNano
int64
When binary was blocked (nanoseconds)
Use Cases:
  • Block buggy deployments
  • Prevent incompatible worker versions
  • Enforce compliance requirements
Example:
{
  "binaries": {
    "abc123def456": {
      "reason": "Causes data corruption in OrderWorkflow",
      "operator": "[email protected]",
      "createdTimeNano": 1704124800000000000
    }
  }
}

Archival Types

ArchivalStatus

Archival enabled/disabled status.
type ArchivalStatus int32

const (
    ArchivalStatusDisabled ArchivalStatus = iota
    ArchivalStatusEnabled
)
Disabled
int32
default:"0"
Archival is disabled
Enabled
int32
default:"1"
Archival is enabled

History Archival

Archives complete workflow event history:
  • Long-term storage for compliance
  • Retention beyond standard retention period
  • Search and retrieval capabilities
Supported URIs:
  • s3://bucket/prefix
  • gs://bucket/prefix
  • file:///path/to/directory

Visibility Archival

Archives workflow metadata for search:
  • Workflow ID, type, status
  • Start/close times
  • Search attributes
Enables extended retention of visibility data.

Isolation Groups

IsolationGroupConfiguration

Configuration for task routing isolation.
type IsolationGroupConfiguration struct {
    IsolationGroups []*IsolationGroupPartition
}

IsolationGroupPartition

Single isolation group definition.
type IsolationGroupPartition struct {
    Name  string
    State *IsolationGroupState
}
Name
string
required
Isolation group name
State
IsolationGroupState
required
Group state (Healthy, Drained)
Use Cases:
  • Zone-based routing (us-east-1a, us-east-1b)
  • Capability-based routing (gpu-workers, cpu-workers)
  • Tenant isolation
  • Blue/green deployments

Async Workflow Configuration

AsyncWorkflowConfiguration

Configuration for async workflow execution.
type AsyncWorkflowConfiguration struct {
    Enabled                bool
    PredefinedQueueName    string
    QueueType              string
    QueueConfig            *DataBlob
}
Enabled
boolean
required
Whether async execution is enabled
PredefinedQueueName
string
Name of predefined async queue
QueueType
string
Type of queue (kafka, sqs, etc.)
QueueConfig
DataBlob
Queue-specific configuration

Domain Errors

DomainAlreadyExistsError

Attempt to register a domain that already exists.
type DomainAlreadyExistsError struct {
    Message string
}

DomainNotActiveError

Operation on a domain that’s not active in current cluster.
type DomainNotActiveError struct {
    Message        string
    DomainName     string
    CurrentCluster string
    ActiveCluster  string
}
CurrentCluster
string
Cluster where request was received
ActiveCluster
string
Cluster where domain is currently active
Recovery: Redirect request to active cluster or trigger failover.

EntityNotExistsError

Domain does not exist.
type EntityNotExistsError struct {
    Message        string
    CurrentCluster string
    ActiveCluster  string
}

Best Practices

Domain Design

  1. Isolation Boundaries
    • One domain per application/team
    • Use domains for security isolation
    • Consider compliance requirements
  2. Naming Conventions
    • Use descriptive names: production-orders, staging-fulfillment
    • Include environment: dev-, staging-, prod-
    • Keep names URL-safe (no spaces or special characters)
  3. Retention Periods
    • Balance cost vs. compliance needs
    • Consider archival for long-term retention
    • Minimum 1 day, typical 7-30 days

Global Domains

  1. Multi-Cluster Setup
    • Deploy at least 2 clusters for redundancy
    • Configure all clusters before registering domain
    • Test failover procedures regularly
  2. Failover Strategy
    • Use graceful failover for planned maintenance
    • Monitor failover version for consistency
    • Document runbooks for emergency failover
  3. Replication Lag
    • Monitor cross-cluster replication lag
    • Consider lag when failing over
    • Use strong consistency reads when needed

Bad Binary Management

  1. Blocking Strategy
    • Block at domain level, not globally
    • Document reason and operator
    • Set up alerts for blocked binary usage attempts
  2. Unblocking
    • Use DeleteBadBinary in UpdateDomainRequest
    • Verify fix before unblocking
    • Communicate with affected teams

Archival

  1. Storage Planning
    • Estimate storage based on workflow count and history size
    • Configure lifecycle policies on storage
    • Monitor archival lag and failures
  2. URI Configuration
    • Use separate buckets for history and visibility
    • Include environment in path: s3://cadence/prod/domain-name/
    • Ensure proper IAM permissions

Isolation Groups

  1. Group Design
    • Align with infrastructure zones
    • Keep group count manageable (< 10 per domain)
    • Use consistent naming across domains
  2. Draining
    • Drain groups before maintenance
    • Monitor backlog during drain
    • Verify no workers polling before decommission

Monitoring & Operations

Key Metrics

  • domain.registration.count: Number of domains
  • domain.failover.latency: Failover duration
  • domain.replication.lag: Cross-cluster lag
  • domain.archival.failures: Archival error rate
  • domain.bad.binary.usage: Blocked binary attempts

Health Checks

  • Verify domain status is Registered
  • Check active cluster matches expected
  • Monitor retention period enforcement
  • Validate archival is working if enabled

Troubleshooting

DomainNotActiveError:
  1. Check current active cluster
  2. Verify cluster connectivity
  3. Consider failover if needed
Archival Failures:
  1. Check storage permissions
  2. Verify URI is accessible
  3. Monitor archival worker logs
Replication Lag:
  1. Check network connectivity between clusters
  2. Verify replication task processing
  3. Scale replication workers if needed

See Also

Build docs developers (and LLMs) love