This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch reduceIndicesItems3
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/reduceIndicesItems3 by this 
push:
     new 8361a522a UNOMI-736: provide base migration for indices reduction
8361a522a is described below

commit 8361a522a86b8fa296b979dba1944ac671cd7316
Author: Kevan <[email protected]>
AuthorDate: Mon Feb 27 18:10:37 2023 +0100

    UNOMI-736: provide base migration for indices reduction
---
 .../shell/migration/utils/MigrationUtils.java      | 13 ++--
 ...-2.2.0-00-rolloverAndMigrateEventSession.groovy |  4 +-
 .../migrate-2.2.0-05-indicesReduction.groovy       | 78 ++++++++++++++++++++++
 .../requestBody/2.2.0/base_reindex_request.json    |  2 +-
 .../requestBody/2.2.0/suffix_ids.painless          | 19 ++++++
 5 files changed, 108 insertions(+), 8 deletions(-)

diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/utils/MigrationUtils.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/utils/MigrationUtils.java
index a12fd6ec7..2050d6ba5 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/utils/MigrationUtils.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/utils/MigrationUtils.java
@@ -173,8 +173,8 @@ public class MigrationUtils {
         return baseRequest.replace("#rolloverHotActions", 
rolloverHotActions.toString());
     }
 
-    public static void moveToIndex(CloseableHttpClient httpClient, 
BundleContext bundleContext, String esAddress, String sourceIndexName, String 
targetIndexName) throws Exception {
-        String reIndexRequest = resourceAsString(bundleContext, 
"requestBody/2.2.0/base_reindex_request.json").replace("#source", 
sourceIndexName).replace("#dest", targetIndexName);
+    public static void moveToIndex(CloseableHttpClient httpClient, 
BundleContext bundleContext, String esAddress, String sourceIndexName, String 
targetIndexName, String painlessScript) throws Exception {
+        String reIndexRequest = resourceAsString(bundleContext, 
"requestBody/2.2.0/base_reindex_request.json").replace("#source", 
sourceIndexName).replace("#dest", targetIndexName).replace("#painless", 
StringUtils.isNotEmpty(painlessScript) ? getScriptPart(painlessScript) : "");
 
         HttpUtils.executePostRequest(httpClient, esAddress + "/_reindex", 
reIndexRequest, null);
     }
@@ -225,10 +225,13 @@ public class MigrationUtils {
                 HttpUtils.executeDeleteRequest(httpClient, esAddress + "/" + 
indexNameCloned, null);
             }
         });
-        // Do a refresh
-        HttpUtils.executePostRequest(httpClient, esAddress + "/" + indexName + 
"/_refresh", null, null);
 
-        waitForYellowStatus(httpClient, esAddress, migrationContext);
+        migrationContext.performMigrationStep("Reindex step for: " + indexName 
+ " (refresh at the end)", () -> {
+            // Do a refresh
+            HttpUtils.executePostRequest(httpClient, esAddress + "/" + 
indexName + "/_refresh", null, null);
+
+            waitForYellowStatus(httpClient, esAddress, migrationContext);
+        });
     }
 
     public static void scrollQuery(CloseableHttpClient httpClient, String 
esAddress, String queryURL, String query, String scrollDuration, ScrollCallback 
scrollCallback) throws IOException {
diff --git 
a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-00-rolloverAndMigrateEventSession.groovy
 
b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-00-rolloverAndMigrateEventSession.groovy
index a04a4b097..c692fa7a2 100644
--- 
a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-00-rolloverAndMigrateEventSession.groovy
+++ 
b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-00-rolloverAndMigrateEventSession.groovy
@@ -58,7 +58,7 @@ Collections.sort(eventSortedIndices)
 context.performMigrationStep("2.2.0-migrate-existing-events", () -> {
     MigrationUtils.cleanAllIndexWithRollover(context.getHttpClient(), 
bundleContext, esAddress, indexPrefix, "event")
     eventSortedIndices.each { eventIndex ->
-        MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, 
esAddress, eventIndex, indexPrefix + "-event")
+        MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, 
esAddress, eventIndex, indexPrefix + "-event", null)
         sleep(3000)
     }
 })
@@ -86,7 +86,7 @@ Collections.sort(sessionSortedIndices)
 context.performMigrationStep("2.2.0-migrate-existing-sessions", () -> {
     MigrationUtils.cleanAllIndexWithRollover(context.getHttpClient(), 
bundleContext, esAddress, indexPrefix, "session")
     sessionSortedIndices.each { sessionIndex ->
-        MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, 
esAddress, sessionIndex, indexPrefix + "-session")
+        MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, 
esAddress, sessionIndex, indexPrefix + "-session", null)
         sleep(3000)
     }
 })
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
new file mode 100644
index 000000000..8a07a5278
--- /dev/null
+++ 
b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.2.0-05-indicesReduction.groovy
@@ -0,0 +1,78 @@
+import org.apache.unomi.shell.migration.service.MigrationContext
+import org.apache.unomi.shell.migration.utils.HttpUtils
+import org.apache.unomi.shell.migration.utils.MigrationUtils
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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")
+
+context.performMigrationStep("2.2.0-create-systemItems-index", () -> {
+    if (!MigrationUtils.indexExists(context.getHttpClient(), esAddress, 
"${indexPrefix}-systemitems")) {
+        String mapping = 
MigrationUtils.extractMappingFromBundles(bundleContext, "systemItems.json")
+        String newIndexSettings = 
MigrationUtils.buildIndexCreationRequest(baseSettings, mapping, context, false)
+        HttpUtils.executePutRequest(context.getHttpClient(), esAddress + 
"/${indexPrefix}-systemitems", newIndexSettings, null)
+    }
+})
+
+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))
+            }
+            // move items
+            MigrationUtils.moveToIndex(context.getHttpClient(), bundleContext, 
esAddress, "${indexPrefix}-${indexToReduce.key}", 
"${indexPrefix}-${indexToReduce.value}", painless)
+            MigrationUtils.deleteIndex(context.getHttpClient(), esAddress, 
"${indexPrefix}-${indexToReduce.key}")
+            HttpUtils.executePostRequest(context.getHttpClient(), esAddress + 
"/${indexPrefix}-${indexToReduce.value}/_refresh", null, null);
+            MigrationUtils.waitForYellowStatus(context.getHttpClient(), 
esAddress, context);
+        }
+    })
+}
+
+
diff --git 
a/tools/shell-commands/src/main/resources/requestBody/2.2.0/base_reindex_request.json
 
b/tools/shell-commands/src/main/resources/requestBody/2.2.0/base_reindex_request.json
index ddcb79a5e..589e71084 100644
--- 
a/tools/shell-commands/src/main/resources/requestBody/2.2.0/base_reindex_request.json
+++ 
b/tools/shell-commands/src/main/resources/requestBody/2.2.0/base_reindex_request.json
@@ -4,5 +4,5 @@
   },
   "dest": {
     "index": "#dest"
-  }
+  }#painless
 }
diff --git 
a/tools/shell-commands/src/main/resources/requestBody/2.2.0/suffix_ids.painless 
b/tools/shell-commands/src/main/resources/requestBody/2.2.0/suffix_ids.painless
new file mode 100644
index 000000000..3b63549f6
--- /dev/null
+++ 
b/tools/shell-commands/src/main/resources/requestBody/2.2.0/suffix_ids.painless
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ctx._id = ctx._id + '#ID_SUFFIX';
+ctx._source.itemId = ctx._id;
\ No newline at end of file

Reply via email to