diff --git a/.gitignore b/.gitignore
index be3bf956..e35e1023 100755
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,6 @@
/*.iml
/dependency-reduced-pom.xml
/Dockerfile
+.classpath
+.project
+.settings
diff --git a/pom.xml b/pom.xml
index 21b6b073..25f9074a 100755
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
org.hobbit
hobbit-java-sdk
- 1.1.18
+ 1.1.19-SNAPSHOT
UTF-8
@@ -69,7 +69,7 @@
org.hobbit
platform-controller
- 2.0.5
+ 2.0.15
test
@@ -101,7 +101,7 @@
com.spotify
docker-client
- 8.11.7
+ 8.16.0
diff --git a/src/main/java/org/hobbit/sdk/utils/CommandQueueListener.java b/src/main/java/org/hobbit/sdk/utils/CommandQueueListener.java
index f7ad2141..d429599f 100755
--- a/src/main/java/org/hobbit/sdk/utils/CommandQueueListener.java
+++ b/src/main/java/org/hobbit/sdk/utils/CommandQueueListener.java
@@ -1,24 +1,14 @@
package org.hobbit.sdk.utils;
-import com.rabbitmq.client.AMQP;
-import com.rabbitmq.client.QueueingConsumer;
-import org.hobbit.core.Commands;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Semaphore;
+
+import org.hobbit.core.Constants;
import org.hobbit.core.components.AbstractPlatformConnectorComponent;
-import org.hobbit.core.data.StartCommandData;
-import org.hobbit.core.rabbit.RabbitMQUtils;
import org.hobbit.sdk.utils.commandreactions.CommandReaction;
-import org.hobbit.core.Constants;
-import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Objects;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Semaphore;
-
/**
* @author Roman Katerinenko
*/
@@ -29,9 +19,11 @@ public class CommandQueueListener extends AbstractPlatformConnectorComponent {
private final Semaphore terminationSemaphore = new Semaphore(0, true);
private final CountDownLatch countDownLatch = new CountDownLatch(1);
- private CommandReaction[] commandReactions=new CommandReaction[0];
+ private CommandReaction[] commandReactions = new CommandReaction[0];
private String replyTo;
- private final EnvironmentVariables environmentVariables = new EnvironmentVariables();
+// private final EnvironmentVariables environmentVariables = new EnvironmentVariables();
+
+ private boolean catchedExceptions = false;
@Override
public void init() throws Exception {
@@ -50,27 +42,30 @@ public void run() throws Exception {
logger.debug("Terminated");
}
- public String submit(String imageName, String[] envVariables){
+ public String submit(String imageName, String[] envVariables) {
return super.createContainer(imageName, envVariables);
}
- public String createContainer(String imageName, String[] envVariables){
+ public String createContainer(String imageName, String[] envVariables) {
return super.createContainer(imageName, envVariables);
}
- public String createContainer(String imageName, String containerType, String[] envVariables){
+ public String createContainer(String imageName, String containerType, String[] envVariables) {
String ret = super.createContainer(imageName, containerType, envVariables);
return ret;
}
-
// @Override
protected void handleCmd(byte[] bytes, String replyTo) {
this.replyTo = replyTo;
- super.handleCmd(bytes, replyTo);
+ try {
+ super.handleCmd(bytes, replyTo);
+ } catch (Throwable e) {
+ logger.error("Catched exception while handling command.", e);
+ catchedExceptions = true;
+ }
}
-
public void waitForInitialisation() throws InterruptedException {
countDownLatch.await();
}
@@ -94,10 +89,15 @@ public void receiveCommand(byte command, byte[] data) {
for (CommandReaction commandReaction : commandReactions) {
try {
commandReaction.handleCmd(command, data, replyTo);
- } catch (Exception e) {
- logger.error("Failed to handle command with {}",commandReaction.getClass().getSimpleName(), e);
+ } catch (Throwable e) {
+ logger.error("Failed to handle command with {}", commandReaction.getClass().getSimpleName(), e);
+ catchedExceptions = true;
}
}
}
+ public boolean anyExceptions() {
+ return catchedExceptions;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/org/hobbit/sdk/utils/commandreactions/BenchmarkSignalsReaction.java b/src/main/java/org/hobbit/sdk/utils/commandreactions/BenchmarkSignalsReaction.java
index cbead10c..051e4b98 100755
--- a/src/main/java/org/hobbit/sdk/utils/commandreactions/BenchmarkSignalsReaction.java
+++ b/src/main/java/org/hobbit/sdk/utils/commandreactions/BenchmarkSignalsReaction.java
@@ -1,6 +1,8 @@
package org.hobbit.sdk.utils.commandreactions;
import com.google.gson.Gson;
+
+import org.apache.jena.rdf.model.ModelFactory;
import org.hobbit.core.Commands;
import org.hobbit.core.components.Component;
import org.hobbit.core.rabbit.RabbitMQUtils;
@@ -15,7 +17,6 @@
import java.util.List;
import java.util.Map;
-
public class BenchmarkSignalsReaction implements CommandReaction {
private static final Logger logger = LoggerFactory.getLogger(BenchmarkSignalsReaction.class);
@@ -51,23 +52,23 @@ public class BenchmarkSignalsReaction implements CommandReaction {
private boolean startBenchmarkCommandSent = false;
private Map customContainers = new HashMap<>();
private Map customContainersRunning = new HashMap<>();
- //private String systemContainerId = null;
+ // private String systemContainerId = null;
- public BenchmarkSignalsReaction(CommandReactionsBuilder builder){
+ public BenchmarkSignalsReaction(CommandReactionsBuilder builder) {
this.componentsExecutor = builder.componentsExecutor;
this.commandQueueListener = builder.commandQueueListener;
- this.benchmarkController=builder.benchmarkController;
- this.dataGenerator=builder.dataGenerator;
- this.taskGenerator=builder.taskGenerator;
- this.evalStorage=builder.evalStorage;
- this.evalModule=builder.evalModule;
- this.systemAdapter=builder.systemAdapter;
+ this.benchmarkController = builder.benchmarkController;
+ this.dataGenerator = builder.dataGenerator;
+ this.taskGenerator = builder.taskGenerator;
+ this.evalStorage = builder.evalStorage;
+ this.evalModule = builder.evalModule;
+ this.systemAdapter = builder.systemAdapter;
this.benchmarkControllerImageName = builder.benchmarkControllerImageName;
this.dataGeneratorImageName = builder.dataGeneratorImageName;
this.taskGeneratorImageName = builder.taskGeneratorImageName;
- this.evalStorageImageName = builder.evalStorageImageName ;
+ this.evalStorageImageName = builder.evalStorageImageName;
this.evalModuleImageName = builder.evalModuleImageName;
this.systemAdapterImageName = builder.systemAdapterImageName;
this.customContainers = builder.customContainers;
@@ -76,18 +77,19 @@ public BenchmarkSignalsReaction(CommandReactionsBuilder builder){
@Override
public void handleCmd(Byte command, byte[] bytes, String replyTo) throws Exception {
- if (command == Commands.BENCHMARK_FINISHED_SIGNAL){
+ if (command == Commands.BENCHMARK_FINISHED_SIGNAL) {
logger.debug("BENCHMARK_FINISHED_SIGNAL received");
try {
assert bytes != null;
assert bytes.length != 0;
componentsExecutor.resultModel = RabbitMQUtils.readModel(bytes);
-
+ } catch (Throwable e) {
+ // The exception will be handled somewhere else. However, we should make sure
+ // that there is some model set
+ componentsExecutor.resultModel = ModelFactory.createDefaultModel();
+ } finally {
commandQueueListener.terminate();
componentsExecutor.shutdown();
- } catch (InterruptedException e) {
- System.out.println(e.getMessage());
- //Assert.fail(e.getMessage());
}
}
@@ -114,37 +116,38 @@ public void handleCmd(Byte command, byte[] bytes, String replyTo) throws Excepti
if (command == Commands.SYSTEM_READY_SIGNAL) {
systemReady = true;
logger.debug("SYSTEM_READY_SIGNAL signal received");
- if(!System.getenv().containsKey("SYSTEM_CONTAINER_ID"))
- throw new Exception("SYSTEM_CONTAINER_ID is not specified as env variable. Specify it where you submit system/create system container in checkHealth");
+ if (!System.getenv().containsKey("SYSTEM_CONTAINER_ID"))
+ throw new Exception(
+ "SYSTEM_CONTAINER_ID is not specified as env variable. Specify it where you submit system/create system container in checkHealth");
}
- synchronized (this){
+ synchronized (this) {
List waitForComponents = new ArrayList<>();
- if(!benchmarkReady)
+ if (!benchmarkReady)
waitForComponents.add("benchmarkController");
- if(dataGenerator!=null && !dataGenReady)
+ if (dataGenerator != null && !dataGenReady)
waitForComponents.add("dataGenerator");
- if(taskGenerator!=null && !taskGenReady)
+ if (taskGenerator != null && !taskGenReady)
waitForComponents.add("taskGenerator");
- if(evalStorage!=null && !evalStorageReady)
+ if (evalStorage != null && !evalStorageReady)
waitForComponents.add("evalStorage");
- if(!systemReady)
+ if (!systemReady)
waitForComponents.add("systemAdapter");
- if(waitForComponents.size()>0)
+ if (waitForComponents.size() > 0)
logger.debug("Waiting ready signals for {}", String.join(", ", waitForComponents));
- else if (!startBenchmarkCommandSent){
+ else if (!startBenchmarkCommandSent) {
logger.debug("sending START_BENCHMARK_SIGNAL");
try {
- new CommandSender(Commands.START_BENCHMARK_SIGNAL, System.getenv().get("SYSTEM_CONTAINER_ID")).send();
+ new CommandSender(Commands.START_BENCHMARK_SIGNAL, System.getenv().get("SYSTEM_CONTAINER_ID"))
+ .send();
startBenchmarkCommandSent = true;
} catch (Exception e) {
logger.error("Failed to send START_BENCHMARK_SIGNAL: {}", e.getMessage());
- //Assert.fail(e.getMessage());
+ // Assert.fail(e.getMessage());
}
}
}
}
-
}
diff --git a/src/main/java/org/hobbit/sdk/utils/commandreactions/CommandReactionsBuilder.java b/src/main/java/org/hobbit/sdk/utils/commandreactions/CommandReactionsBuilder.java
index 88b35168..2fa33489 100755
--- a/src/main/java/org/hobbit/sdk/utils/commandreactions/CommandReactionsBuilder.java
+++ b/src/main/java/org/hobbit/sdk/utils/commandreactions/CommandReactionsBuilder.java
@@ -90,10 +90,11 @@ public CommandReactionsBuilder systemAdapterImageName(String value){
}
public CommandReactionsBuilder customContainerImage(Component component, String imageName){
- String[] splitted = imageName.split("/");
- String cleanedImageName=splitted[splitted.length-1].split(":")[0];
-
- customContainers.put(cleanedImageName, component);
+// String[] splitted = imageName.split("/");
+// String cleanedImageName=splitted[splitted.length-1].split(":")[0];
+//
+// customContainers.put(cleanedImageName, component);
+ customContainers.put(imageName, component);
return this;
}
diff --git a/src/main/java/org/hobbit/sdk/utils/commandreactions/ContainerCommandsReaction.java b/src/main/java/org/hobbit/sdk/utils/commandreactions/ContainerCommandsReaction.java
index a4bf17f0..7927be66 100755
--- a/src/main/java/org/hobbit/sdk/utils/commandreactions/ContainerCommandsReaction.java
+++ b/src/main/java/org/hobbit/sdk/utils/commandreactions/ContainerCommandsReaction.java
@@ -129,8 +129,8 @@ public void handleCmd(Byte command, byte[] bytes, String replyTo) throws Excepti
compToSubmit = systemAdapter;
containerId = cleanedImageName+"_"+systemContainersCount;
systemContainersCount++;
- }else if(customContainers.containsKey(cleanedImageName)){
- compToSubmit = customContainers.get(cleanedImageName);
+ }else if(customContainers.containsKey(startCommandData.image)){
+ compToSubmit = customContainers.get(startCommandData.image);
int runningCustomContainersCount = (customContainersRunning.containsKey(cleanedImageName)? customContainersRunning.get(cleanedImageName)+1 :0);
containerId = cleanedImageName+"_"+runningCustomContainersCount;
customContainersRunning.put(cleanedImageName, runningCustomContainersCount);
diff --git a/src/test/java/org/hobbit/sdk/DummyBenchmarkTestRunner.java b/src/test/java/org/hobbit/sdk/DummyBenchmarkTestRunner.java
index 3343269e..03f91391 100644
--- a/src/test/java/org/hobbit/sdk/DummyBenchmarkTestRunner.java
+++ b/src/test/java/org/hobbit/sdk/DummyBenchmarkTestRunner.java
@@ -175,6 +175,7 @@ private void checkHealth(Boolean dockerize) throws Exception {
rabbitMqDockerizer.stop();
Assert.assertFalse(componentsExecutor.anyExceptions());
+ Assert.assertFalse(commandQueueListener.anyExceptions());
}
public static Model createBenchmarkParameters() throws IOException {