-
Notifications
You must be signed in to change notification settings - Fork 826
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
JSON Patch in GameServer Controller is Lossy on Int64 #3636
Comments
It's better we're on the same project that controller-runtime uses so we can take advantage of any upstream security and bugfixes that may occur - or have occurred already! Work on googleforgames#3636 - since if that issue gets fixed, it will get fixed here. Also, it ws a fun little fix to work on 😃
It's better we're on the same project that controller-runtime uses so we can take advantage of any upstream security and bugfixes that may occur - or have occurred already! Work on #3636 - since if that issue gets fixed, it will get fixed here. Also, it ws a fun little fix to work on 😃 Co-authored-by: Zach Loafman <[email protected]>
Filed gomodules/jsonpatch#39 |
'This issue is marked as Stale due to inactivity for more than 30 days. To avoid being marked as 'stale' please add 'awaiting-maintainer' label or add a comment. Thank you for your contributions ' |
Keeping this open to track the upstream work. |
Hello, |
From memory, it was not working with int64 max values at the time we tested it. Looking at the commit history, I'm not seeing anything that indicates a fix - but please correct me if we're wrong.
...and 39 commits ahead. So they diverged in implementation. It also made sense to align with controller-runtime. See implementing patch #3639 for more details. |
My bad, I wasn't testing it properly 😄 I will check the history of this issue to understand a bit more, will try to open a PR on the https://github.com/gomodules/jsonpatch |
Awesome. That'll be a good win for everyone! |
Opened an MR on the jsonpatch repo: gomodules/jsonpatch#40 |
TL;DR:
JSON does not support Int64 well. The current recommendation is that anyone using the
count
orcapacity
values should avoid using extremely large numbers.Issue with setting count or capacity for Counter to max(int64):
When the Counter
capacity
orcount
are set to max(int64) in the game server spec and runningkubectl create -f fleet.yaml
we get an error:spec.template.spec.counters.sessions.capacity: Invalid value: "number": spec.template.spec.counters.sessions.capacity in body must be of type integer: "number"
When the Counter
capacity
orcount
in the game server spec are close to, but not at, max(int64)kubectl create
does not error. However, when checking the details of the game server withkubectl describe
the values are truncated:becomes
Debugging:
@zmerlynn root-caused the issue #3608, and found that the source issue is with
jsonpatch
translating values to scientific notation. A different repo ran into the same error and has a longer description of the issue evanphx/json-patch#189. We're unable to switch to this repo because the fixed methodCreateMergePatch
just gives back bytes, but in tests, etc. we use the jsonpatch structures. This will likely need to be an upstream fix in gomodules/jsonpatch or kubernetes-sigs/json. The takeaway is that JSON does not support int64 well, and if the controller is having this many issues there are likely other issues that would crop up elsewhere in the code, and other languages would have yet another set of issues.The text was updated successfully, but these errors were encountered: