You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/08/10 02:20:16 UTC
[incubator-servicecomb-java-chassis] 02/06: [SCB-793] check if
deploy completed by read boot log.
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 7839fcfa7d27a9cfbe815c5de625aa69aca19229
Author: wujimin <wu...@huawei.com>
AuthorDate: Wed Aug 8 22:01:16 2018 +0800
[SCB-793] check if deploy completed by read boot log.
---
.../it-common/src/main/resources/logback.xml | 2 +-
.../servicecomb/it/deploy/DeployDefinition.java | 10 ++++++
.../servicecomb/it/deploy/MicroserviceDeploy.java | 13 ++++---
.../apache/servicecomb/it/deploy/NormalDeploy.java | 24 ++++++++-----
.../servicecomb/it/deploy/SubProcessLogger.java | 40 +++++++++++++++++++++-
5 files changed, 75 insertions(+), 14 deletions(-)
diff --git a/integration-tests/it-common/src/main/resources/logback.xml b/integration-tests/it-common/src/main/resources/logback.xml
index dfdfa92..d753514 100644
--- a/integration-tests/it-common/src/main/resources/logback.xml
+++ b/integration-tests/it-common/src/main/resources/logback.xml
@@ -23,7 +23,7 @@
<pattern>%d [%level] [%thread] - %msg (%F:%L\)%n</pattern>
</encoder>
</appender>
- <root level="WARN">
+ <root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
\ No newline at end of file
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/DeployDefinition.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/DeployDefinition.java
index dfdc158..f685e47 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/DeployDefinition.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/DeployDefinition.java
@@ -23,6 +23,8 @@ public class DeployDefinition {
protected String displayName;
+ protected String startCompleteLog;
+
/**
* <pre>
* edge as the example:
@@ -57,6 +59,14 @@ public class DeployDefinition {
this.displayName = displayName;
}
+ public String getStartCompleteLog() {
+ return startCompleteLog;
+ }
+
+ public void setStartCompleteLog(String startCompleteLog) {
+ this.startCompleteLog = startCompleteLog;
+ }
+
public String getCmd() {
return cmd;
}
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java
index 0276882..2892c51 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/MicroserviceDeploy.java
@@ -16,6 +16,7 @@
*/
package org.apache.servicecomb.it.deploy;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.servicecomb.it.ITUtils;
import org.apache.servicecomb.serviceregistry.RegistryUtils;
import org.apache.servicecomb.serviceregistry.consumer.MicroserviceVersionRule;
@@ -30,11 +31,8 @@ public class MicroserviceDeploy extends NormalDeploy {
public MicroserviceDeploy(DeployDefinition deployDefinition) {
super(deployDefinition);
this.microserviceDeployDefinition = (MicroserviceDeployDefinition) deployDefinition;
- }
- @Override
- public void deploy() throws Throwable {
- super.deploy();
+ this.microserviceDeployDefinition.setStartCompleteLog("ServiceComb is ready.");
}
@Override
@@ -42,6 +40,12 @@ public class MicroserviceDeploy extends NormalDeploy {
return new String[] {"java", "-jar", deployDefinition.getCmd()};
}
+ @Override
+ protected String[] addArgs(String[] cmds) {
+ return ArrayUtils.addAll(super.addArgs(cmds),
+ "-DselfController=" + RegistryUtils.getMicroserviceInstance().getInstanceId());
+ }
+
public void ensureReady() throws Throwable {
MicroserviceVersionRule microserviceVersionRule = RegistryUtils.getServiceRegistry().getAppManager()
.getOrCreateMicroserviceVersionRule(microserviceDeployDefinition.getAppId(),
@@ -53,6 +57,7 @@ public class MicroserviceDeploy extends NormalDeploy {
}
deploy();
+ waitStartComplete();
ITUtils.waitMicroserviceReady(microserviceDeployDefinition.getAppId(),
microserviceDeployDefinition.getMicroserviceName(),
microserviceDeployDefinition.getVersion(),
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/NormalDeploy.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/NormalDeploy.java
index f750f1e..146ea5e 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/NormalDeploy.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/NormalDeploy.java
@@ -23,7 +23,6 @@ import java.io.OutputStreamWriter;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.apache.servicecomb.serviceregistry.RegistryUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,13 +43,17 @@ public class NormalDeploy {
public void deploy() throws Throwable {
String[] cmds = createCmds();
- cmds = ArrayUtils.addAll(cmds, deployDefinition.getArgs());
- cmds = ArrayUtils.addAll(cmds,
- "-DselfController=" + RegistryUtils.getMicroserviceInstance().getInstanceId());
+ cmds = addArgs(cmds);
subProcess = createProcessBuilder(cmds).start();
subProcessCommandWriter = new BufferedWriter(new OutputStreamWriter(subProcess.getOutputStream()));
- subProcessLogger = new SubProcessLogger(deployDefinition.getDisplayName(), subProcess.getInputStream());
+ subProcessLogger = new SubProcessLogger(deployDefinition.getDisplayName(), subProcess.getInputStream(),
+ deployDefinition.getStartCompleteLog());
+ }
+
+ protected String[] addArgs(String[] cmds) {
+ cmds = ArrayUtils.addAll(cmds, deployDefinition.getArgs());
+ return cmds;
}
protected String[] createCmds() {
@@ -61,6 +64,10 @@ public class NormalDeploy {
return new ProcessBuilder(cmds).redirectErrorStream(true);
}
+ public void waitStartComplete() {
+ subProcessLogger.waitStartComplete();
+ }
+
public void sendCommand(Object command) {
String strCmd = null;
try {
@@ -82,7 +89,7 @@ public class NormalDeploy {
public void waitStop() {
if (subProcess == null) {
- LOGGER.info("Ignore, already stop, displayName={}.", deployDefinition.getDisplayName());
+ LOGGER.info("Ignore, already stop or reusing exist instance, displayName={}.", deployDefinition.getDisplayName());
return;
}
@@ -98,17 +105,18 @@ public class NormalDeploy {
subProcess = null;
afterStop();
- LOGGER.info("finished stop {}.", deployDefinition.getDisplayName());
+ LOGGER.info("stop complete, displayName={}.", deployDefinition.getDisplayName());
}
public void stop() {
if (subProcess == null) {
- LOGGER.info("Ignore, already stop, displayName={}.", deployDefinition.getDisplayName());
+ LOGGER.info("Ignore, already stop or reusing exist instance, displayName={}.", deployDefinition.getDisplayName());
return;
}
subProcess.destroy();
subProcess = null;
afterStop();
+ LOGGER.info("stop complete, displayName={}.", deployDefinition.getDisplayName());
}
}
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/SubProcessLogger.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/SubProcessLogger.java
index 0189eef..86d7f69 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/SubProcessLogger.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/deploy/SubProcessLogger.java
@@ -22,7 +22,9 @@ import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.util.concurrent.TimeUnit;
+import org.apache.servicecomb.it.ITUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,8 +37,13 @@ public class SubProcessLogger implements Closeable {
private Thread thread;
- public SubProcessLogger(String displayName, InputStream inputStream) {
+ private String startCompleteLog;
+
+ private volatile boolean startCompleted;
+
+ public SubProcessLogger(String displayName, InputStream inputStream, String startCompleteLog) {
this.displayName = displayName;
+ this.startCompleteLog = startCompleteLog;
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
this.reader = new BufferedReader(new InputStreamReader(bufferedInputStream));
@@ -58,6 +65,37 @@ public class SubProcessLogger implements Closeable {
while ((line = reader.readLine()) != null) {
System.out.print(String.format("[%s] ", displayName));
System.out.println(line);
+
+ checkStartComplete(line);
+ }
+ }
+
+ private void checkStartComplete(String line) {
+ if (startCompleted || startCompleteLog == null) {
+ return;
+ }
+
+ startCompleted = line.contains(startCompleteLog);
+ }
+
+ public boolean isStartCompleted() {
+ return startCompleted;
+ }
+
+ public void waitStartComplete() {
+ if (startCompleteLog == null) {
+ throw new IllegalStateException(
+ String.format("[%s] not set startCompleteLog, can not wait start complete.", displayName));
+ }
+
+ LOGGER.info("waiting {} start.", displayName);
+ for (; ; ) {
+ if (startCompleted) {
+ LOGGER.info("{} start completed.", displayName);
+ return;
+ }
+
+ ITUtils.forceWait(TimeUnit.MILLISECONDS, 500);
}
}