Merge pull request #15159 from hashicorp/ui/fix-peered-service-not-unique-based-on-peer

ui: Fix PeerName is part of service uniqueness
This commit is contained in:
Michael Klein 2022-10-27 20:26:50 +02:00 committed by GitHub
commit 3389d3883b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 10 deletions

View File

@ -5,7 +5,7 @@ import { fragment } from 'ember-data-model-fragments/attributes';
import replace, { nullValue } from 'consul-ui/decorators/replace';
export const PRIMARY_KEY = 'uid';
export const SLUG_KEY = 'Name';
export const SLUG_KEY = 'Name,PeerName';
export const Collection = class Collection {
@tracked items;

View File

@ -1,4 +1,5 @@
import { get } from '@ember/object';
import { isEmpty } from '@ember/utils';
export default function (foreignKey, nspaceKey, partitionKey, hash = JSON.stringify) {
return function (primaryKey, slugKey, foreignKeyValue, nspaceValue, partitionValue) {
@ -10,15 +11,24 @@ export default function (foreignKey, nspaceKey, partitionKey, hash = JSON.string
);
}
const slugKeys = slugKey.split(',');
const slugValues = slugKeys.map(function (slugKey) {
const slug = get(item, slugKey);
if (slug == null || slug.length < 1) {
throw new Error(
`Unable to create fingerprint, missing slug. Looking for value in \`${slugKey}\` got \`${slug}\``
);
}
return slug;
});
const slugValues = slugKeys
.map(function (slugKey) {
const slug = get(item, slugKey);
const isSlugEmpty = isEmpty(slug);
if (isSlugEmpty) {
// PeerName should be optional as part of id
if (slugKey === 'PeerName') {
return;
}
throw new Error(
`Unable to create fingerprint, missing slug. Looking for value in \`${slugKey}\` got \`${slug}\``
);
}
return slug;
})
.compact();
// This ensures that all data objects have a Namespace and a Partition
// value set, even in OSS.
if (typeof item[nspaceKey] === 'undefined') {