This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch improveMigrationSystem
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/improveMigrationSystem by this
push:
new 29a3f83b0 UNOMI-626: improve migration system to prepare Unomi 2.0.0
data models migrations
29a3f83b0 is described below
commit 29a3f83b00e22e629f259f3dbd829c29c701bfbd
Author: Kevan <[email protected]>
AuthorDate: Fri Jul 8 15:49:48 2022 +0200
UNOMI-626: improve migration system to prepare Unomi 2.0.0 data models
migrations
---
.../apache/unomi/shell/migration/Migration.java | 2 +-
.../{MigrateScript.java => MigrationScript.java} | 35 ++++++++++++++++------
.../unomi/shell/migration/actions/Migrate.java | 26 ++++++++--------
.../unomi/shell/migration/impl/MigrationTo122.java | 1 -
4 files changed, 40 insertions(+), 24 deletions(-)
diff --git
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
index 998ed3def..8a64882ce 100644
---
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
+++
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
@@ -25,7 +25,7 @@ import java.util.Map;
/**
* @author dgaillard
- * @deprecated do groovy script for implementing new migrations
+ * @deprecated use groovy script for implementing new migrations
*/
public interface Migration {
/**
diff --git
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
similarity index 69%
rename from
tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
rename to
tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
index a8e6ef958..d2dc304ed 100644
---
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
+++
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
@@ -18,6 +18,7 @@ package org.apache.unomi.shell.migration;
import groovy.lang.Script;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.osgi.framework.Bundle;
@@ -25,9 +26,20 @@ import org.osgi.framework.Version;
import java.io.IOException;
import java.net.URL;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
-public class MigrateScript implements Comparable<MigrateScript> {
+/**
+ * Java bean representing a migration script, current implementation support
groovy script as migration script
+ * following file name pattern need to be respected:
+ * migrate-VERSION-PRIORITY-NAME.groovy
+ *
+ * example:
+ * migrate-2.0.0-01-segmentReindex.groovy
+ */
+public class MigrationScript implements Comparable<MigrationScript> {
+ private static final Pattern SCRIPT_FILENAME_PATTERN =
Pattern.compile("^migrate-(\\d.\\d.\\d)-(\\d+)-(\\w+).groovy$");
private final String script;
private Script compiledScript;
@@ -36,16 +48,21 @@ public class MigrateScript implements
Comparable<MigrateScript> {
private final int priority;
private final String name;
- public MigrateScript(URL scriptURL, Bundle bundle) throws IOException {
+ public MigrationScript(URL scriptURL, Bundle bundle) throws IOException {
this.bundle = bundle;
this.script = IOUtils.toString(scriptURL);
- // parse file name expected format is:
migrate-VERSION-PRIORITY-NAME.groovy like: migrate-1.2.1-00-migrateTags.groovy
String path = scriptURL.getPath();
- String[] splitName = path.substring(path.lastIndexOf("/"),
path.lastIndexOf(".groovy")).split("-");
- this.version = new Version(splitName[1]);
- this.priority = Integer.parseInt(splitName[2]);
- this.name = splitName[3];
+ String fileName = StringUtils.substringAfterLast(path, "/");
+ Matcher m = SCRIPT_FILENAME_PATTERN.matcher(fileName);
+ if (m.find()) {
+ this.version = new Version(m.group(1));
+ this.priority = Integer.parseInt(m.group(2));
+ this.name = m.group(3);
+ } else {
+ throw new IllegalStateException("Migration script file name do not
respect the expected format: " + fileName +
+ ". Expected format is:
migrate-VERSION-PRIORITY-NAME.groovy. Example:
migrate-2.0.0-01-segmentReindex.groovy");
+ }
}
public Script getCompiledScript() {
@@ -86,7 +103,7 @@ public class MigrateScript implements
Comparable<MigrateScript> {
}
@Override
- public int compareTo(MigrateScript other) {
+ public int compareTo(MigrationScript other) {
int result = version.compareTo(other.getVersion());
if (result != 0) {
return result;
@@ -106,7 +123,7 @@ public class MigrateScript implements
Comparable<MigrateScript> {
if (o == null || getClass() != o.getClass()) return false;
- MigrateScript that = (MigrateScript) o;
+ MigrationScript that = (MigrationScript) o;
return new EqualsBuilder().append(priority,
that.priority).append(version, that.version).append(name, that.name).isEquals();
}
diff --git
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
index a8fcca430..d325cee56 100644
---
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
+++
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
@@ -26,7 +26,7 @@ import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.lifecycle.Reference;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.apache.karaf.shell.api.console.Session;
-import org.apache.unomi.shell.migration.MigrateScript;
+import org.apache.unomi.shell.migration.MigrationScript;
import org.apache.unomi.shell.migration.utils.ConsoleUtils;
import org.apache.unomi.shell.migration.utils.HttpUtils;
import org.osgi.framework.*;
@@ -58,7 +58,7 @@ public class Migrate implements Action {
public Object execute() throws Exception {
// Load migration scrips
- Set<MigrateScript> scripts = loadOSGIScripts();
+ Set<MigrationScript> scripts = loadOSGIScripts();
scripts.addAll(loadFileSystemScripts());
if (originVersion == null) {
@@ -98,7 +98,7 @@ public class Migrate implements Action {
// Start migration
ConsoleUtils.printMessage(session, "Starting migration process
from version: " + originVersion);
- for (MigrateScript migrateScript : scripts) {
+ for (MigrationScript migrateScript : scripts) {
ConsoleUtils.printMessage(session, "Starting execution of: " +
migrateScript);
try {
migrateScript.getCompiledScript().run();
@@ -114,9 +114,9 @@ public class Migrate implements Action {
return null;
}
- private void displayMigrations(Set<MigrateScript> scripts) {
+ private void displayMigrations(Set<MigrationScript> scripts) {
Version previousVersion = new Version("0.0.0");
- for (MigrateScript migration : scripts) {
+ for (MigrationScript migration : scripts) {
if (migration.getVersion().getMajor() > previousVersion.getMajor()
|| migration.getVersion().getMinor() > previousVersion.getMinor()) {
ConsoleUtils.printMessage(session, "From " +
migration.getVersion().getMajor() + "." + migration.getVersion().getMinor() +
".0:");
}
@@ -125,13 +125,13 @@ public class Migrate implements Action {
}
}
- private Set<MigrateScript> filterScriptsFromVersion(Set<MigrateScript>
scripts, Version fromVersion) {
+ private Set<MigrationScript> filterScriptsFromVersion(Set<MigrationScript>
scripts, Version fromVersion) {
return scripts.stream()
.filter(migrateScript ->
fromVersion.compareTo(migrateScript.getVersion()) < 0)
.collect(Collectors.toCollection(TreeSet::new));
}
- private Set<MigrateScript> parseScripts(Set<MigrateScript> scripts,
Session session, CloseableHttpClient httpClient, Map<String, Object>
migrationConfig) {
+ private Set<MigrationScript> parseScripts(Set<MigrationScript> scripts,
Session session, CloseableHttpClient httpClient, Map<String, Object>
migrationConfig) {
Map<String, GroovyShell> shellsPerBundle = new HashMap<>();
return scripts.stream()
@@ -146,8 +146,8 @@ public class Migrate implements Action {
.collect(Collectors.toCollection(TreeSet::new));
}
- private Set<MigrateScript> loadOSGIScripts() throws IOException {
- SortedSet<MigrateScript> migrationScripts = new TreeSet<>();
+ private Set<MigrationScript> loadOSGIScripts() throws IOException {
+ SortedSet<MigrationScript> migrationScripts = new TreeSet<>();
for (Bundle bundle : bundleContext.getBundles()) {
Enumeration<URL> scripts =
bundle.findEntries("META-INF/cxs/migration", "*.groovy", true);
if (scripts != null) {
@@ -155,7 +155,7 @@ public class Migrate implements Action {
while (scripts.hasMoreElements()) {
URL scriptURL = scripts.nextElement();
- migrationScripts.add(new MigrateScript(scriptURL, bundle));
+ migrationScripts.add(new MigrationScript(scriptURL,
bundle));
}
}
}
@@ -163,7 +163,7 @@ public class Migrate implements Action {
return migrationScripts;
}
- private Set<MigrateScript> loadFileSystemScripts() throws IOException {
+ private Set<MigrationScript> loadFileSystemScripts() throws IOException {
// check migration folder exists
Path migrationFolder = Paths.get(System.getProperty( "karaf.data" ),
"migration", "scripts");
if (!Files.isDirectory(migrationFolder)) {
@@ -178,9 +178,9 @@ public class Migrate implements Action {
.collect(Collectors.toList());
}
- SortedSet<MigrateScript> migrationScripts = new TreeSet<>();
+ SortedSet<MigrationScript> migrationScripts = new TreeSet<>();
for (Path path : paths) {
- migrationScripts.add(new MigrateScript(path.toUri().toURL(),
null));
+ migrationScripts.add(new MigrationScript(path.toUri().toURL(),
null));
}
return migrationScripts;
}
diff --git
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
index 242a0d5f6..b371f8a0d 100644
---
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
+++
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
@@ -28,7 +28,6 @@ import org.osgi.service.component.annotations.Component;
import java.io.IOException;
import java.util.Map;
-@Component
public class MigrationTo122 implements Migration {
private CloseableHttpClient httpClient;
private Session session;