-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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
improve ca cmp #10351
improve ca cmp #10351
Conversation
} | ||
|
||
if !services.CertAuthoritiesEquivalent(actual, expected) { | ||
return trace.CompareFailed("cluster %v settings have been updated, try again", new.GetName()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I realize that it's the exact same message as before, but this is only accurate if the rotation was indeed the only thing different between actual and expected. Would it be too much of a layer violation if we checked for that here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure I follow. Are you suggesting we return a different error message based on which elements of the CAs differ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
E.g. check rotation state and return something like "rotation state concurrently updated"
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, and maybe leave the "try again" as that message is displayed verbatim by tctl
on a manual auth - whereas if something bad has happened and we are never actually going to recover by waiting, there's no point in telling the user to try again.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Admittedly the fix could be to actually catch and replace the error on one of the layers between this and the user instead
1611641
to
99067f2
Compare
@fspmarshall Looks like this is approved, can we merge? |
* improve ca cmp (#10351) * Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057) Co-authored-by: Forrest <[email protected]>
* improve ca cmp (#10351) * Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057) Co-authored-by: Forrest <[email protected]>
* improve ca cmp (#10351) * Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057) Co-authored-by: Forrest <[email protected]>
The
CompareAndSwapCertAuthorities
method currently relies upon deterministic serialization to function correctly. Until #10070 it was possible that serialization wouldn't actually be deterministic. After that PR was merged, @espadolini discovered another potential failure case. If a new field is added to the ca resource and the auth server must be downgraded for some reason, the comparison fails due to the new field being omitted.This PR changes
CompareAndSwapCertAuthorities
to instead load the value that actually exists at the target key, perform comparison using deserialized values (avoiding downgrade issues), and pass the originalbackend.Item
back toBackend.CompareAndSwap
(further mitigating the risk of non-deterministic serialization).