I fix bug related to running multiple versions of the same module on Jemo. Also updated the jemo pom/image version to 1.0.1
diff --git a/core/Dockerfile b/core/Dockerfile
index 8261ac1..54d2be2 100644
--- a/core/Dockerfile
+++ b/core/Dockerfile
@@ -1,5 +1,5 @@
FROM openjdk:8-jre-alpine
WORKDIR /
-ADD target/jemo-1.0.jar jemo-1.0.jar
+ADD target/jemo-*.jar jemo.jar
EXPOSE 80 443
-CMD java -jar jemo-1.0.jar
\ No newline at end of file
+CMD java -jar jemo.jar
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
index c7f523e..fe17cc3 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -22,7 +22,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.jemo</groupId>
<artifactId>jemo</artifactId>
- <version>1.0</version>
+ <version>1.0.1</version>
<packaging>jar</packaging>
<properties>
@@ -293,8 +293,6 @@
<configuration>
<archive>
<manifest>
- <!--<addClasspath>true</addClasspath>-->
- <!--<classpathPrefix>libs/</classpathPrefix>-->
<mainClass>
org.eclipse.jemo.Jemo
</mainClass>
diff --git a/core/src/main/java/org/eclipse/jemo/AbstractJemo.java b/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
index b8040c3..22277bf 100644
--- a/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
+++ b/core/src/main/java/org/eclipse/jemo/AbstractJemo.java
@@ -362,8 +362,6 @@
} else {
onSuccessfulValidation(provider.getRuntime());
}
- //we need to initialize our plugins/modules first and once they are there we will receive messages which they can process as a result
- pluginManager = new JemoPluginManager(this);
//http comes next as we need an operational system for synchronous processing before asynchronous processing can begin.
httpServer = new JemoHTTPConnector(JEMO_HTTPS_PORT, JEMO_HTTP_PORT, this);
@@ -498,6 +496,11 @@
//we should initialize the authentication layer before starting the plugin manager as all plugins will require authorisation
JemoAuthentication.init(this);
+
+ IS_IN_INSTALLATION_MODE = false;
+
+ //we need to initialize our plugins/modules first and once they are there we will receive messages which they can process as a result
+ pluginManager = new JemoPluginManager(this);
}
public synchronized void stop() throws Exception {
@@ -617,7 +620,7 @@
return moduleBatchList;
}
- public void sendRunBatchMessage(int moduleId, String moduleImplementation, String targetInstanceQueueUrl) {
+ public void sendRunBatchMessage(int moduleId, String moduleImplementation, double version, String targetInstanceQueueUrl) {
Util.B(null, y -> {
pluginManager.runWithModuleContext(Void.class, x -> {
JemoMessage scheduleMsg = new JemoMessage();
@@ -625,6 +628,7 @@
scheduleMsg.setPluginId(moduleId);
scheduleMsg.getAttributes().put("module_class", moduleImplementation);
scheduleMsg.send(targetInstanceQueueUrl);
+ scheduleMsg.setPluginVersion(version);
return null;
});
});
diff --git a/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java b/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
index 7df475a..223b42b 100644
--- a/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
+++ b/core/src/main/java/org/eclipse/jemo/internal/model/AmazonAWSRuntime.java
@@ -1695,7 +1695,7 @@
.containers(asList(
new V1Container()
.name("jemo")
- .image("eclipse/jemo:0.2")
+ .image("eclipse/jemo:1.0.1")
.env(asList(
new V1EnvVar().name(REGION.label()).value(AWSREGION),
new V1EnvVar().name(CLOUD.label()).value("AWS"),
diff --git a/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java b/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
index df95b1e..a9bdf90 100644
--- a/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
+++ b/core/src/main/java/org/eclipse/jemo/internal/model/ServerMessage.java
@@ -213,7 +213,7 @@
queueUrls.add(JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL());
break;
case JemoMessage.LOCATION_CLOUD:
- if(Arrays.asList(Jemo.CLOUD_LOCATIONS).stream().anyMatch(cl -> JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL().contains("/JEMO-"+cl.toUpperCase()))) {
+ if(Arrays.asList(Jemo.CLOUD_LOCATIONS).stream().anyMatch(cl -> JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL().toUpperCase().contains("/JEMO-"+cl.toUpperCase()))) {
queueUrls.add(JemoPluginManager.getServerInstance().getINSTANCE_QUEUE_URL());
}
break;
@@ -225,15 +225,15 @@
}
//make sure we are not sending to dead instances.
Set<String> activeInstances = JemoPluginManager.getServerInstance().getPluginManager().getActiveLocationList().stream()
- .flatMap(l -> JemoPluginManager.getServerInstance().getPluginManager().listInstances(l).stream().map(inst -> "JEMO-"+l+"-"+inst))
+ .flatMap(l -> JemoPluginManager.getServerInstance().getPluginManager().listInstances(l).stream().map(inst -> ("jemo-"+l+"-"+inst).toUpperCase()))
.collect(Collectors.toSet());
- queueUrls.removeIf(q -> !activeInstances.contains(CloudProvider.getInstance().getRuntime().getQueueName(q)));
+ queueUrls.removeIf(q -> !activeInstances.contains(CloudProvider.getInstance().getRuntime().getQueueName(q).toUpperCase()));
queueUrls.parallelStream().forEach((q) -> {
try {
String queueName = CloudProvider.getInstance().getRuntime().getQueueName(q);
- transmitMessage(message, q, queueName.substring(3,queueName.length()-37));
+ transmitMessage(message, q, queueName.substring(5,queueName.length()-37));
}catch(Throwable ex) {
Jemo.log(Level.FINE, "[%s][%s] could not broadcast message the queue probably does not exist: message body: %s error %s", q, location, msgJson, JemoError.toString(ex));
}
diff --git a/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java b/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
index 0ba4309..2de10e3 100644
--- a/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
+++ b/core/src/main/java/org/eclipse/jemo/sys/JemoPluginManager.java
@@ -411,7 +411,7 @@
protected static long PLUGIN_INSTALLED_ON(String jarFileName) {
try {
return CloudProvider.getInstance().getRuntime().getModuleInstallDate(jarFileName);
- } catch (IOException ioEx) {
+ } catch (Exception e) {
return System.currentTimeMillis();
}
}
@@ -542,7 +542,7 @@
Set<JemoModule> moduleSet = appList.stream()
.flatMap(app -> Util.F(null, x -> loadModules(app.getId()).stream()))
.filter(m -> m.getModule().getClass().getName().equals(msg.getModuleClass()))
- .filter(m -> msg.getPluginVersion() != 0 ? m.getModule().getVersion() == msg.getPluginVersion() : m.getModule().getVersion() == version)
+ .filter(m -> msg.getPluginVersion() != 0 ? m.getMetaData().getVersion() == msg.getPluginVersion() : m.getMetaData().getVersion() == version)
.collect(Collectors.toSet());
JemoModule module = moduleSet.stream().limit(1).findAny().orElse(null);
diff --git a/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java b/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
index cb16bf5..0e62d3a 100644
--- a/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
+++ b/core/src/main/java/org/eclipse/jemo/sys/JemoScheduler.java
@@ -241,7 +241,7 @@
Map<String,List<String>> moduleInstanceTargetMap = moduleInstanceMap.entrySet().stream()
.filter(e -> !e.getValue().isEmpty())
.map(e -> {
- final KeyValue<List<String>> result = new KeyValue<>(e.getKey().getImplementation(),new ArrayList<>());
+ final KeyValue<List<String>> result = new KeyValue<>(e.getKey().getImplementation() + "_" + e.getKey().getVersion(),new ArrayList<>());
ModuleActivityMap modActivity = activityMap.stream().filter(act -> act.module.getImplementation().equals(e.getKey().getImplementation()) && act.module.getId() == e.getKey().getId())
.findAny().orElse(null);
if(modActivity != null) {
@@ -281,15 +281,16 @@
.forEach(e -> {
final String queueUrl = instanceQueueUrlList.stream().filter(qId -> qId.endsWith(e.getKey())).findFirst().orElse(e.getKey());
if(queueUrl != null) {
+ final String[] moduleClassNameAndVersion = e.getValue().split("_");
final int moduleId = instanceModuleMap.values().stream()
.flatMap(List::stream)
- .filter(m -> m.getImplementation().equals(e.getValue()))
+ .filter(m -> m.getImplementation().equals(moduleClassNameAndVersion[0]))
.findAny()
.map(m -> m.getId())
.orElse(-1);
if(moduleId != -1) {
if(RUNNING.get()) {
- jemoServer.sendRunBatchMessage(moduleId, e.getValue(), queueUrl);
+ jemoServer.sendRunBatchMessage(moduleId, moduleClassNameAndVersion[0], Double.parseDouble(moduleClassNameAndVersion[1]), queueUrl);
}
}
}
diff --git a/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml b/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
index e9ab10c..30ac4b2 100644
--- a/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
+++ b/core/src/main/resources/aws/cluster/kubernetes/jemo-statefulset.yaml
@@ -15,7 +15,7 @@
spec:
containers:
- name: jemo
- image: eclipse/jemo:0.2
+ image: eclipse/jemo:1.0.1
env:
- name: eclipse.jemo.csp.region
value: "_REGION_"
diff --git a/core/src/main/resources/runtime-jars/azure-runtime.jar b/core/src/main/resources/runtime-jars/azure-runtime.jar
index 767fdee..2a21daf 100644
--- a/core/src/main/resources/runtime-jars/azure-runtime.jar
+++ b/core/src/main/resources/runtime-jars/azure-runtime.jar
Binary files differ