You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by pe...@apache.org on 2023/12/13 04:11:55 UTC

(linkis) branch master updated: Fix repl get task result bug (#5036)

This is an automated email from the ASF dual-hosted git repository.

peacewong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git


The following commit(s) were added to refs/heads/master by this push:
     new 7766933ea Fix repl get task result bug (#5036)
7766933ea is described below

commit 7766933eacc255de0084abae6cd9954809fe414b
Author: ChengJie1053 <18...@163.com>
AuthorDate: Wed Dec 13 12:11:50 2023 +0800

    Fix repl get task result bug (#5036)
    
    * Fix repl get task result bug
    
    * Fix repl get task result bug
---
 .../repl/executor/ReplEngineConnExecutor.java      | 30 ++++++++++++++++++
 .../repl/executor/javarepl/JavaReplCompiler.java   |  2 +-
 .../repl/src/main/resources/repl-ec.md             | 37 ++++++++++++++++++++++
 3 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/ReplEngineConnExecutor.java b/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/ReplEngineConnExecutor.java
index bf7201cb6..81f014e03 100644
--- a/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/ReplEngineConnExecutor.java
+++ b/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/ReplEngineConnExecutor.java
@@ -17,6 +17,9 @@
 
 package org.apache.linkis.engineplugin.repl.executor;
 
+import org.apache.linkis.common.io.MetaData;
+import org.apache.linkis.common.io.Record;
+import org.apache.linkis.common.io.resultset.ResultSetWriter;
 import org.apache.linkis.common.log.LogUtils;
 import org.apache.linkis.common.utils.OverloadUtils;
 import org.apache.linkis.engineconn.computation.executor.entity.EngineConnTask;
@@ -36,15 +39,23 @@ import org.apache.linkis.manager.label.entity.engine.EngineTypeLabel;
 import org.apache.linkis.manager.label.entity.engine.UserCreatorLabel;
 import org.apache.linkis.protocol.engine.JobProgressInfo;
 import org.apache.linkis.rpc.Sender;
+import org.apache.linkis.scheduler.executer.ErrorExecuteResponse;
 import org.apache.linkis.scheduler.executer.ExecuteResponse;
 import org.apache.linkis.scheduler.executer.SuccessExecuteResponse;
+import org.apache.linkis.storage.LineMetaData;
+import org.apache.linkis.storage.LineRecord;
+import org.apache.linkis.storage.resultset.ResultSetFactory;
 
 import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 
 import org.springframework.util.CollectionUtils;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -132,14 +143,33 @@ public class ReplEngineConnExecutor extends ConcurrentComputationExecutor {
 
     threadCache.put(taskId, Thread.currentThread());
 
+    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);
+    PrintStream cacheStream = new PrintStream(outputStream);
+    PrintStream oldStream = System.out;
+    System.setOut(cacheStream);
+
     try {
       replAdapter.executorCode(realCode, classpathDir, methodName);
     } catch (Exception e) {
       String errorMessage = ExceptionUtils.getStackTrace(e);
       logger.error("Repl engine execute failed : {}", errorMessage);
       engineExecutorContext.appendStdout(LogUtils.generateERROR(errorMessage));
+      return new ErrorExecuteResponse(errorMessage, null);
     }
 
+    String message = outputStream.toString();
+    System.setOut(oldStream);
+    engineExecutorContext.appendStdout(message);
+    ResultSetWriter<? extends MetaData, ? extends Record> resultSetWriter =
+        engineExecutorContext.createResultSetWriter(ResultSetFactory.TEXT_TYPE);
+    try {
+      resultSetWriter.addMetaData(new LineMetaData());
+      resultSetWriter.addRecord(new LineRecord(message));
+    } catch (IOException e) {
+      logger.error("Failed to get the task result");
+    } finally {
+      IOUtils.closeQuietly(resultSetWriter);
+    }
     return new SuccessExecuteResponse();
   }
 
diff --git a/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/javarepl/JavaReplCompiler.java b/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/javarepl/JavaReplCompiler.java
index 7be436973..9878ed502 100644
--- a/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/javarepl/JavaReplCompiler.java
+++ b/linkis-engineconn-plugins/repl/src/main/java/org/apache/linkis/engineplugin/repl/executor/javarepl/JavaReplCompiler.java
@@ -54,7 +54,7 @@ public class JavaReplCompiler {
       Pattern.compile("\\s+implements\\s+([\\w\\.]+)\\s*\\{\n");
 
   private static final Pattern METHODS_PATTERN =
-      Pattern.compile("\n(private|public|protected)\\s+");
+      Pattern.compile("(?<=\\})\\s+(private|public|protected)\\s+");
 
   private static final Pattern FIELD_PATTERN = Pattern.compile("[^\n]+=[^\n]+;");
 
diff --git a/linkis-engineconn-plugins/repl/src/main/resources/repl-ec.md b/linkis-engineconn-plugins/repl/src/main/resources/repl-ec.md
index 5eb8c6c1b..e04aec5d2 100644
--- a/linkis-engineconn-plugins/repl/src/main/resources/repl-ec.md
+++ b/linkis-engineconn-plugins/repl/src/main/resources/repl-ec.md
@@ -71,6 +71,43 @@ import org.apache.commons.lang3.StringUtils;
 }
 ```
 
+#### 1.3. Multiple methods
+
+```text
+import org.apache.commons.lang3.StringUtils;
+
+    public void sayHello() {
+        System.out.println("hello");
+        System.out.println(StringUtils.isEmpty("hello"));
+    }
+    public void sayHi() {
+        System.out.println("hi");
+        System.out.println(StringUtils.isEmpty("hi"));
+    }
+```
+
+```json
+{
+  "executionContent":{
+    "code":"import org.apache.commons.lang3.StringUtils;\n\n    public void sayHello() {\n        System.out.println(\"hello\");\n        System.out.println(StringUtils.isEmpty(\"hello\"));\n    }\n     public void sayHi() {\n        System.out.println(\"hi\");\n        System.out.println(StringUtils.isEmpty(\"hi\"));\n    }",
+    "runType":"repl"
+  },
+  "params":{
+    "configuration":{
+      "runtime":{
+        "linkis.repl.type":"java",
+        "linkis.repl.method.name":"sayHi"
+      }
+    }
+  },
+  "labels":{
+    "engineType":"repl-1",
+    "userCreator":"linkis-IDE"
+  }
+}
+```
+
+
 ### 2. Submitting scala tasks with Restful API
 
 ```text


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org