Fix PeerName is part of service uniqueness

We need to make a PeerName part of a the service id when present.

This makes sure that peers can export services named
the same as other peers but have the UI still treat them
as separate services.
This commit is contained in:
Michael Klein 2022-10-26 16:42:55 +02:00
parent 676e8afaf9
commit 9c965f98fd
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') {