diff --git a/pkg/sdkserver/sdkserver.go b/pkg/sdkserver/sdkserver.go index dce1698e53..9ffe177d91 100644 --- a/pkg/sdkserver/sdkserver.go +++ b/pkg/sdkserver/sdkserver.go @@ -100,7 +100,6 @@ type SDKServer struct { gsReserveDuration *time.Duration gsPlayerCapacity int64 gsConnectedPlayers []string - cachedGameServer *sdk.GameServer } // NewSDKServer creates a SDKServer that sets up an @@ -491,17 +490,7 @@ func (s *SDKServer) GetGameServer(context.Context, *sdk.Empty) (*sdk.GameServer, if err != nil { return nil, err } - - s.cachedGameServer = convert(gs) - return s.cachedGameServer, nil -} - -func (s *SDKServer) getCachedGameServer() (*sdk.GameServer, error) { - if s.cachedGameServer != nil { - return s.cachedGameServer, nil - } - - return s.GetGameServer(context.Background(), &sdk.Empty{}) + return convert(gs), nil } // WatchGameServer sends events through the stream when changes occur to the @@ -511,15 +500,13 @@ func (s *SDKServer) WatchGameServer(_ *sdk.Empty, stream sdk.SDK_WatchGameServer s.streamMutex.Lock() if runtime.FeatureEnabled(runtime.FeatureSDKWatchSendOnExecute) { - gs, err := s.getCachedGameServer() + gs, err := s.GetGameServer(context.Background(), &sdk.Empty{}) if err != nil { - s.logger.WithError(errors.WithStack(err)).Error("error getting cached game server") return err } err = stream.Send(gs) if err != nil { - s.logger.WithError(errors.WithStack(err)).Error("error sending cached game server") return err } } diff --git a/pkg/sdkserver/sdkserver_test.go b/pkg/sdkserver/sdkserver_test.go index d848e4a482..bf9eb71352 100644 --- a/pkg/sdkserver/sdkserver_test.go +++ b/pkg/sdkserver/sdkserver_test.go @@ -705,12 +705,27 @@ func TestSDKServerWatchGameServerFeatureSDKWatchSendOnExecute(t *testing.T) { stream := newGameServerMockStream() asyncWatchGameServer(t, sc, stream) + assert.Nil(t, waitConnectedStreamCount(sc, 1)) assert.Equal(t, stream, sc.connectedStreams[0]) - assert.Equal(t, fixture.ObjectMeta.Name, sc.cachedGameServer.ObjectMeta.Name) - assert.Equal(t, fixture.ObjectMeta.Namespace, sc.cachedGameServer.ObjectMeta.Namespace) - assert.Equal(t, string(fixture.Status.State), sc.cachedGameServer.Status.State) + totalSendCalls := 0 + for i := 0; i < 2; i++ { + select { + case _, ok := <-stream.msgs: + if ok { + totalSendCalls++ + } else { + assert.Fail(t, "Channel is closed!") + } + default: + t.Log("No gameserver in the stream, moving on.") + } + } + + // if SDKWatchSendOnExecute feature is turned on, there are two stream.Send() calls should happen: + // one in sendGameServerUpdate, another one in WatchGameServer. + assert.Equal(t, 2, totalSendCalls) } func TestSDKServerSendGameServerUpdate(t *testing.T) { diff --git a/site/content/en/docs/Guides/feature-stages.md b/site/content/en/docs/Guides/feature-stages.md index 413a2aa182..934ffca3d4 100644 --- a/site/content/en/docs/Guides/feature-stages.md +++ b/site/content/en/docs/Guides/feature-stages.md @@ -42,7 +42,7 @@ The current set of `alpha` and `beta` feature gates are: | Example Gate (not in use) | `Example` | Disabled | None | 0.13.0 | | [Port Allocations to Multiple Containers]({{< ref "/docs/Reference/gameserver.md" >}}) | `ContainerPortAllocation` | Enabled | `Beta` | 1.7.0 | | [Player Tracking]({{< ref "/docs/Guides/player-tracking.md" >}}) | `PlayerTracking` | Disabled | `Alpha` | 1.6.0 | -| [SDK Send Game Server on Watch]({{< ref "/docs/Guides/Client SDKs/_index.md#watchgameserver-function-gameserver" >}}) | `SDKWatchSendOnExecute` | Disabled | `Alpha` | 1.7.0 | +| [SDK Send GameServer on Watch execution]({{< ref "/docs/Guides/Client SDKs/_index.md#watchgameserver-function-gameserver" >}}) | `SDKWatchSendOnExecute` | Disabled | `Alpha` | 1.7.0 | *Multicluster Allocation was started before this process was in place, and therefore does not have a feature gate and cannot be disabled. {{% /feature %}}