mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-07 05:52:57 +00:00
fix: automatically remove invalid characters for aliases generated from index names
This commit is contained in:
committed by
Rainer Killinger
parent
a1c14e8e6f
commit
6f7e23df20
@@ -226,6 +226,43 @@ export class Elasticsearch implements Database {
|
||||
return 'stapps_*_*_*';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for invalid character in alias names and removes them
|
||||
* @param alias The alias name
|
||||
* @param uid The UID of the current bulk (for debugging purposes)
|
||||
*/
|
||||
private removeAliasChars(alias: string, uid: string | undefined): string {
|
||||
// spaces are included in some types, so throwing an error in this case would clutter up the log unnecessarily
|
||||
alias = alias.replace(' ', '');
|
||||
// List of invalid characters: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/indices-create-index.html
|
||||
['\\', '/', '*', '?', '"', '<', '>', '|', ',', '#'].forEach((value) => {
|
||||
if (alias.includes(value)) {
|
||||
alias = alias.replace(value, '');
|
||||
logger.warn(`Type of the bulk ${uid} contains an invalid character '${value}'. This can lead to two bulks `
|
||||
+ `having the same alias despite having different types, as invalid characters are removed automatically. ` +
|
||||
`New alias name is "${alias}."`);
|
||||
}
|
||||
});
|
||||
['-', '_', '+'].forEach((value) => {
|
||||
if (alias.charAt(0) === value) {
|
||||
alias = alias.substring(1);
|
||||
logger.warn(`Type of the bulk ${uid} begins with '${value}'. This can lead to two bulks `
|
||||
+ `having the same alias despite having different types, as invalid characters are removed automatically. ` +
|
||||
`New alias name is "${alias}."`);
|
||||
}
|
||||
});
|
||||
if (alias === '.' || alias === '..') {
|
||||
logger.warn(`Type of the bulk ${uid} is ${alias}. This is an invalid name, please consider using another ` +
|
||||
`one, as it will be replaced with 'alias_placeholder', which can lead to strange errors.`);
|
||||
return 'alias_placeholder';
|
||||
}
|
||||
if (alias.includes(':')) {
|
||||
logger.warn(`Type of the bulk ${uid} contains a ':'. This isn't an issue now, but will be in future ` +
|
||||
`Elasticsearch versions!`);
|
||||
}
|
||||
return alias;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should be called, when a new bulk was created. Creates a new index and applies a the mapping to the index
|
||||
* @param bulk the bulk process that was created
|
||||
@@ -241,7 +278,7 @@ export class Elasticsearch implements Database {
|
||||
|
||||
// there already is an index with this type and source. We will index the new one and switch the alias to it
|
||||
// the old one is deleted
|
||||
const alias = bulk.type;
|
||||
const alias = this.removeAliasChars(bulk.type, bulk.uid);
|
||||
|
||||
if (typeof this.aliasMap[alias] === 'undefined') {
|
||||
this.aliasMap[alias] = {};
|
||||
@@ -295,7 +332,7 @@ export class Elasticsearch implements Database {
|
||||
const index: string = this.getIndex(bulk.type, bulk.source, bulk);
|
||||
|
||||
// alias for the indices
|
||||
const alias = bulk.type;
|
||||
const alias = this.removeAliasChars(bulk.type, bulk.uid);
|
||||
|
||||
if (typeof this.aliasMap[alias] === 'undefined') {
|
||||
this.aliasMap[alias] = {};
|
||||
|
||||
Reference in New Issue
Block a user