This is an automated email from the ASF dual-hosted git repository. jkevan pushed a commit to branch UNOMI-737-indices-reduction-migration in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 2861e6f97a10c67c949e503b3490532a2ece05aa Author: Kevan <ke...@jahia.com> AuthorDate: Mon Mar 6 16:24:48 2023 +0100 UNOMI-737: indices reduction migration (ES document id suffixed to avoid conflicts) --- .../services/impl/GroovyActionsServiceImpl.java | 25 ++--- .../unomi/itests/GroovyActionsServiceIT.java | 2 +- .../ElasticSearchPersistenceServiceImpl.java | 104 ++++++++------------- .../unomi/persistence/spi/PersistenceService.java | 1 + .../services/impl/rules/RulesServiceImpl.java | 22 ++--- .../migrate-2.2.0-05-indicesReduction.groovy | 59 ++++++------ 6 files changed, 84 insertions(+), 129 deletions(-) diff --git a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/impl/GroovyActionsServiceImpl.java b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/impl/GroovyActionsServiceImpl.java index 5761cc1c5..7b215c187 100644 --- a/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/impl/GroovyActionsServiceImpl.java +++ b/extensions/groovy-actions/services/src/main/java/org/apache/unomi/groovy/actions/services/impl/GroovyActionsServiceImpl.java @@ -79,7 +79,6 @@ public class GroovyActionsServiceImpl implements GroovyActionsService { private static final Logger logger = LoggerFactory.getLogger(GroovyActionsServiceImpl.class.getName()); private static final String BASE_SCRIPT_NAME = "BaseScript"; - private static final String GROOVY_SOURCE_CODE_ID_SUFFIX = "-groovySourceCode"; private DefinitionsService definitionsService; private PersistenceService persistenceService; @@ -217,21 +216,20 @@ public class GroovyActionsServiceImpl implements GroovyActionsService { @Override public void remove(String id) { - String groovySourceCodeId = getGroovyCodeSourceIdForActionId(id); - if (groovyCodeSourceMap.containsKey(groovySourceCodeId)) { + if (groovyCodeSourceMap.containsKey(id)) { try { definitionsService.removeActionType( - groovyShell.parse(groovyCodeSourceMap.get(groovySourceCodeId)).getClass().getMethod("execute").getAnnotation(Action.class).id()); + groovyShell.parse(groovyCodeSourceMap.get(id)).getClass().getMethod("execute").getAnnotation(Action.class).id()); } catch (NoSuchMethodException e) { logger.error("Failed to delete the action type for the id {}", id, e); } - persistenceService.remove(groovySourceCodeId, GroovyAction.class); + persistenceService.remove(id, GroovyAction.class); } } @Override public GroovyCodeSource getGroovyCodeSource(String id) { - return groovyCodeSourceMap.get(getGroovyCodeSourceIdForActionId(id)); + return groovyCodeSourceMap.get(id); } /** @@ -245,21 +243,10 @@ public class GroovyActionsServiceImpl implements GroovyActionsService { return new GroovyCodeSource(groovyScript, actionName, "/groovy/script"); } - /** - * We use a suffix for avoiding id conflict between the actionType and the groovyAction in ElasticSearch - * Since those items are now stored in the same ES index - * @param actionName name/id of the actionType - * @return id of the groovyAction source code for query/save/storage usage. - */ - private String getGroovyCodeSourceIdForActionId(String actionName) { - return actionName + GROOVY_SOURCE_CODE_ID_SUFFIX; - } - private void saveScript(String actionName, String script) { - String groovyName = getGroovyCodeSourceIdForActionId(actionName); - GroovyAction groovyScript = new GroovyAction(groovyName, script); + GroovyAction groovyScript = new GroovyAction(actionName, script); persistenceService.save(groovyScript); - logger.info("The script {} has been persisted.", groovyName); + logger.info("The script {} has been persisted.", actionName); } private void refreshGroovyActions() { diff --git a/itests/src/test/java/org/apache/unomi/itests/GroovyActionsServiceIT.java b/itests/src/test/java/org/apache/unomi/itests/GroovyActionsServiceIT.java index 7fecea183..f86ff7f7e 100644 --- a/itests/src/test/java/org/apache/unomi/itests/GroovyActionsServiceIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/GroovyActionsServiceIT.java @@ -123,7 +123,7 @@ public class GroovyActionsServiceIT extends BaseIT { GroovyCodeSource groovyCodeSource = keepTrying("Failed waiting for the creation of the GroovyAction for the save test", () -> groovyActionsService.getGroovyCodeSource(UPDATE_ADDRESS_ACTION), Objects::nonNull, DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES); - Assert.assertEquals(UPDATE_ADDRESS_ACTION + "-groovySourceCode", groovyActionsService.getGroovyCodeSource(UPDATE_ADDRESS_ACTION).getName()); + Assert.assertEquals(UPDATE_ADDRESS_ACTION, groovyActionsService.getGroovyCodeSource(UPDATE_ADDRESS_ACTION).getName()); Assert.assertTrue(actionType.getMetadata().getId().contains(UPDATE_ADDRESS_GROOVY_ACTION)); Assert.assertEquals(2, actionType.getMetadata().getSystemTags().size()); diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java index d14d284d9..33fa1902c 100644 --- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java +++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java @@ -148,18 +148,7 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -249,25 +238,13 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, private Map<String, Map<String, Map<String, Object>>> knownMappings = new HashMap<>(); private static final Map<String, String> itemTypeIndexNameMap = new HashMap<>(); + private static final Collection<String> systemItems = Arrays.asList("actionType", "campaign", "campaignevent", "goal", + "userList", "propertyType", "scope", "conditionType", "rule", "scoring", "segment", "groovyAction", "topic", + "patch", "jsonSchema", "importConfig", "exportConfig", "rulestats"); static { - itemTypeIndexNameMap.put("actionType", "systemItems"); - itemTypeIndexNameMap.put("campaign", "systemItems"); - itemTypeIndexNameMap.put("campaignevent", "systemItems"); - itemTypeIndexNameMap.put("goal", "systemItems"); - itemTypeIndexNameMap.put("userList", "systemItems"); - itemTypeIndexNameMap.put("propertyType", "systemItems"); - itemTypeIndexNameMap.put("scope", "systemItems"); - itemTypeIndexNameMap.put("conditionType", "systemItems"); - itemTypeIndexNameMap.put("rule", "systemItems"); - itemTypeIndexNameMap.put("scoring", "systemItems"); - itemTypeIndexNameMap.put("segment", "systemItems"); - itemTypeIndexNameMap.put("groovyAction", "systemItems"); - itemTypeIndexNameMap.put("topic", "systemItems"); - itemTypeIndexNameMap.put("patch", "systemItems"); - itemTypeIndexNameMap.put("jsonSchema", "systemItems"); - itemTypeIndexNameMap.put("importConfig", "systemItems"); - itemTypeIndexNameMap.put("exportConfig", "systemItems"); - itemTypeIndexNameMap.put("rulestats", "systemItems"); + for (String systemItem : systemItems) { + itemTypeIndexNameMap.put(systemItem, "systemItems"); + } itemTypeIndexNameMap.put("profile", "profile"); itemTypeIndexNameMap.put("persona", "profile"); @@ -840,19 +817,20 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, if (customItemType != null) { itemType = customItemType; } + String documentId = getDocumentIDForItemType(itemId, itemType); - String affinityIndex = "session".equals(itemType) && sessionAffinityCache.containsKey(itemId) ? sessionAffinityCache.get(itemId) : null; + String affinityIndex = "session".equals(itemType) && sessionAffinityCache.containsKey(documentId) ? sessionAffinityCache.get(documentId) : null; if (affinityIndex == null && isItemTypeRollingOver(itemType)) { return new MetricAdapter<T>(metricsService, ".loadItemWithQuery") { @Override public T execute(Object... args) throws Exception { if (customItemType == null) { - PartialList<T> r = query(QueryBuilders.idsQuery().addIds(itemId), null, clazz, 0, 1, null, null); + PartialList<T> r = query(QueryBuilders.idsQuery().addIds(documentId), null, clazz, 0, 1, null, null); if (r.size() > 0) { return r.get(0); } } else { - PartialList<CustomItem> r = query(QueryBuilders.idsQuery().addIds(itemId), null, customItemType, 0, 1, null, null); + PartialList<CustomItem> r = query(QueryBuilders.idsQuery().addIds(documentId), null, customItemType, 0, 1, null, null); if (r.size() > 0) { return (T) r.get(0); } @@ -861,12 +839,12 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, } }.execute(); } else { - GetRequest getRequest = new GetRequest(affinityIndex != null ? affinityIndex : getIndex(itemType), itemId); + GetRequest getRequest = new GetRequest(affinityIndex != null ? affinityIndex : getIndex(itemType), documentId); GetResponse response = client.get(getRequest, RequestOptions.DEFAULT); if (response.isExists()) { String sourceAsString = response.getSourceAsString(); final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz); - setMetadata(value, response.getId(), response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); + setMetadata(value, response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); return value; } else { return null; @@ -889,15 +867,11 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, } - private void setMetadata(Item item, String id, long version, long seqNo, long primaryTerm, String index) { - item.setItemId(id); + private void setMetadata(Item item, long version, long seqNo, long primaryTerm, String index) { item.setVersion(version); item.setSystemMetadata(SEQ_NO, seqNo); item.setSystemMetadata(PRIMARY_TERM, primaryTerm); item.setSystemMetadata("index", index); - if (item.getItemType().equals("session") && !sessionAffinityCache.containsKey(id)) { - sessionAffinityCache.put(id, index); - } } @Override @@ -925,17 +899,14 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, try { String source = ESCustomObjectMapper.getObjectMapper().writeValueAsString(item); String itemType = item.getItemType(); - String className = item.getClass().getName(); if (item instanceof CustomItem) { itemType = ((CustomItem) item).getCustomItemType(); - className = CustomItem.class.getName() + "." + itemType; } - String itemId = item.getItemId(); - String index = item.getSystemMetadata("index") != null ? - (String) item.getSystemMetadata("index") : - getIndex(itemType); + String documentId = getDocumentIDForItemType(item.getItemId(), itemType); + String index = item.getSystemMetadata("index") != null ? (String) item.getSystemMetadata("index") : getIndex(itemType); + IndexRequest indexRequest = new IndexRequest(index); - indexRequest.id(itemId); + indexRequest.id(documentId); indexRequest.source(source, XContentType.JSON); if (!alwaysOverwrite) { @@ -958,13 +929,12 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, if (bulkProcessor == null || !useBatching) { indexRequest.setRefreshPolicy(getRefreshPolicy(itemType)); IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT); - setMetadata(item, response.getId(), response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); + setMetadata(item, response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); } else { bulkProcessor.add(indexRequest); } } catch (IndexNotFoundException e) { - logger.error("Could not find index {}, could not register item type {} with id {} ", - index, itemType, itemId, e); + logger.error("Could not find index {}, could not register item type {} with id {} ", index, itemType, item.getItemId(), e); return false; } return true; @@ -1015,7 +985,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, if (bulkProcessor == null || !useBatchingForUpdate) { UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT); - setMetadata(item, response.getId(), response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); + setMetadata(item, response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); } else { bulkProcessor.add(updateRequest); } @@ -1034,7 +1004,10 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, private UpdateRequest createUpdateRequest(Class clazz, Item item, Map source, boolean alwaysOverwrite) { String itemType = Item.getItemType(clazz); - UpdateRequest updateRequest = new UpdateRequest(getIndex(itemType), item.getItemId()); + String documentId = getDocumentIDForItemType(item.getItemId(), itemType); + String index = getIndex(itemType); + + UpdateRequest updateRequest = new UpdateRequest(index, documentId); updateRequest.doc(source); if (!alwaysOverwrite) { @@ -1115,7 +1088,6 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, protected Boolean execute(Object... args) throws Exception { try { String itemType = Item.getItemType(clazz); - String index = getIndex(itemType); for (int i = 0; i < scripts.length; i++) { @@ -1213,12 +1185,12 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, protected Boolean execute(Object... args) throws Exception { try { String itemType = Item.getItemType(clazz); - String index = getIndex(itemType); + String documentId = getDocumentIDForItemType(item.getItemId(), itemType); Script actualScript = new Script(ScriptType.INLINE, "painless", script, scriptParams); - UpdateRequest updateRequest = new UpdateRequest(index, item.getItemId()); + UpdateRequest updateRequest = new UpdateRequest(index, documentId); Long seqNo = (Long) item.getSystemMetadata(SEQ_NO); Long primaryTerm = (Long) item.getSystemMetadata(PRIMARY_TERM); @@ -1230,7 +1202,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, updateRequest.script(actualScript); if (bulkProcessor == null) { UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT); - setMetadata(item, response.getId(), response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); + setMetadata(item, response.getVersion(), response.getSeqNo(), response.getPrimaryTerm(), response.getIndex()); } else { bulkProcessor.add(updateRequest); } @@ -1266,8 +1238,10 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, if (customItemType != null) { itemType = customItemType; } + String documentId = getDocumentIDForItemType(itemId, itemType); + String index = getIndexNameForQuery(itemType); - DeleteRequest deleteRequest = new DeleteRequest(getIndexNameForQuery(itemType), itemId); + DeleteRequest deleteRequest = new DeleteRequest(index, documentId); client.delete(deleteRequest, RequestOptions.DEFAULT); return true; } catch (Exception e) { @@ -1830,9 +1804,10 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, try { final Class<? extends Item> clazz = item.getClass(); String itemType = Item.getItemType(clazz); + String documentId = getDocumentIDForItemType(item.getItemId(), itemType); QueryBuilder builder = QueryBuilders.boolQuery() - .must(QueryBuilders.idsQuery().addIds(item.getItemId())) + .must(QueryBuilders.idsQuery().addIds(documentId)) .must(conditionESQueryBuilderDispatcher.buildFilter(query)); return queryCount(builder, itemType) > 0; } finally { @@ -2041,7 +2016,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, // add hit to results String sourceAsString = searchHit.getSourceAsString(); final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz); - setMetadata(value, searchHit.getId(), searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); + setMetadata(value, searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); results.add(value); } @@ -2071,7 +2046,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, for (SearchHit searchHit : searchHits) { String sourceAsString = searchHit.getSourceAsString(); final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz); - setMetadata(value, searchHit.getId(), searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); + setMetadata(value, searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); results.add(value); } } @@ -2117,7 +2092,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, // add hit to results String sourceAsString = searchHit.getSourceAsString(); final T value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, clazz); - setMetadata(value, searchHit.getId(), searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); + setMetadata(value, searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); results.add(value); } } @@ -2158,7 +2133,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, // add hit to results String sourceAsString = searchHit.getSourceAsString(); final CustomItem value = ESCustomObjectMapper.getObjectMapper().readValue(sourceAsString, CustomItem.class); - setMetadata(value, searchHit.getId(), searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); + setMetadata(value, searchHit.getVersion(), searchHit.getSeqNo(), searchHit.getPrimaryTerm(), searchHit.getIndex()); results.add(value); } } @@ -2632,6 +2607,10 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, return itemTypeIndexNameMap.getOrDefault(itemType, itemType); } + private String getDocumentIDForItemType(String itemId, String itemType) { + return systemItems.contains(itemType) ? (itemId + "_" + itemType.toLowerCase()) : itemId; + } + private QueryBuilder wrapWithItemTypeQuery(String itemType, QueryBuilder originalQuery) { BoolQueryBuilder wrappedQuery = QueryBuilders.boolQuery(); wrappedQuery.must(getItemTypeQueryBuilder(itemType)); @@ -2657,5 +2636,4 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService, } return WriteRequest.RefreshPolicy.NONE; } - } diff --git a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java index 751a34c85..0e29bd299 100644 --- a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java +++ b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java @@ -292,6 +292,7 @@ public interface PersistenceService { /** * @deprecated use {@link #loadCustomItem(String, String)} */ + @Deprecated CustomItem loadCustomItem(String itemId, Date dateHint, String customItemType); /** diff --git a/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java index fafec7bcf..ea6109064 100644 --- a/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java +++ b/services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java @@ -46,8 +46,6 @@ import java.util.stream.Collectors; public class RulesServiceImpl implements RulesService, EventListenerService, SynchronousBundleListener { - public static final String RULE_QUERY_PREFIX = "rule_"; - private static final String RULE_STAT_ID_SUFFIX = "-stat"; public static final String TRACKED_PARAMETER = "trackedConditionParameters"; private static final Logger logger = LoggerFactory.getLogger(RulesServiceImpl.class.getName()); @@ -253,10 +251,9 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn } private RuleStatistics getLocalRuleStatistics(Rule rule) { - String ruleStatisticsId = getRuleStatisticId(rule.getItemId()); - RuleStatistics ruleStatistics = this.allRuleStatistics.get(ruleStatisticsId); + RuleStatistics ruleStatistics = this.allRuleStatistics.get(rule.getItemId()); if (ruleStatistics == null) { - ruleStatistics = new RuleStatistics(ruleStatisticsId); + ruleStatistics = new RuleStatistics(rule.getItemId()); } return ruleStatistics; } @@ -267,10 +264,6 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn allRuleStatistics.put(ruleStatistics.getItemId(), ruleStatistics); } - private String getRuleStatisticId(String ruleID) { - return ruleID + RULE_STAT_ID_SUFFIX; - } - public void refreshRules() { try { // we use local variables to make sure we quickly switch the collections since the refresh is called often @@ -344,17 +337,14 @@ public class RulesServiceImpl implements RulesService, EventListenerService, Syn @Override public RuleStatistics getRuleStatistics(String ruleId) { - String ruleStatisticsId = getRuleStatisticId(ruleId); - if (allRuleStatistics.containsKey(ruleStatisticsId)) { - return allRuleStatistics.get(ruleStatisticsId); + if (allRuleStatistics.containsKey(ruleId)) { + return allRuleStatistics.get(ruleId); } - return persistenceService.load(ruleStatisticsId, RuleStatistics.class); + return persistenceService.load(ruleId, RuleStatistics.class); } public Map<String, RuleStatistics> getAllRuleStatistics() { - return allRuleStatistics.keySet().stream() - .collect(Collectors.toMap(key -> key.endsWith(RULE_STAT_ID_SUFFIX) ? - key.substring(0, key.length() - RULE_STAT_ID_SUFFIX.length()) : key, allRuleStatistics::get)); + return allRuleStatistics; } @Override diff --git a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-05-indicesReduction.groovy b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-05-indicesReduction.groovy index 8a07a5278..905ff9339 100644 --- a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-05-indicesReduction.groovy +++ b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-05-indicesReduction.groovy @@ -23,6 +23,29 @@ MigrationContext context = migrationContext String esAddress = context.getConfigString("esAddress") String indexPrefix = context.getConfigString("indexPrefix") String baseSettings = MigrationUtils.resourceAsString(bundleContext, "requestBody/2.0.0/base_index_mapping.json") +def indicesToReduce = [ + actiontype: [reduceTo: "systemitems", renameId: true], + campaign: [reduceTo: "systemitems", renameId: true], + campaignevent: [reduceTo: "systemitems", renameId: true], + goal: [reduceTo: "systemitems", renameId: true], + userlist: [reduceTo: "systemitems", renameId: true], + propertytype: [reduceTo: "systemitems", renameId: true], + scope: [reduceTo: "systemitems", renameId: true], + conditiontype: [reduceTo: "systemitems", renameId: true], + rule: [reduceTo: "systemitems", renameId: true], + scoring: [reduceTo: "systemitems", renameId: true], + segment: [reduceTo: "systemitems", renameId: true], + topic: [reduceTo: "systemitems", renameId: true], + patch: [reduceTo: "systemitems", renameId: true], + jsonschema: [reduceTo: "systemitems", renameId: true], + importconfig: [reduceTo: "systemitems", renameId: true], + exportconfig: [reduceTo: "systemitems", renameId: true], + rulestats: [reduceTo: "systemitems", renameId: true], + groovyaction: [reduceTo: "systemitems", renameId: true], + + persona: [reduceTo: "profile", renameId: false], + personasession: [reduceTo: "session", renameId: false] +] context.performMigrationStep("2.2.0-create-systemItems-index", () -> { if (!MigrationUtils.indexExists(context.getHttpClient(), esAddress, "${indexPrefix}-systemitems")) { @@ -32,44 +55,20 @@ context.performMigrationStep("2.2.0-create-systemItems-index", () -> { } }) -def indicesToReduce = [ - actiontype: "systemitems", - campaign: "systemitems", - campaignevent: "systemitems", - goal: "systemitems", - userlist: "systemitems", - propertytype: "systemitems", - scope: "systemitems", - conditiontype: "systemitems", - rule: "systemitems", - scoring: "systemitems", - segment: "systemitems", - topic: "systemitems", - patch: "systemitems", - jsonschema: "systemitems", - importconfig: "systemitems", - exportconfig: "systemitems", - rulestats: "systemitems", - groovyaction: "systemitems", - persona: "profile", - personasession: "session" -] -def indicesToSuffixIds = [ - rulestats: "-stat", - groovyaction: "-groovySourceCode" -] indicesToReduce.each { indexToReduce -> context.performMigrationStep("2.2.0-reduce-${indexToReduce.key}", () -> { if (MigrationUtils.indexExists(context.getHttpClient(), esAddress, "${indexPrefix}-${indexToReduce.key}")) { def painless = null // check if we need to update the ids of those items first - if (indicesToSuffixIds.containsKey(indexToReduce.key)) { - painless = MigrationUtils.getFileWithoutComments(bundleContext, "requestBody/2.2.0/suffix_ids.painless").replace("#ID_SUFFIX", indicesToSuffixIds.get(indexToReduce.key)) + if (indexToReduce.value.renameId) { + painless = MigrationUtils.getFileWithoutComments(bundleContext, "requestBody/2.2.0/suffix_ids.painless").replace("#ID_SUFFIX", "_${indexToReduce.key}") } // move items - MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, esAddress, "${indexPrefix}-${indexToReduce.key}", "${indexPrefix}-${indexToReduce.value}", painless) + def reduceToIndex = "${indexPrefix}-${indexToReduce.value.reduceTo}" + MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, esAddress, "${indexPrefix}-${indexToReduce.key}", reduceToIndex, painless) MigrationUtils.deleteIndex(context.getHttpClient(), esAddress, "${indexPrefix}-${indexToReduce.key}") - HttpUtils.executePostRequest(context.getHttpClient(), esAddress + "/${indexPrefix}-${indexToReduce.value}/_refresh", null, null); + + HttpUtils.executePostRequest(context.getHttpClient(), esAddress + "/${reduceToIndex}/_refresh", null, null); MigrationUtils.waitForYellowStatus(context.getHttpClient(), esAddress, context); } })