You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2018/10/30 16:41:40 UTC
[airavata] branch develop updated: Adding logging and waiting
feature for parser container execution logic
This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/develop by this push:
new 71518b8 Adding logging and waiting feature for parser container execution logic
71518b8 is described below
commit 71518b8a4e76c2d073b4496881966be7ca408383
Author: Dimuthu Wannipurage <di...@datasprouts.com>
AuthorDate: Tue Oct 30 12:41:29 2018 -0400
Adding logging and waiting feature for parser container execution logic
---
.../helix/impl/task/parsing/DataParsingTask.java | 30 +++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/parsing/DataParsingTask.java b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/parsing/DataParsingTask.java
index 37a1b56..01ed365 100644
--- a/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/parsing/DataParsingTask.java
+++ b/modules/airavata-helix/helix-spectator/src/main/java/org/apache/airavata/helix/impl/task/parsing/DataParsingTask.java
@@ -21,9 +21,13 @@ package org.apache.airavata.helix.impl.task.parsing;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
+import com.github.dockerjava.api.command.LogContainerCmd;
import com.github.dockerjava.api.model.Bind;
+import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientBuilder;
+import com.github.dockerjava.core.command.LogContainerResultCallback;
+import com.github.dockerjava.core.command.WaitContainerResultCallback;
import org.apache.airavata.agents.api.AgentException;
import org.apache.airavata.agents.api.StorageResourceAdaptor;
import org.apache.airavata.common.exception.ApplicationSettingsException;
@@ -53,7 +57,6 @@ import org.apache.airavata.registry.api.RegistryService;
import org.apache.airavata.registry.api.client.RegistryServiceClientFactory;
import org.apache.airavata.registry.api.exception.RegistryServiceException;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.helix.task.TaskResult;
import org.apache.thrift.TException;
import org.slf4j.Logger;
@@ -62,6 +65,7 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.net.URI;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -215,11 +219,12 @@ public class DataParsingTask extends AbstractTask {
CreateContainerResponse containerResponse = dockerClient.createContainerCmd(parserInfo.getImageName()).withCmd("/bin/sh", "-c", parserInfo.getExecutionCommand()).withName(containerId)
.withBinds(Bind.parse(localInputDir + ":" + parserInfo.getInputDirPath()),
- Bind.parse(localOutputDir + ":" + parserInfo.getOutputDirPath())).withTty(true).exec();
-
+ Bind.parse(localOutputDir + ":" + parserInfo.getOutputDirPath())).withTty(true).withAttachStdin(true).withAttachStdout(true).exec();
logger.info("Created the container with id " + containerResponse.getId());
+ final StringBuilder dockerLogs = new StringBuilder();
+
if (containerResponse.getWarnings() != null) {
StringBuilder warningStr = new StringBuilder();
for (String w : containerResponse.getWarnings()) {
@@ -229,7 +234,26 @@ public class DataParsingTask extends AbstractTask {
} else {
logger.info("Starting container with id " + containerResponse.getId());
dockerClient.startContainerCmd(containerResponse.getId()).exec();
+ LogContainerCmd logContainerCmd = dockerClient.logContainerCmd(containerResponse.getId()).withStdOut(true).withStdErr(true);
+
+
+ try {
+ logContainerCmd.exec(new LogContainerResultCallback() {
+ @Override
+ public void onNext(Frame item) {
+ dockerLogs.append(item.toString());
+ dockerLogs.append("\n");
+ }
+ }).awaitCompletion();
+ } catch (InterruptedException e) {
+ logger.error("Interrupted while reading container log" + e.getMessage());
+ }
+
+ logger.info("Waiting for the container to stop");
+ Integer statusCode = dockerClient.waitContainerCmd(containerResponse.getId()).exec(new WaitContainerResultCallback()).awaitStatusCode();
+ logger.info("Container " + containerResponse.getId() + " exited with status code " + statusCode);
+ logger.info("Container logs " + dockerLogs.toString());
}
dockerClient.removeContainerCmd(containerResponse.getId()).exec();