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);
         }
     })

Reply via email to