diff --git a/internal/compatibility/proto/request.go b/internal/compatibility/proto/request.go index 6d07e79a2..20f0b5800 100644 --- a/internal/compatibility/proto/request.go +++ b/internal/compatibility/proto/request.go @@ -519,6 +519,7 @@ const ( DomainUpdateVisibilityArchivalURIField = "visibility_archival_uri" DomainUpdateActiveClusterNameField = "active_cluster_name" DomainUpdateClustersField = "clusters" + DomainUpdateActiveClustersField = "active_clusters" DomainUpdateDeleteBadBinaryField = "delete_bad_binary" DomainUpdateFailoverTimeoutField = "failover_timeout" ) @@ -583,6 +584,10 @@ func UpdateDomainRequest(t *shared.UpdateDomainRequest) *apiv1.UpdateDomainReque request.Clusters = ClusterReplicationConfigurationArray(replicationConfiguration.Clusters) fields = append(fields, DomainUpdateClustersField) } + if replicationConfiguration.ActiveClusters != nil { + request.ActiveClusters = ActiveClusters(replicationConfiguration.ActiveClusters) + fields = append(fields, DomainUpdateActiveClustersField) + } } if t.DeleteBadBinary != nil { request.DeleteBadBinary = *t.DeleteBadBinary diff --git a/internal/compatibility/proto/response.go b/internal/compatibility/proto/response.go index 776ba843e..8e7e2b927 100644 --- a/internal/compatibility/proto/response.go +++ b/internal/compatibility/proto/response.go @@ -62,6 +62,7 @@ func DescribeDomainResponse(t *shared.DescribeDomainResponse) *apiv1.DescribeDom if repl := t.ReplicationConfiguration; repl != nil { domain.ActiveClusterName = repl.GetActiveClusterName() domain.Clusters = ClusterReplicationConfigurationArray(repl.Clusters) + domain.ActiveClusters = ActiveClusters(repl.ActiveClusters) } return &apiv1.DescribeDomainResponse{Domain: &domain} } @@ -341,6 +342,7 @@ func UpdateDomainResponse(t *shared.UpdateDomainResponse) *apiv1.UpdateDomainRes if repl := t.ReplicationConfiguration; repl != nil { domain.ActiveClusterName = repl.GetActiveClusterName() domain.Clusters = ClusterReplicationConfigurationArray(repl.Clusters) + domain.ActiveClusters = ActiveClusters(repl.ActiveClusters) } return &apiv1.UpdateDomainResponse{ Domain: domain, diff --git a/internal/compatibility/proto/types.go b/internal/compatibility/proto/types.go index 9cdb9b779..a64d92a94 100644 --- a/internal/compatibility/proto/types.go +++ b/internal/compatibility/proto/types.go @@ -552,6 +552,7 @@ func DescribeDomainResponseDomain(t *shared.DescribeDomainResponse) *apiv1.Domai if repl := t.ReplicationConfiguration; repl != nil { domain.ActiveClusterName = repl.GetActiveClusterName() domain.Clusters = ClusterReplicationConfigurationArray(repl.Clusters) + domain.ActiveClusters = ActiveClusters(repl.ActiveClusters) } return &domain } @@ -695,3 +696,21 @@ func ActivityLocalDispatchInfoMap(t map[string]*shared.ActivityLocalDispatchInfo } return v } + +func ActiveClusters(ac *shared.ActiveClusters) *apiv1.ActiveClusters { + if ac == nil { + return nil + } + + regToCl := make(map[string]*apiv1.ActiveClusterInfo) + for reg, clusterInfo := range ac.ActiveClustersByRegion { + regToCl[reg] = &apiv1.ActiveClusterInfo{ + ActiveClusterName: clusterInfo.GetActiveClusterName(), + FailoverVersion: clusterInfo.GetFailoverVersion(), + } + } + + return &apiv1.ActiveClusters{ + RegionToCluster: regToCl, + } +} diff --git a/internal/compatibility/testdata/domain.go b/internal/compatibility/testdata/domain.go index 80a40e99a..20dbf42d1 100644 --- a/internal/compatibility/testdata/domain.go +++ b/internal/compatibility/testdata/domain.go @@ -81,6 +81,7 @@ var ( VisibilityArchivalUri: VisibilityArchivalURI, ActiveClusterName: ClusterName1, Clusters: ClusterReplicationConfigurationArray, + ActiveClusters: ActiveClusters, } ClusterReplicationConfiguration = apiv1.ClusterReplicationConfiguration{ ClusterName: ClusterName1, @@ -92,4 +93,16 @@ var ( "Region1": ClusterName1, "Region2": ClusterName2, } + ActiveClusters = &apiv1.ActiveClusters{ + RegionToCluster: map[string]*apiv1.ActiveClusterInfo{ + "Region1": &apiv1.ActiveClusterInfo{ + ActiveClusterName: ClusterName1, + FailoverVersion: 0, + }, + "Region2": &apiv1.ActiveClusterInfo{ + ActiveClusterName: ClusterName2, + FailoverVersion: 0, + }, + }, + } ) diff --git a/internal/compatibility/testdata/service.go b/internal/compatibility/testdata/service.go index 4d6379ba2..599de45bf 100644 --- a/internal/compatibility/testdata/service.go +++ b/internal/compatibility/testdata/service.go @@ -72,11 +72,29 @@ var ( VisibilityArchivalStatus: ArchivalStatus, VisibilityArchivalUri: VisibilityArchivalURI, ActiveClusterName: ClusterName1, + ActiveClusters: ActiveClusters, Clusters: ClusterReplicationConfigurationArray, SecurityToken: SecurityToken, DeleteBadBinary: DeleteBadBinary, FailoverTimeout: Duration1, - UpdateMask: &gogo.FieldMask{Paths: []string{"description", "owner_email", "data", "workflow_execution_retention_period", "bad_binaries", "history_archival_status", "history_archival_uri", "visibility_archival_status", "visibility_archival_uri", "active_cluster_name", "clusters", "delete_bad_binary", "failover_timeout"}}, + UpdateMask: &gogo.FieldMask{ + Paths: []string{ + "description", + "owner_email", + "data", + "workflow_execution_retention_period", + "bad_binaries", + "history_archival_status", + "history_archival_uri", + "visibility_archival_status", + "visibility_archival_uri", + "active_cluster_name", + "clusters", + "active_clusters", + "delete_bad_binary", + "failover_timeout", + }, + }, } UpdateDomainResponse = apiv1.UpdateDomainResponse{ Domain: &Domain, diff --git a/internal/compatibility/thrift/request.go b/internal/compatibility/thrift/request.go index 4ba9932f8..bea585712 100644 --- a/internal/compatibility/thrift/request.go +++ b/internal/compatibility/thrift/request.go @@ -509,6 +509,7 @@ const ( DomainUpdateVisibilityArchivalURIField = "visibility_archival_uri" DomainUpdateActiveClusterNameField = "active_cluster_name" DomainUpdateClustersField = "clusters" + DomainUpdateActiveClustersField = "active_clusters" DomainUpdateDeleteBadBinaryField = "delete_bad_binary" DomainUpdateFailoverTimeoutField = "failover_timeout" ) @@ -556,6 +557,9 @@ func UpdateDomainRequest(t *apiv1.UpdateDomainRequest) *shared.UpdateDomainReque if fs.isSet(DomainUpdateActiveClusterNameField) { request.ReplicationConfiguration.ActiveClusterName = &t.ActiveClusterName } + if fs.isSet(DomainUpdateActiveClustersField) { + request.ReplicationConfiguration.ActiveClusters = ActiveClusters(t.ActiveClusters) + } if fs.isSet(DomainUpdateClustersField) { request.ReplicationConfiguration.Clusters = ClusterReplicationConfigurationArray(t.Clusters) } diff --git a/internal/compatibility/thrift/response.go b/internal/compatibility/thrift/response.go index 558bbb48d..68d4a8434 100644 --- a/internal/compatibility/thrift/response.go +++ b/internal/compatibility/thrift/response.go @@ -60,6 +60,7 @@ func DescribeDomainResponse(t *apiv1.DescribeDomainResponse) *shared.DescribeDom ReplicationConfiguration: &shared.DomainReplicationConfiguration{ ActiveClusterName: &t.Domain.ActiveClusterName, Clusters: ClusterReplicationConfigurationArray(t.Domain.Clusters), + ActiveClusters: ActiveClusters(t.Domain.ActiveClusters), }, FailoverVersion: &t.Domain.FailoverVersion, IsGlobalDomain: &t.Domain.IsGlobalDomain, @@ -353,6 +354,7 @@ func UpdateDomainResponse(t *apiv1.UpdateDomainResponse) *shared.UpdateDomainRes ReplicationConfiguration: &shared.DomainReplicationConfiguration{ ActiveClusterName: &t.Domain.ActiveClusterName, Clusters: ClusterReplicationConfigurationArray(t.Domain.Clusters), + ActiveClusters: ActiveClusters(t.Domain.ActiveClusters), }, FailoverVersion: &t.Domain.FailoverVersion, IsGlobalDomain: &t.Domain.IsGlobalDomain, diff --git a/internal/compatibility/thrift/types.go b/internal/compatibility/thrift/types.go index 1dd8ec5b3..6f87e88a1 100644 --- a/internal/compatibility/thrift/types.go +++ b/internal/compatibility/thrift/types.go @@ -561,6 +561,7 @@ func DescribeDomainResponseDomain(t *apiv1.Domain) *shared.DescribeDomainRespons ReplicationConfiguration: &shared.DomainReplicationConfiguration{ ActiveClusterName: &t.ActiveClusterName, Clusters: ClusterReplicationConfigurationArray(t.Clusters), + ActiveClusters: ActiveClusters(t.ActiveClusters), }, FailoverVersion: &t.FailoverVersion, IsGlobalDomain: &t.IsGlobalDomain, @@ -706,3 +707,21 @@ func ActivityLocalDispatchInfoMap(t map[string]*apiv1.ActivityLocalDispatchInfo) } return v } + +func ActiveClusters(ac *apiv1.ActiveClusters) *shared.ActiveClusters { + if ac == nil { + return nil + } + + clByRegion := make(map[string]*shared.ActiveClusterInfo) + for region, clInfo := range ac.RegionToCluster { + clByRegion[region] = &shared.ActiveClusterInfo{ + ActiveClusterName: &clInfo.ActiveClusterName, + FailoverVersion: &clInfo.FailoverVersion, + } + } + + return &shared.ActiveClusters{ + ActiveClustersByRegion: clByRegion, + } +}