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

identity: Resolve conflicts with rename #29356

Merged
merged 3 commits into from
Jan 15, 2025
Merged

Conversation

mpalmi
Copy link
Contributor

@mpalmi mpalmi commented Jan 15, 2025

Description

This PR introduces a new type of conflict resolution for duplicate Entities and Groups. This provides a way of preventing Vault from entering case-sensitive mode, which is the current behavior for any kind of duplicate.

Renames append the conflicting identity artifact's UUID to its name and updates a metadata field to indicate the pre-existing artifact's UUID.

The feature is gated by the force-identity-deduplication activation flag.

In order to maintain consistent behavior between the reporting resolver and the rename operation, we need to adjust the behavior of generated reports. Previously, they intentionally preserved existing Group merge determinism, wherein the last MemDB update would win and all others would be renamed. This approach is more complicated for the rename resolver, since we would need to update any duplicated entity in the cache while inserting the new duplicate (resulting in two MemDB operations). Though we can ensure atomic updates of the two identity artifacts with transactions (which we could get for groups with a minor adjustment, and we will get along with the Entity load speedups PR), it's far simpler to just rename all but the first insert as proposed in the current PR.

Since the feature is gated by an activation flag, with appropriate warnings of potential changes via the reporting resolver, I've opted for simplicity over maintaining pre-existing behavior. We can revisit this assumption later if we think alignment with existing behavior outweighs any potential complexity in the rename operation.

Entity alias resolution is left alone as a destructive merge operation to prevent a potentially high-impact change in existing behavior.

ENT PR: https://github.com/hashicorp/vault-enterprise/pull/7239
Resolves: VAULT-33094

TODO only if you're a HashiCorp employee

  • Backport Labels: If this fix needs to be backported, use the appropriate backport/ label that matches the desired release branch. Note that in the CE repo, the latest release branch will look like backport/x.x.x, but older release branches will be backport/ent/x.x.x+ent.
    • LTS: If this fixes a critical security vulnerability or severity 1 bug, it will also need to be backported to the current LTS versions of Vault. To ensure this, use all available enterprise labels.
  • ENT Breakage: If this PR either 1) removes a public function OR 2) changes the signature
    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.
  • Jira: If this change has an associated Jira, it's referenced either
    in the PR description, commit message, or branch name.
  • RFC: If this change has an associated RFC, please link it in the description.
  • ENT PR: If this change has an associated ENT PR, please link it in the
    description. Also, make sure the changelog is in this PR, not in your ENT PR.

@mpalmi mpalmi added this to the 1.19.0-rc milestone Jan 15, 2025
@mpalmi mpalmi requested a review from a team as a code owner January 15, 2025 01:43
@github-actions github-actions bot added the hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed label Jan 15, 2025
This PR introduces a new type of conflict resolution for duplicate
Entities and Groups. This provides a way of preventing Vault from
entering case-sensitive mode, which is the current behavior for any kind
of duplicate.

Renames append the conflicting identity artifact's UUID to its name and
updates a metadata field to indicate the pre-existing artifact's UUID.

Entity alias resolution is left alone as a destructive merge operation
to prevent a potentially high-impact change in existing behavior.
@mpalmi mpalmi force-pushed the rename-identity-duplicates-ce branch from 5dc1ec8 to 03a2e8c Compare January 15, 2025 01:52
Copy link

github-actions bot commented Jan 15, 2025

CI Results:
All Go tests succeeded! ✅

Copy link

github-actions bot commented Jan 15, 2025

Build Results:
All builds succeeded! ✅

biazmoreira
biazmoreira previously approved these changes Jan 15, 2025
@mpalmi mpalmi merged commit f503f73 into main Jan 15, 2025
91 of 92 checks passed
@mpalmi mpalmi deleted the rename-identity-duplicates-ce branch January 15, 2025 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants