Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

In-place Agones Upgrades: SDK Compatability #3767

Closed
2 tasks done
zmerlynn opened this issue Apr 16, 2024 · 2 comments
Closed
2 tasks done

In-place Agones Upgrades: SDK Compatability #3767

zmerlynn opened this issue Apr 16, 2024 · 2 comments
Assignees
Labels
kind/feature New features for Agones

Comments

@zmerlynn
Copy link
Collaborator

zmerlynn commented Apr 16, 2024

Note

Milestone of #3766, which we are seeking feedback on. We will move forward with pieces that seem non-contentious, though.

SDK Compatibility

This milestone satisfies the requirements in "SDK proto" and "Client SDKs" of #3766 - in particular, see the "SDK Compatibility Contract" mentioned there.

As of now, we have APIs in Stable and Alpha, but no Beta SDK protos - in fact, there is no Beta surface in the Client SDKs because Player Tracking, the first Alpha Client SDK feature, never graduated off Alpha. The next Client SDK feature to graduate is Counts & Lists - at which time, we will need to create a Beta Client SDK surface across the SDKs. This will be handled as part of Counts & Lists graduation, not as part of this project.

Because of this, there is no need to do any coding work towards Client SDK Compatibility if we accept the requirements in #3766.

Use Patch vs Update #

However, there is still a gotcha in how the sdk-server works today: We need to improve how sdk-server handles fields that are known by the remainder of the Agones Control Plane but are unknown by the sdk-server, which may happen in the event of newly lit feature gate paths. In particular, updates like this:

_, err = s.gameServerGetter.GameServers(s.namespace).Update(ctx, gsCopy, metav1.UpdateOptions{})

are likely to wipe out new API fields. We can use Patch() instead, by using optimistic locking in patch similar to contoller-runtime.


To close this issue requires:

  • Documentation:
    • Document SDK proto compatibility guarantees and deprecation policies.
    • Keep a chart of each API and its stability level and different versions so users can easily reference to see if there are changes. The chart can be started as of Agones 1.40 (we don't need to back date it, we haven't provided a guarantee in the past.)
  • Move sdk-server to Patch() instead of Update()
@markmandel
Copy link
Member

Can this be closed now?

@zmerlynn
Copy link
Collaborator Author

I think so!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/feature New features for Agones
Projects
None yet
Development

No branches or pull requests

3 participants