Skip to content

Commit

Permalink
SDK server update PlayerTracking to patch
Browse files Browse the repository at this point in the history
  • Loading branch information
igooch committed May 2, 2024
1 parent 92554b6 commit 0318be2
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 45 deletions.
22 changes: 16 additions & 6 deletions pkg/sdkserver/sdkserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -1383,12 +1383,17 @@ func (s *SDKServer) updatePlayerCapacity(ctx context.Context) error {
gsCopy.Status.Players.Capacity = s.gsPlayerCapacity
s.gsUpdateMutex.RUnlock()

gs, err = s.gameServerGetter.GameServers(s.namespace).Update(ctx, gsCopy, metav1.UpdateOptions{})
patch, err := gs.Patch(gsCopy)
if err != nil {
return err
}
s.recorder.Event(gs, corev1.EventTypeNormal, "PlayerCapacity", fmt.Sprintf("Set to %d", gs.Status.Players.Capacity))
return nil

gs, err = s.gameServerGetter.GameServers(s.namespace).Patch(ctx, gs.GetObjectMeta().GetName(), types.JSONPatchType, patch, metav1.PatchOptions{})
if err == nil {
s.recorder.Event(gs, corev1.EventTypeNormal, "PlayerCapacity", fmt.Sprintf("Set to %d", gs.Status.Players.Capacity))
}

return err
}

// updateConnectedPlayers updates the Player IDs and Count fields in the GameServer's Status.
Expand Down Expand Up @@ -1416,12 +1421,17 @@ func (s *SDKServer) updateConnectedPlayers(ctx context.Context) error {
return nil
}

gs, err = s.gameServerGetter.GameServers(s.namespace).Update(ctx, gsCopy, metav1.UpdateOptions{})
patch, err := gs.Patch(gsCopy)
if err != nil {
return err
}
s.recorder.Event(gs, corev1.EventTypeNormal, "PlayerCount", fmt.Sprintf("Set to %d", gs.Status.Players.Count))
return nil

gs, err = s.gameServerGetter.GameServers(s.namespace).Patch(ctx, gs.GetObjectMeta().GetName(), types.JSONPatchType, patch, metav1.PatchOptions{})
if err == nil {
s.recorder.Event(gs, corev1.EventTypeNormal, "PlayerCount", fmt.Sprintf("Set to %d", gs.Status.Players.Count))
}

return err
}

// NewSDKServerContext returns a Context that cancels when SIGTERM or os.Interrupt
Expand Down
81 changes: 42 additions & 39 deletions pkg/sdkserver/sdkserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1863,30 +1863,32 @@ func TestSDKServerPlayerCapacity(t *testing.T) {
sc, err := defaultSidecar(m)
require.NoError(t, err)

m.AgonesClient.AddReactor("list", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
gs := agonesv1.GameServer{
ObjectMeta: metav1.ObjectMeta{
Name: "test", Namespace: "default",
gs := agonesv1.GameServer{
ObjectMeta: metav1.ObjectMeta{
Name: "test", Namespace: "default",
},
Spec: agonesv1.GameServerSpec{
SdkServer: agonesv1.SdkServer{
LogLevel: "Debug",
},
Spec: agonesv1.GameServerSpec{
SdkServer: agonesv1.SdkServer{
LogLevel: "Debug",
},
Players: &agonesv1.PlayersSpec{
InitialCapacity: 10,
},
Players: &agonesv1.PlayersSpec{
InitialCapacity: 10,
},
}
gs.ApplyDefaults()
},
}
gs.ApplyDefaults()

m.AgonesClient.AddReactor("list", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
return true, &agonesv1.GameServerList{Items: []agonesv1.GameServer{*gs.DeepCopy()}}, nil
})

updated := make(chan int64, 10)
m.AgonesClient.AddReactor("update", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
ua := action.(k8stesting.UpdateAction)
gs := ua.GetObject().(*agonesv1.GameServer)
updated <- gs.Status.Players.Capacity
return true, gs, nil
m.AgonesClient.AddReactor("patch", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {

gsCopy := PatchGameServer(t, action, &gs)

updated <- gsCopy.Status.Players.Capacity
return true, gsCopy, nil
})

assert.NoError(t, sc.WaitForConnection(ctx))
Expand Down Expand Up @@ -1920,7 +1922,7 @@ func TestSDKServerPlayerCapacity(t *testing.T) {
case value := <-updated:
assert.Equal(t, int64(20), value)
case <-time.After(time.Minute):
assert.Fail(t, "Should have been updated")
assert.Fail(t, "Should have been patched")
}

agtesting.AssertEventContains(t, m.FakeRecorder.Events, "PlayerCapacity Set to 20")
Expand Down Expand Up @@ -2014,30 +2016,31 @@ func TestSDKServerPlayerConnectAndDisconnect(t *testing.T) {
require.NoError(t, err)

capacity := int64(3)
m.AgonesClient.AddReactor("list", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
gs := agonesv1.GameServer{
ObjectMeta: metav1.ObjectMeta{
Name: "test", Namespace: "default",
gs := agonesv1.GameServer{
ObjectMeta: metav1.ObjectMeta{
Name: "test", Namespace: "default",
},
Spec: agonesv1.GameServerSpec{
SdkServer: agonesv1.SdkServer{
LogLevel: "Debug",
},
Spec: agonesv1.GameServerSpec{
SdkServer: agonesv1.SdkServer{
LogLevel: "Debug",
},
// this is here to give us a reference, so we know when sc.Run() has completed.
Players: &agonesv1.PlayersSpec{
InitialCapacity: capacity,
},
// this is here to give us a reference, so we know when sc.Run() has completed.
Players: &agonesv1.PlayersSpec{
InitialCapacity: capacity,
},
}
gs.ApplyDefaults()
return true, &agonesv1.GameServerList{Items: []agonesv1.GameServer{gs}}, nil
},
}
gs.ApplyDefaults()

m.AgonesClient.AddReactor("list", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
return true, &agonesv1.GameServerList{Items: []agonesv1.GameServer{*gs.DeepCopy()}}, nil
})

updated := make(chan *agonesv1.PlayerStatus, 10)
m.AgonesClient.AddReactor("update", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
ua := action.(k8stesting.UpdateAction)
gs := ua.GetObject().(*agonesv1.GameServer)
updated <- gs.Status.Players
return true, gs, nil
m.AgonesClient.AddReactor("patch", "gameservers", func(action k8stesting.Action) (bool, runtime.Object, error) {
gsCopy := PatchGameServer(t, action, &gs)
updated <- gsCopy.Status.Players
return true, gsCopy, nil
})

assert.NoError(t, sc.WaitForConnection(ctx))
Expand Down

0 comments on commit 0318be2

Please sign in to comment.