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);
     }
   }