@@ -33,8 +33,10 @@ import (
3333 "sync/atomic"
3434 "time"
3535
36- "golang.org/x/sync/errgroup "
36+ "google. golang.org/grpc/metadata "
3737
38+ "go.temporal.io/server/client/history"
39+ "go.temporal.io/server/common/channel"
3840 "go.temporal.io/server/common/clock"
3941 "go.temporal.io/server/common/primitives"
4042 "go.temporal.io/server/common/util"
@@ -1950,62 +1952,84 @@ func (adh *AdminHandler) getWorkflowCompletionEvent(
19501952}
19511953
19521954func (adh * AdminHandler ) StreamWorkflowReplicationMessages (
1953- targetCluster adminservice.AdminService_StreamWorkflowReplicationMessagesServer ,
1955+ clientCluster adminservice.AdminService_StreamWorkflowReplicationMessagesServer ,
19541956) (retError error ) {
19551957 defer log .CapturePanic (adh .logger , & retError )
19561958
1957- ctx := targetCluster .Context ()
1958- sourceCluster , err := adh .historyClient .StreamWorkflowReplicationMessages (ctx )
1959+ ctxMetadata , ok := metadata .FromIncomingContext (clientCluster .Context ())
1960+ if ! ok {
1961+ return serviceerror .NewInvalidArgument ("missing cluster & shard ID metadata" )
1962+ }
1963+ _ , serverClusterShardID , err := history .DecodeClusterShardMD (ctxMetadata )
1964+ if err != nil {
1965+ return err
1966+ }
1967+
1968+ logger := log .With (adh .logger , tag .ShardID (serverClusterShardID .ShardID ))
1969+ logger .Info ("AdminStreamReplicationMessages started." )
1970+ defer logger .Info ("AdminStreamReplicationMessages stopped." )
1971+
1972+ ctx := clientCluster .Context ()
1973+ serverCluster , err := adh .historyClient .StreamWorkflowReplicationMessages (ctx )
19591974 if err != nil {
19601975 return err
19611976 }
19621977
1963- errGroup , ctx := errgroup .WithContext (ctx )
1964- errGroup .Go (func () error {
1965- for ctx .Err () == nil {
1966- req , err := targetCluster .Recv ()
1978+ shutdownChan := channel .NewShutdownOnce ()
1979+ go func () {
1980+ defer shutdownChan .Shutdown ()
1981+
1982+ for ! shutdownChan .IsShutdown () {
1983+ req , err := clientCluster .Recv ()
19671984 if err != nil {
1968- return err
1985+ logger .Info ("AdminStreamReplicationMessages client -> server encountered error" , tag .Error (err ))
1986+ return
19691987 }
19701988 switch attr := req .GetAttributes ().(type ) {
19711989 case * adminservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState :
1972- if err = sourceCluster .Send (& historyservice.StreamWorkflowReplicationMessagesRequest {
1990+ if err = serverCluster .Send (& historyservice.StreamWorkflowReplicationMessagesRequest {
19731991 Attributes : & historyservice.StreamWorkflowReplicationMessagesRequest_SyncReplicationState {
19741992 SyncReplicationState : attr .SyncReplicationState ,
19751993 },
19761994 }); err != nil {
1977- return err
1995+ logger .Info ("AdminStreamReplicationMessages client -> server encountered error" , tag .Error (err ))
1996+ return
19781997 }
19791998 default :
1980- return serviceerror .NewInternal (fmt .Sprintf (
1999+ logger . Info ( "AdminStreamReplicationMessages client -> server encountered error" , tag . Error ( serviceerror .NewInternal (fmt .Sprintf (
19812000 "StreamWorkflowReplicationMessages encountered unknown type: %T %v" , attr , attr ,
1982- ))
2001+ ))))
2002+ return
19832003 }
19842004 }
1985- return ctx .Err ()
1986- })
1987- errGroup .Go (func () error {
1988- for ctx .Err () == nil {
1989- resp , err := sourceCluster .Recv ()
2005+ }()
2006+ go func () {
2007+ defer shutdownChan .Shutdown ()
2008+
2009+ for ! shutdownChan .IsShutdown () {
2010+ resp , err := serverCluster .Recv ()
19902011 if err != nil {
1991- return err
2012+ logger .Info ("AdminStreamReplicationMessages server -> client encountered error" , tag .Error (err ))
2013+ return
19922014 }
19932015 switch attr := resp .GetAttributes ().(type ) {
19942016 case * historyservice.StreamWorkflowReplicationMessagesResponse_Messages :
1995- if err = targetCluster .Send (& adminservice.StreamWorkflowReplicationMessagesResponse {
2017+ if err = clientCluster .Send (& adminservice.StreamWorkflowReplicationMessagesResponse {
19962018 Attributes : & adminservice.StreamWorkflowReplicationMessagesResponse_Messages {
19972019 Messages : attr .Messages ,
19982020 },
19992021 }); err != nil {
2000- return err
2022+ logger .Info ("AdminStreamReplicationMessages server -> client encountered error" , tag .Error (err ))
2023+ return
20012024 }
20022025 default :
2003- return serviceerror .NewInternal (fmt .Sprintf (
2026+ logger . Info ( "AdminStreamReplicationMessages server -> client encountered error" , tag . Error ( serviceerror .NewInternal (fmt .Sprintf (
20042027 "StreamWorkflowReplicationMessages encountered unknown type: %T %v" , attr , attr ,
2005- ))
2028+ ))))
2029+ return
20062030 }
20072031 }
2008- return ctx . Err ()
2009- } )
2010- return errGroup . Wait ()
2032+ } ()
2033+ <- shutdownChan . Channel ( )
2034+ return nil
20112035}
0 commit comments