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
Marshal MicroTime to json and proto at the same precision #111936
Marshal MicroTime to json and proto at the same precision #111936
Conversation
Please note that we're already in Test Freeze for the Fast forwards are scheduled to happen every 6 hours, whereas the most recent run was: Fri Aug 19 13:42:37 UTC 2022. |
Hi @haoruan. Thanks for your PR. I'm waiting for a kubernetes member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
This PR may require API review. If so, when the changes are ready, complete the pre-review checklist and request an API review. Status of requested reviews is tracked in the API Review project. |
/sig api-machinery |
/cc @liggitt |
/ok-to-test |
/retest |
@liggitt PTAL :) |
/lgtm I updated the release note with more details for users. The fix looks correct to me, and because the truncation happens on both marshal and unmarshal, it handles already-persisted data that incorrectly kept nanosecond-level precision gracefully. I'd like a second set of eyes on this ahead of merge, just to double check my assertion about compatibility. I think we should probably backport this as well. cc @kubernetes/api-reviewers |
/hold for second ack from API reviewer |
We should backport this as far as we can. I'm surprised it hasn't caused major problems. |
Thinking through all combinations of old/new proto clients, old/new servers, and good/bad existing data, I think we have one remaining gap:
Before changing serialization such that proto clients will drop nanoseconds, we need to make sure older servers will tolerate this. |
I think most components have not switched to the new Events API and are still using core/v1 Events, so are not hitting the stricter |
cc @dgrisonnet for visibility to this issue that needs resolving prior to switching more components to the new Events API |
I opened #112183 to tolerate this, which we can backport independent of this serialization change. |
Other than the test gap noted, this looks correct to me. I prefer to merge and backport |
d81aa4e
to
7aa80ad
Compare
#112183 is merged and picked back to 1.22+ /lgtm After this merges to master, go ahead and open picks of this change to 1.23+ and we can figure out the timing we want to merge them to release branches |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: haoruan, liggitt The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Thanks, opened picks to 1.23-1.25 |
…936-upstream-release-1.25 Automated cherry pick of #111936: Marshal MicroTime to json and proto at the same precision
…936-upstream-release-1.24 Automated cherry pick of #111936: Marshal MicroTime to json and proto at the same precision
…936-upstream-release-1.23 Automated cherry pick of #111936: Marshal MicroTime to json and proto at the same precision
…`v0.14.1` (#7248) * Update `k8s.io/*` to `v0.26.0` * Update `sigs.k8s.io/controller-runtime` to `v0.14.1` * Set `RecoverPanic` globally for the manager of `controller-manager` controllers * Set `RecoverPanic` globally for the manager of `gardenlet` controllers * Set `RecoverPanic` globally for the manager of `operator` controllers * Set `RecoverPanic` globally for the manager of `resource-manager` controllers * Set `RecoverPanic` globally for the manager of `scheduler` controllers * Set `RecoverPanic` globally in manager options for extension controllers * Change RecoverPanic bool to bool pointer for other controllers * Run `make generate` * Set `AllowInvalidLabelValueInSelector` to true in LabelSelectorValidationOptions for backwards compatibility See kubernetes/kubernetes#113699 for more details * Drop `Not` predicate util function in favor of controller-runtime `predicate.Not` * Drop `NewClientWithFieldSelectorSupport` function in favor of controller-runtime `WithIndex` function kubernetes-sigs/controller-runtime/pull/2025 * Use `Build()` function for all controllers * Use Subresource client for `shoots/binding` and drop generated clientset * Use Subresource client for `shoots/adminkubeconfig` and drop generated clientset * Use Status() client for Status Ref: kubernetes-sigs/controller-runtime#2072 * Adapt unit tests with mock StatusWriter * Add "ValidatingAdmissionPolicy" to default admission plugins * Adapt changes related to removed fields in kube-proxy config * Add unit test cases for "#IsAdmissionPluginSupported" function * Update envtest version * Return error from `informer.AddEventHandler` * Copy onsi/gomega/format package also to gomegacheck testdata * Address PR review feedback * Vendor current `etcd-druid` master * Use `builder.Watches()` wherever possible * Call `etcdOptions.Complete()` for gardener apiserver config etcd-encryption is supported out-of-the-box now. ref: kubernetes/kubernetes#112789 * Use Subresource client for `serviceaccounts/token` wherever possible * Update `ahmetb/gen-crd-api-reference-docs` to `0.3.0` * Update `sigs.k8s.io/controller-tools` to `v0.11.0` Update to `v0.11.1` once kubernetes/kubernetes/pull/114617 is released. In k8s v0.26.0 the CRD generation is broken. * Remove unneeded dependencies for `gardener-scheduler` from skaffold.yaml * Hardcode `RecoverPanic` to true for extensions controller * Use `k8s.io/apimachinery/pkg/util/sets` and drop copied packages * Drop ready check for garden informer sync for gardenlet Adding ready check to manager is not possible after it's started, since controller-runtime, `v0.11.0`. However the check was broken, and it is now fixed in kubernetes-sigs/controller-runtime#2090, so we have to drop this. * Adapt `provider-local` webhook * Address PR review feedback * Fix panic in ManagedSeed controller Contexts: from this PR, we're not setting RecoverPanic to true in tests * Vendor `etcd-druid` `v0.15.3` * Update `k8s.io/*` and `controller-runtime` k8s.io/* - 0.26.0=>0.26.1 controller-tools - 0.11.0=>0.11.1 * Run `make generate` * Rebase * Address PR review feedback * Fix failing test * Adapt `highavailabilityconfig` webhook integration test `autoscaling/v2beta2.HorizontalPodAutoscaler` is removed in v1.26. Ref: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-26 * Use `apiutil.NewDynamicRESTMapper` for Manager cache in tests Co-authored-by: Rafael Franzke <rafael.franzke@sap.com> * Don't set `RecoverPanic` for os extensions in AddToManager This is not required since we call `mgrOpts.Options()` here : https://github.com/gardener/gardener/blob/c9cb564d1adad0a1ecf9d44f23fb249bcf946a79/extensions/pkg/controller/operatingsystemconfig/oscommon/app/app.go#L88 * Truncate time in test to microsecond precision Ref: kubernetes/kubernetes#111936 * Rebase --------- Co-authored-by: Rafael Franzke <rafael.franzke@sap.com>
…`v0.14.1` (gardener#7248) * Update `k8s.io/*` to `v0.26.0` * Update `sigs.k8s.io/controller-runtime` to `v0.14.1` * Set `RecoverPanic` globally for the manager of `controller-manager` controllers * Set `RecoverPanic` globally for the manager of `gardenlet` controllers * Set `RecoverPanic` globally for the manager of `operator` controllers * Set `RecoverPanic` globally for the manager of `resource-manager` controllers * Set `RecoverPanic` globally for the manager of `scheduler` controllers * Set `RecoverPanic` globally in manager options for extension controllers * Change RecoverPanic bool to bool pointer for other controllers * Run `make generate` * Set `AllowInvalidLabelValueInSelector` to true in LabelSelectorValidationOptions for backwards compatibility See kubernetes/kubernetes#113699 for more details * Drop `Not` predicate util function in favor of controller-runtime `predicate.Not` * Drop `NewClientWithFieldSelectorSupport` function in favor of controller-runtime `WithIndex` function kubernetes-sigs/controller-runtime/pull/2025 * Use `Build()` function for all controllers * Use Subresource client for `shoots/binding` and drop generated clientset * Use Subresource client for `shoots/adminkubeconfig` and drop generated clientset * Use Status() client for Status Ref: kubernetes-sigs/controller-runtime#2072 * Adapt unit tests with mock StatusWriter * Add "ValidatingAdmissionPolicy" to default admission plugins * Adapt changes related to removed fields in kube-proxy config * Add unit test cases for "#IsAdmissionPluginSupported" function * Update envtest version * Return error from `informer.AddEventHandler` * Copy onsi/gomega/format package also to gomegacheck testdata * Address PR review feedback * Vendor current `etcd-druid` master * Use `builder.Watches()` wherever possible * Call `etcdOptions.Complete()` for gardener apiserver config etcd-encryption is supported out-of-the-box now. ref: kubernetes/kubernetes#112789 * Use Subresource client for `serviceaccounts/token` wherever possible * Update `ahmetb/gen-crd-api-reference-docs` to `0.3.0` * Update `sigs.k8s.io/controller-tools` to `v0.11.0` Update to `v0.11.1` once kubernetes/kubernetes/pull/114617 is released. In k8s v0.26.0 the CRD generation is broken. * Remove unneeded dependencies for `gardener-scheduler` from skaffold.yaml * Hardcode `RecoverPanic` to true for extensions controller * Use `k8s.io/apimachinery/pkg/util/sets` and drop copied packages * Drop ready check for garden informer sync for gardenlet Adding ready check to manager is not possible after it's started, since controller-runtime, `v0.11.0`. However the check was broken, and it is now fixed in kubernetes-sigs/controller-runtime#2090, so we have to drop this. * Adapt `provider-local` webhook * Address PR review feedback * Fix panic in ManagedSeed controller Contexts: from this PR, we're not setting RecoverPanic to true in tests * Vendor `etcd-druid` `v0.15.3` * Update `k8s.io/*` and `controller-runtime` k8s.io/* - 0.26.0=>0.26.1 controller-tools - 0.11.0=>0.11.1 * Run `make generate` * Rebase * Address PR review feedback * Fix failing test * Adapt `highavailabilityconfig` webhook integration test `autoscaling/v2beta2.HorizontalPodAutoscaler` is removed in v1.26. Ref: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-26 * Use `apiutil.NewDynamicRESTMapper` for Manager cache in tests Co-authored-by: Rafael Franzke <rafael.franzke@sap.com> * Don't set `RecoverPanic` for os extensions in AddToManager This is not required since we call `mgrOpts.Options()` here : https://github.com/gardener/gardener/blob/c9cb564d1adad0a1ecf9d44f23fb249bcf946a79/extensions/pkg/controller/operatingsystemconfig/oscommon/app/app.go#L88 * Truncate time in test to microsecond precision Ref: kubernetes/kubernetes#111936 * Rebase --------- Co-authored-by: Rafael Franzke <rafael.franzke@sap.com>
What type of PR is this?
/kind bug
What this PR does / why we need it:
Truncate the nanosecond to microsecond when marshaling and unmarshaling proto, make sure the same precision for JSON and proto marshaling/unmarshaling.
Which issue(s) this PR fixes:
Fixes #111928
Special notes for your reviewer:
Does this PR introduce a user-facing change?
Additional documentation e.g., KEPs (Kubernetes Enhancement Proposals), usage docs, etc.: