-
Notifications
You must be signed in to change notification settings - Fork 4.3k
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
Fix issue caused by group-creation forwarding. #29559
Conversation
CI Results: |
5237f46
to
3054286
Compare
… incorrect ID fixup
3054286
to
13c6dd8
Compare
Build Results: |
@@ -2035,14 +2035,6 @@ func (i *IdentityStore) UpsertGroupInTxn(ctx context.Context, txn *memdb.Txn, gr | |||
return fmt.Errorf("group is nil") | |||
} | |||
|
|||
g, err := i.MemDBGroupByName(ctx, group.Name, true) |
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 wonder if this would have worked if we used the txn that's passed into this method...
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.
It would not have. The problem here is the lines below where we set the incoming group.ID to be the same as the existing one. That meant that when there are duplicate groups in storage we end up loading the second one over the first, but switching it to have the first one's ID so now you can't even lookup the original by ID and the one you do get is a strange hybrid of two different groups in storage...
* Set correct docs URL in duplicate report * Fix duplicate reporting (and other possible duplicate bugs) caused by incorrect ID fixup * Enable forwarding to primary active in all group aliases write paths --------- Co-authored-by: Bianca Moreira <[email protected]>
* Set correct docs URL in duplicate report * Fix duplicate reporting (and other possible duplicate bugs) caused by incorrect ID fixup * Enable forwarding to primary active in all group aliases write paths --------- Co-authored-by: Bianca Moreira <[email protected]>
Description
Fixes a bug introduced in #29483. That PR included an attempt to prevent duplicate groups with different IDs being created by a race condition, however that fix interferes in a subtle way when duplicate groups (causes by historical bugs, like the one it was trying to fix) are already present in storage. It turns out that that code was not actually necessary for the fix - removing it doesn't make any of the test cases added in https://github.com/hashicorp/vault-enterprise/pull/6990 fail - I ran them over 40 times each locally with no failures.
This PR also fixes up the URL in the reports since the docs were moved around.
Fixes VAULT-33879. This also fixes a bunch of potential new issues in the case that duplicate groups already exist - before this fix they would have loaded the contents of one group but swapped it's ID for another duplicate which is even more confusing and problematic than before!
There is no Enterprise part to this PR exactly, however while working on this I realised we deprecated an RPC and so will make a PR to remove it and make it error to avoid unexpected behavior during mixed version upgrade scenarios.
@biazmoreira The one thing you mentioned that I didn't get to was that we potentially missed some of the
group-alias
endpoints in the original PR. I took a quick look and it certainly does look like there are a couple of code paths there that get to doing anUpsertGroup
which will no longer forward at the RPC level and are potentially even more broken than before because of that by #29483. Could you take a look? We can include that in this PR if so.TODO
TODO only if you're a HashiCorp employee
backport/
label that matches the desired release branch. Note that in the CE repo, the latest release branch will look likebackport/x.x.x
, but older release branches will bebackport/ent/x.x.x+ent
.of a public function, even if that change is in a CE file, double check that
applying the patch for this PR to the ENT repo and running tests doesn't
break any tests. Sometimes ENT only tests rely on public functions in CE
files.
in the PR description, commit message, or branch name.
description. Also, make sure the changelog is in this PR, not in your ENT PR.