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.
pull/15159/head
Michael Klein 2 years ago
parent 41e50a0f8d
commit 033694e6a3

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

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

Loading…
Cancel
Save