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

improve ca cmp #10351

Merged
merged 2 commits into from
Mar 23, 2022
Merged

improve ca cmp #10351

merged 2 commits into from
Mar 23, 2022

Conversation

fspmarshall
Copy link
Contributor

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 original backend.Item back to Backend.CompareAndSwap (further mitigating the risk of non-deterministic serialization).

@github-actions github-actions bot requested review from lxea and zmb3 February 14, 2022 22:36
}

if !services.CertAuthoritiesEquivalent(actual, expected) {
return trace.CompareFailed("cluster %v settings have been updated, try again", new.GetName())
Copy link
Contributor

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?

Copy link
Contributor Author

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?

Copy link
Contributor Author

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"?

Copy link
Contributor

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.

Copy link
Contributor

@espadolini espadolini Feb 15, 2022

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

@espadolini espadolini removed the request for review from lxea February 15, 2022 09:37
@russjones russjones requested review from r0mant and removed request for zmb3 February 17, 2022 01:39
@russjones
Copy link
Contributor

@fspmarshall Looks like this is approved, can we merge?

@zmb3 zmb3 enabled auto-merge (squash) March 23, 2022 22:44
@zmb3 zmb3 merged commit 5bd9434 into master Mar 23, 2022
@zmb3 zmb3 deleted the fspmarshall/ca-cmp branch March 23, 2022 23:08
espadolini pushed a commit that referenced this pull request Apr 15, 2022
espadolini pushed a commit that referenced this pull request Apr 20, 2022
espadolini pushed a commit that referenced this pull request Apr 20, 2022
espadolini pushed a commit that referenced this pull request Apr 20, 2022
espadolini added a commit that referenced this pull request Apr 20, 2022
* improve ca cmp (#10351)

* Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057)

Co-authored-by: Forrest <[email protected]>
espadolini added a commit that referenced this pull request Apr 20, 2022
* improve ca cmp (#10351)

* Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057)

Co-authored-by: Forrest <[email protected]>
espadolini added a commit that referenced this pull request Apr 20, 2022
* improve ca cmp (#10351)

* Fix panic in `CertAuthority.Clone` because of non-UTC times. (#12057)

Co-authored-by: Forrest <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants