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

peacewong pushed a commit to branch dev-1.3.1
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git


The following commit(s) were added to refs/heads/dev-1.3.1 by this push:
     new aa5b14303 [Feature][LinkisManager] EC history, which records the 
status of the EC exit (#3381)
aa5b14303 is described below

commit aa5b14303be6f4ea4d4503d2fd180f3aeb113ca9
Author: peacewong <[email protected]>
AuthorDate: Fri Sep 16 19:21:13 2022 +0800

    [Feature][LinkisManager] EC history, which records the status of the EC 
exit (#3381)
    
    * ec history to record ec exit status
---
 .../am/restful/ECResourceInfoRestfulApi.java       |  1 +
 .../linkis/manager/am/restful/EMRestfulApi.java    | 44 +++++++----------
 .../manager/am/restful/EngineRestfulApi.java       | 22 +++++++--
 .../manager/am/service/ECResourceInfoService.java  |  2 +
 .../am/service/impl/ECResourceInfoServiceImpl.java | 12 ++++-
 .../manager/am/util/ECResourceInfoUtils.java       | 26 ++++++++++
 .../manager/am/vo/ECResourceInfoRecordVo.java      | 10 ++++
 .../am/manager/DefaultEngineNodeManager.scala      | 20 ++++++++
 .../manager/am/manager/EngineNodeManager.scala     |  2 +
 .../engine/DefaultEngineCreateService.scala        | 57 ++--------------------
 .../am/service/engine/EngineCreateService.scala    |  2 -
 .../rm/service/impl/DefaultResourceManager.scala   | 22 +++++++--
 .../rm/service/impl/ResourceLogService.scala       | 12 ++++-
 .../entity/persistence/ECResourceInfoRecord.java   | 10 ++++
 .../linkis/manager/dao/ECResourceRecordMapper.java |  2 +
 .../manager/dao/impl/ECResourceRecordMapper.xml    |  9 +++-
 linkis-dist/package/db/linkis_ddl.sql              |  1 +
 .../db/upgrade/1.3.1_schema/mysql/linkis_ddl.sql   |  1 +
 18 files changed, 162 insertions(+), 93 deletions(-)

diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/ECResourceInfoRestfulApi.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/ECResourceInfoRestfulApi.java
index 0ce055ddc..61c8eadce 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/ECResourceInfoRestfulApi.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/ECResourceInfoRestfulApi.java
@@ -52,6 +52,7 @@ import java.util.*;
         produces = {"application/json"})
 @RestController
 public class ECResourceInfoRestfulApi {
+
     @Autowired private ECResourceInfoService ecResourceInfoService;
 
     @ApiOperation(value = "get", notes = "get engineconn info ", response = 
Message.class)
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EMRestfulApi.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EMRestfulApi.java
index efc7f8e43..a4d670483 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EMRestfulApi.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EMRestfulApi.java
@@ -17,15 +17,27 @@
 
 package org.apache.linkis.manager.am.restful;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.linkis.common.ServiceInstance;
 import org.apache.linkis.common.utils.JsonUtils;
 import org.apache.linkis.manager.am.conf.AMConfiguration;
 import org.apache.linkis.manager.am.converter.DefaultMetricsConverter;
 import org.apache.linkis.manager.am.exception.AMErrorCode;
 import org.apache.linkis.manager.am.exception.AMErrorException;
+import org.apache.linkis.manager.am.manager.EngineNodeManager;
 import org.apache.linkis.manager.am.service.em.ECMOperateService;
 import org.apache.linkis.manager.am.service.em.EMInfoService;
-import org.apache.linkis.manager.am.service.engine.EngineCreateService;
 import org.apache.linkis.manager.am.utils.AMUtils;
 import org.apache.linkis.manager.am.vo.EMNodeVo;
 import org.apache.linkis.manager.common.entity.enumeration.NodeHealthy;
@@ -44,33 +56,13 @@ import 
org.apache.linkis.manager.label.exception.LabelErrorException;
 import org.apache.linkis.manager.label.service.NodeLabelService;
 import org.apache.linkis.server.Message;
 import org.apache.linkis.server.utils.ModuleUserUtils;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -87,7 +79,7 @@ public class EMRestfulApi {
 
     @Autowired private DefaultMetricsConverter defaultMetricsConverter;
 
-    @Autowired private EngineCreateService engineCreateService;
+    @Autowired private EngineNodeManager engineNodeManager;
 
     @Autowired private ECMOperateService ecmOperateService;
 
@@ -267,7 +259,7 @@ public class EMRestfulApi {
                 "User {} try to execute ECM Operation by EngineConn {}.",
                 userName,
                 serviceInstance);
-        EngineNode engineNode = 
engineCreateService.getEngineNode(serviceInstance);
+        EngineNode engineNode = 
engineNodeManager.getEngineNode(serviceInstance);
         Map<String, Object> parameters;
         try {
             parameters =
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EngineRestfulApi.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EngineRestfulApi.java
index 211ada180..1c0fbdc88 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EngineRestfulApi.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/restful/EngineRestfulApi.java
@@ -22,15 +22,20 @@ import org.apache.linkis.common.utils.ByteTimeUtils;
 import org.apache.linkis.manager.am.conf.AMConfiguration;
 import org.apache.linkis.manager.am.exception.AMErrorCode;
 import org.apache.linkis.manager.am.exception.AMErrorException;
+import org.apache.linkis.manager.am.manager.EngineNodeManager;
+import org.apache.linkis.manager.am.service.ECResourceInfoService;
 import org.apache.linkis.manager.am.service.engine.EngineCreateService;
 import org.apache.linkis.manager.am.service.engine.EngineInfoService;
 import org.apache.linkis.manager.am.service.engine.EngineOperateService;
 import org.apache.linkis.manager.am.service.engine.EngineStopService;
+import org.apache.linkis.manager.am.util.ECResourceInfoUtils;
 import org.apache.linkis.manager.am.utils.AMUtils;
 import org.apache.linkis.manager.am.vo.AMEngineNodeVo;
 import org.apache.linkis.manager.common.entity.enumeration.NodeStatus;
 import org.apache.linkis.manager.common.entity.node.AMEMNode;
+import org.apache.linkis.manager.common.entity.node.AMEngineNode;
 import org.apache.linkis.manager.common.entity.node.EngineNode;
+import 
org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord;
 import org.apache.linkis.manager.common.protocol.engine.EngineCreateRequest;
 import org.apache.linkis.manager.common.protocol.engine.EngineOperateRequest;
 import org.apache.linkis.manager.common.protocol.engine.EngineOperateResponse;
@@ -80,12 +85,16 @@ public class EngineRestfulApi {
 
     @Autowired private EngineCreateService engineCreateService;
 
+    @Autowired private EngineNodeManager engineNodeManager;
+
     @Autowired private EngineOperateService engineOperateService;
 
     @Autowired private NodeLabelService nodeLabelService;
 
     @Autowired private EngineStopService engineStopService;
 
+    @Autowired private ECResourceInfoService ecResourceInfoService;
+
     private final ObjectMapper objectMapper = new ObjectMapper();
 
     private LabelBuilderFactory stdLabelBuilderFactory =
@@ -146,7 +155,14 @@ public class EngineRestfulApi {
             throws AMErrorException {
         String userName = ModuleUserUtils.getOperationUser(req, 
"getEngineConn");
         ServiceInstance serviceInstance = getServiceInstance(jsonNode);
-        EngineNode engineNode = 
engineCreateService.getEngineNode(serviceInstance);
+        EngineNode engineNode = 
engineNodeManager.getEngineNodeInfo(serviceInstance);
+        if (null == engineNode) {
+            ECResourceInfoRecord ecInfo = 
ecResourceInfoService.getECResourceInfoRecordByInstance(serviceInstance.getInstance());
+            if (null == ecInfo) {
+                return Message.error("Instance does not exist " + 
serviceInstance);
+            }
+            engineNode = ECResourceInfoUtils.convertECInfoTOECNode(ecInfo);
+        }
         if (!userName.equals(engineNode.getOwner()) && !isAdmin(userName)) {
             return Message.error("You have no permission to access EngineConn 
" + serviceInstance);
         }
@@ -163,7 +179,7 @@ public class EngineRestfulApi {
         String userName =
                 ModuleUserUtils.getOperationUser(req, "killEngineConn:" + 
serviceInstance);
         logger.info("User {} try to kill engineConn {}.", userName, 
serviceInstance);
-        EngineNode engineNode = 
engineCreateService.getEngineNode(serviceInstance);
+        EngineNode engineNode = 
engineNodeManager.getEngineNode(serviceInstance);
         if (!userName.equals(engineNode.getOwner()) && !isAdmin(userName)) {
             return Message.error("You have no permission to kill EngineConn " 
+ serviceInstance);
         }
@@ -356,7 +372,7 @@ public class EngineRestfulApi {
         String userName = ModuleUserUtils.getOperationUser(req, 
"executeEngineConnOperation");
         ServiceInstance serviceInstance = getServiceInstance(jsonNode);
         logger.info("User {} try to execute Engine Operation {}.", userName, 
serviceInstance);
-        EngineNode engineNode = 
engineCreateService.getEngineNode(serviceInstance);
+        EngineNode engineNode = 
engineNodeManager.getEngineNode(serviceInstance);
         if (!userName.equals(engineNode.getOwner()) && !isAdmin(userName)) {
             return Message.error(
                     "You have no permission to execute Engine Operation " + 
serviceInstance);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/ECResourceInfoService.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/ECResourceInfoService.java
index f453b7a3a..44ac73e6e 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/ECResourceInfoService.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/ECResourceInfoService.java
@@ -26,6 +26,8 @@ public interface ECResourceInfoService {
 
   ECResourceInfoRecord getECResourceInfoRecord(String ticketId);
 
+  ECResourceInfoRecord getECResourceInfoRecordByInstance(String instance);
+
   void deleteECResourceInfoRecordByTicketId(String ticketId);
 
   void deleteECResourceInfoRecord(Integer id);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/impl/ECResourceInfoServiceImpl.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/impl/ECResourceInfoServiceImpl.java
index 1745682c9..6add30d47 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/impl/ECResourceInfoServiceImpl.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/service/impl/ECResourceInfoServiceImpl.java
@@ -42,15 +42,23 @@ public class ECResourceInfoServiceImpl implements 
ECResourceInfoService {
 
   @Override
   public ECResourceInfoRecord getECResourceInfoRecord(String ticketId) {
-    if (StringUtils.isNoneBlank(ticketId)) {
+    if (StringUtils.isNotBlank(ticketId)) {
       return ecResourceRecordMapper.getECResourceInfoRecord(ticketId);
     }
     return null;
   }
 
+  @Override
+  public ECResourceInfoRecord getECResourceInfoRecordByInstance(String 
instance) {
+    if (StringUtils.isNotBlank(instance)) {
+      return 
ecResourceRecordMapper.getECResourceInfoRecordByInstance(instance);
+    }
+    return null;
+  }
+
   @Override
   public void deleteECResourceInfoRecordByTicketId(String ticketId) {
-    if (StringUtils.isNoneBlank(ticketId)) {
+    if (StringUtils.isNotBlank(ticketId)) {
       logger.info("Start to delete ec:{} info ", ticketId);
       ecResourceRecordMapper.deleteECResourceInfoRecordByTicketId(ticketId);
     }
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/util/ECResourceInfoUtils.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/util/ECResourceInfoUtils.java
index f256f015d..cb4e79192 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/util/ECResourceInfoUtils.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/util/ECResourceInfoUtils.java
@@ -16,8 +16,13 @@
  */
 package org.apache.linkis.manager.am.util;
 
+import org.apache.linkis.common.ServiceInstance;
 import org.apache.linkis.common.utils.ByteTimeUtils;
+import org.apache.linkis.governance.common.conf.GovernanceCommonConf;
 import org.apache.linkis.manager.am.vo.ResourceVo;
+import org.apache.linkis.manager.common.entity.enumeration.NodeStatus;
+import org.apache.linkis.manager.common.entity.node.AMEMNode;
+import org.apache.linkis.manager.common.entity.node.AMEngineNode;
 import 
org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord;
 import org.apache.linkis.server.BDPJettyServerHelper;
 
@@ -69,4 +74,25 @@ public class ECResourceInfoUtils {
     }
     return resourceVo;
   }
+
+  public static AMEngineNode convertECInfoTOECNode(ECResourceInfoRecord 
ecInfo) {
+    AMEngineNode engineNode = new AMEngineNode();
+    AMEMNode ecmNode = new AMEMNode();
+    ServiceInstance ecmInstance = new ServiceInstance();
+    ecmInstance.setApplicationName(
+        GovernanceCommonConf.ENGINE_CONN_MANAGER_SPRING_NAME().getValue());
+    ecmInstance.setInstance(ecInfo.getEcmInstance());
+    ecmNode.setServiceInstance(ecmInstance);
+    engineNode.setEMNode(ecmNode);
+    ServiceInstance ecInstance = new ServiceInstance();
+    ecInstance.setInstance(ecInfo.getServiceInstance());
+    
ecInstance.setApplicationName(GovernanceCommonConf.ENGINE_CONN_SPRING_NAME().getValue());
+    engineNode.setServiceInstance(ecInstance);
+    engineNode.setOwner(ecInfo.getCreateUser());
+    engineNode.setNodeStatus(NodeStatus.valueOf(ecInfo.getStatus()));
+    engineNode.setTicketId(ecInfo.getTicketId());
+    engineNode.setStartTime(ecInfo.getCreateTime());
+    engineNode.setUpdateTime(ecInfo.getReleaseTime());
+    return engineNode;
+  }
 }
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/vo/ECResourceInfoRecordVo.java
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/vo/ECResourceInfoRecordVo.java
index 93b8c2aca..bb0e72c7a 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/vo/ECResourceInfoRecordVo.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/java/org/apache/linkis/manager/am/vo/ECResourceInfoRecordVo.java
@@ -54,6 +54,8 @@ public class ECResourceInfoRecordVo {
 
   private String engineType;
 
+  private String status;
+
   public ECResourceInfoRecordVo() {}
 
   public Integer getId() {
@@ -192,6 +194,14 @@ public class ECResourceInfoRecordVo {
     this.engineType = engineType;
   }
 
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
   @Override
   public String toString() {
     return "ECRHistroryListVo{"
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/DefaultEngineNodeManager.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/DefaultEngineNodeManager.scala
index 6f164f5ee..080145950 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/DefaultEngineNodeManager.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/DefaultEngineNodeManager.scala
@@ -21,6 +21,7 @@ import org.apache.linkis.common.ServiceInstance
 import org.apache.linkis.common.exception.LinkisRetryException
 import org.apache.linkis.common.utils.{Logging, RetryHandler, Utils}
 import org.apache.linkis.manager.am.conf.AMConfiguration
+import org.apache.linkis.manager.am.exception.{AMErrorCode, AMErrorException}
 import org.apache.linkis.manager.am.locker.EngineNodeLocker
 import org.apache.linkis.manager.common.constant.AMConstant
 import org.apache.linkis.manager.common.entity.enumeration.NodeStatus
@@ -31,6 +32,7 @@ import org.apache.linkis.manager.common.protocol.engine.{
   EngineOperateResponse
 }
 import 
org.apache.linkis.manager.label.builder.factory.LabelBuilderFactoryContext
+import org.apache.linkis.manager.label.entity.Label
 import org.apache.linkis.manager.label.entity.engine.EngineInstanceLabel
 import org.apache.linkis.manager.persistence.{
   LabelManagerPersistence,
@@ -289,4 +291,22 @@ class DefaultEngineNodeManager extends EngineNodeManager 
with Logging {
     engine.executeOperation(request)
   }
 
+  override def getEngineNodeInfo(serviceInstance: ServiceInstance): EngineNode 
= {
+    val engineNode = getEngineNode(serviceInstance)
+    if (engineNode != null) {
+      if (engineNode.getNodeStatus == null) {
+        val nodeMetric = 
nodeMetricManagerPersistence.getNodeMetrics(engineNode)
+        engineNode.setNodeStatus(
+          if (Option(nodeMetric).isDefined) 
NodeStatus.values()(nodeMetric.getStatus)
+          else NodeStatus.Starting
+        )
+      }
+      return engineNode
+    }
+    throw new AMErrorException(
+      AMErrorCode.NOT_EXISTS_ENGINE_CONN.getCode,
+      AMErrorCode.NOT_EXISTS_ENGINE_CONN.getMessage
+    )
+  }
+
 }
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/EngineNodeManager.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/EngineNodeManager.scala
index 4c20586fb..f628e1e47 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/EngineNodeManager.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/manager/EngineNodeManager.scala
@@ -33,6 +33,8 @@ trait EngineNodeManager {
 
   def getEngineNodeInfo(engineNode: EngineNode): EngineNode
 
+  def getEngineNodeInfo(serviceInstance: ServiceInstance): EngineNode
+
   def getEngineNodeInfoByDB(engineNode: EngineNode): EngineNode
 
   /**
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/DefaultEngineCreateService.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/DefaultEngineCreateService.scala
index 5a7da1d67..3c8b3279a 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/DefaultEngineCreateService.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/DefaultEngineCreateService.scala
@@ -24,7 +24,7 @@ import 
org.apache.linkis.governance.common.conf.GovernanceCommonConf
 import 
org.apache.linkis.governance.common.conf.GovernanceCommonConf.ENGINE_CONN_MANAGER_SPRING_NAME
 import org.apache.linkis.governance.common.utils.JobUtils
 import org.apache.linkis.manager.am.conf.{AMConfiguration, 
EngineConnConfigurationService}
-import org.apache.linkis.manager.am.exception.{AMErrorCode, AMErrorException}
+import org.apache.linkis.manager.am.exception.AMErrorException
 import org.apache.linkis.manager.am.label.EngineReuseLabelChooser
 import org.apache.linkis.manager.am.pointer.EngineConnPluginPointer
 import org.apache.linkis.manager.am.selector.{ECAvailableRule, NodeSelector}
@@ -41,15 +41,11 @@ import 
org.apache.linkis.manager.engineplugin.common.launch.entity.{
 import 
org.apache.linkis.manager.engineplugin.common.resource.TimeoutEngineResourceRequest
 import 
org.apache.linkis.manager.label.builder.factory.LabelBuilderFactoryContext
 import org.apache.linkis.manager.label.entity.{EngineNodeLabel, Label}
-import org.apache.linkis.manager.label.entity.engine.{EngineInstanceLabel, 
EngineTypeLabel}
+import org.apache.linkis.manager.label.entity.engine.EngineTypeLabel
 import org.apache.linkis.manager.label.entity.node.AliasServiceInstanceLabel
 import org.apache.linkis.manager.label.service.{NodeLabelService, 
UserLabelService}
 import org.apache.linkis.manager.label.utils.LabelUtils
-import org.apache.linkis.manager.persistence.{
-  NodeManagerPersistence,
-  NodeMetricManagerPersistence,
-  ResourceManagerPersistence
-}
+import org.apache.linkis.manager.persistence.NodeMetricManagerPersistence
 import org.apache.linkis.manager.rm.{AvailableResource, NotEnoughResource}
 import org.apache.linkis.manager.rm.service.ResourceManager
 import org.apache.linkis.manager.service.common.label.{LabelChecker, 
LabelFilter}
@@ -77,9 +73,6 @@ class DefaultEngineCreateService
   @Autowired
   private var nodeSelector: NodeSelector = _
 
-  @Autowired
-  private var engineRecycleService: EngineRecycleService = _
-
   @Autowired
   private var nodeLabelService: NodeLabelService = _
 
@@ -104,56 +97,12 @@ class DefaultEngineCreateService
   @Autowired
   private var nodeMetricManagerPersistence: NodeMetricManagerPersistence = _
 
-  @Autowired
-  private var resourceManagerPersistence: ResourceManagerPersistence = _
-
   @Autowired
   private var engineReuseLabelChoosers: util.List[EngineReuseLabelChooser] = _
 
-  @Autowired
-  private var nodeManagerPersistence: NodeManagerPersistence = _
-
   @Autowired
   private var engineStopService: EngineStopService = _
 
-  def getEngineNode(serviceInstance: ServiceInstance): EngineNode = {
-    val engineNode = getEngineNodeManager.getEngineNode(serviceInstance)
-    if (engineNode != null) {
-      if (engineNode.getNodeStatus == null) {
-        val nodeMetric = 
nodeMetricManagerPersistence.getNodeMetrics(engineNode)
-        engineNode.setNodeStatus(
-          if (Option(nodeMetric).isDefined) 
NodeStatus.values()(nodeMetric.getStatus)
-          else NodeStatus.Starting
-        )
-      }
-      return engineNode
-    }
-    val labels = 
resourceManagerPersistence.getLabelsByTicketId(serviceInstance.getInstance)
-    labels.asScala.foreach { label =>
-      LabelBuilderFactoryContext.getLabelBuilderFactory
-        .createLabel[Label[_]](label.getLabelKey, label.getStringValue) match {
-        case engineInstanceLabel: EngineInstanceLabel =>
-          val serviceInstance =
-            ServiceInstance(engineInstanceLabel.getServiceName, 
engineInstanceLabel.getInstance)
-          val engineNode = getEngineNodeManager.getEngineNode(serviceInstance)
-          if (engineNode != null) {
-            if (engineNode.getNodeStatus == null) {
-              engineNode.setNodeStatus(
-                NodeStatus
-                  
.values()(nodeMetricManagerPersistence.getNodeMetrics(engineNode).getStatus)
-              )
-            }
-            return engineNode
-          }
-        case _ =>
-      }
-    }
-    throw new AMErrorException(
-      AMErrorCode.NOT_EXISTS_ENGINE_CONN.getCode,
-      AMErrorCode.NOT_EXISTS_ENGINE_CONN.getMessage
-    )
-  }
-
   @Receiver
   @throws[LinkisRetryException]
   override def createEngine(
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/EngineCreateService.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/EngineCreateService.scala
index 5dfff08b9..8e90e222c 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/EngineCreateService.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/am/service/engine/EngineCreateService.scala
@@ -25,8 +25,6 @@ import org.apache.linkis.rpc.Sender
 
 trait EngineCreateService {
 
-  def getEngineNode(serviceInstance: ServiceInstance): EngineNode
-
   @throws[LinkisRetryException]
   def createEngine(engineCreateRequest: EngineCreateRequest, sender: Sender): 
EngineNode
 
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/DefaultResourceManager.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/DefaultResourceManager.scala
index 2729046e7..419854cda 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/DefaultResourceManager.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/DefaultResourceManager.scala
@@ -22,6 +22,7 @@ import org.apache.linkis.common.exception.LinkisRetryException
 import org.apache.linkis.common.utils.{Logging, Utils}
 import org.apache.linkis.governance.common.conf.GovernanceCommonConf
 import org.apache.linkis.manager.common.conf.RMConfiguration
+import org.apache.linkis.manager.common.entity.enumeration.NodeStatus
 import org.apache.linkis.manager.common.entity.node.{AMEMNode, AMEngineNode, 
InfoRMNode}
 import org.apache.linkis.manager.common.entity.persistence.{PersistenceLabel, 
PersistenceResource}
 import org.apache.linkis.manager.common.entity.resource._
@@ -521,7 +522,8 @@ class DefaultResourceManager extends ResourceManager with 
Logging with Initializ
                   labelContainer,
                   persistenceResource.getTicketId,
                   ChangeType.ENGINE_INIT,
-                  addedResource
+                  addedResource,
+                  NodeStatus.Running
                 )
               }
               resourceCheck(label, labelResource)
@@ -628,6 +630,18 @@ class DefaultResourceManager extends ResourceManager with 
Logging with Initializ
           s"No used resource found by engine 
${labelContainer.getEngineInstanceLabel}"
         )
       }
+      val node = new AMEngineNode()
+      
node.setServiceInstance(labelContainer.getEngineInstanceLabel.getServiceInstance)
+      val metrics = nodeMetricManagerPersistence.getNodeMetrics(node)
+      val status = if (null != metrics) {
+        NodeStatus.values()(metrics.getStatus)
+      } else {
+        logger.warn(
+          "EC {} status unknown",
+          labelContainer.getEngineInstanceLabel.getServiceInstance
+        )
+        NodeStatus.Failed
+      }
       labelContainer.getResourceLabels.asScala.foreach {
         case label: Label[_] =>
           Utils.tryCatch {
@@ -672,14 +686,16 @@ class DefaultResourceManager extends ResourceManager with 
Logging with Initializ
                       labelContainer,
                       persistenceResource.getTicketId,
                       ChangeType.ENGINE_CLEAR,
-                      usedResource.getUsedResource
+                      usedResource.getUsedResource,
+                      status
                     )
                   } else if (usedResource.getLockedResource != null) {
                     resourceLogService.recordUserResourceAction(
                       labelContainer,
                       persistenceResource.getTicketId,
                       ChangeType.ENGINE_CLEAR,
-                      usedResource.getLockedResource
+                      usedResource.getLockedResource,
+                      status
                     )
                   }
                 }
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/ResourceLogService.scala
 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/ResourceLogService.scala
index aa628cdb0..840637aed 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/ResourceLogService.scala
+++ 
b/linkis-computation-governance/linkis-manager/linkis-application-manager/src/main/scala/org/apache/linkis/manager/rm/service/impl/ResourceLogService.scala
@@ -19,6 +19,7 @@ package org.apache.linkis.manager.rm.service.impl
 
 import org.apache.linkis.common.utils.{Logging, Utils}
 import org.apache.linkis.governance.common.utils.ECPathUtils
+import org.apache.linkis.manager.common.entity.enumeration.NodeStatus
 import org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord
 import org.apache.linkis.manager.common.entity.resource.Resource
 import org.apache.linkis.manager.dao.ECResourceRecordMapper
@@ -28,6 +29,8 @@ import 
org.apache.linkis.manager.label.entity.engine.EngineInstanceLabel
 import org.apache.linkis.manager.rm.domain.RMLabelContainer
 import org.apache.linkis.manager.rm.utils.RMUtils
 
+import org.apache.commons.lang3.StringUtils
+
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Component
 
@@ -136,7 +139,8 @@ class ResourceLogService extends Logging {
       labelContainer: RMLabelContainer,
       ticketId: String,
       changeType: String,
-      resource: Resource
+      resource: Resource,
+      status: NodeStatus = NodeStatus.Starting
   ): Unit = if (RMUtils.RM_RESOURCE_ACTION_RECORD.getValue) Utils.tryAndWarn {
     val userCreatorEngineType: CombinedLabel =
       labelContainer.getCombinedUserCreatorEngineTypeLabel
@@ -183,6 +187,12 @@ class ResourceLogService extends Logging {
         }
         ecResourceInfoRecord.setReleaseTime(new Date(System.currentTimeMillis))
     }
+    if (
+        StringUtils.isBlank(ecResourceInfoRecord.getStatus) || !NodeStatus
+          .isCompleted(NodeStatus.toNodeStatus(ecResourceInfoRecord.getStatus))
+    ) {
+      ecResourceInfoRecord.setStatus(status.toString)
+    }
     ecResourceRecordMapper.updateECResourceInfoRecord(ecResourceInfoRecord)
   }
 
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/persistence/ECResourceInfoRecord.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/persistence/ECResourceInfoRecord.java
index fd2193948..e0772c32d 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/persistence/ECResourceInfoRecord.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-common/src/main/java/org/apache/linkis/manager/common/entity/persistence/ECResourceInfoRecord.java
@@ -54,6 +54,8 @@ public class ECResourceInfoRecord {
 
   private String logDirSuffix;
 
+  private String status;
+
   public ECResourceInfoRecord() {}
 
   public ECResourceInfoRecord(
@@ -199,6 +201,14 @@ public class ECResourceInfoRecord {
     this.createUser = createUser;
   }
 
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
   @Override
   public String toString() {
     return "ECResourceInfoRecord{"
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/ECResourceRecordMapper.java
 
b/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/ECResourceRecordMapper.java
index 3601561cd..be44bff16 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/ECResourceRecordMapper.java
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/ECResourceRecordMapper.java
@@ -30,6 +30,8 @@ public interface ECResourceRecordMapper {
 
   ECResourceInfoRecord getECResourceInfoRecord(@Param("ticketId") String 
ticketId);
 
+  ECResourceInfoRecord getECResourceInfoRecordByInstance(@Param("instance") 
String instance);
+
   void updateECResourceInfoRecord(ECResourceInfoRecord resourceActionRecord);
 
   void insertECResourceInfoRecord(ECResourceInfoRecord resourceActionRecord);
diff --git 
a/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/impl/ECResourceRecordMapper.xml
 
b/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/impl/ECResourceRecordMapper.xml
index 0e2b6956f..90d3165dc 100644
--- 
a/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/impl/ECResourceRecordMapper.xml
+++ 
b/linkis-computation-governance/linkis-manager/linkis-manager-persistence/src/main/java/org/apache/linkis/manager/dao/impl/ECResourceRecordMapper.xml
@@ -24,13 +24,17 @@
         SELECT * FROM linkis_cg_ec_resource_info_record WHERE ticket_id = 
#{ticketId}
     </select>
 
+    <select id="getECResourceInfoRecordByInstance" 
resultType="org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord">
+        SELECT * FROM linkis_cg_ec_resource_info_record WHERE service_instance 
= #{instance}
+    </select>
+
 
     <insert id="insertECResourceInfoRecord" flushCache="true" 
useGeneratedKeys="true" keyProperty="id" 
parameterType="org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord">
         INSERT INTO linkis_cg_ec_resource_info_record(label_value,create_user, 
ticket_id, service_instance, request_times, request_resource,
-                                                        used_times, 
used_resource, release_times, 
released_resource,release_time,used_time,ecm_instance,log_dir_suffix)
+                                                        used_times, 
used_resource, release_times, 
released_resource,release_time,used_time,ecm_instance,log_dir_suffix,status)
         VALUES 
(#{labelValue},#{createUser},#{ticketId},#{serviceInstance},#{requestTimes},
         #{requestResource},#{usedTimes},#{usedResource},
-        
#{releaseTimes},#{releasedResource},#{releaseTime},#{usedTime},#{ecmInstance},#{logDirSuffix})
+        
#{releaseTimes},#{releasedResource},#{releaseTime},#{usedTime},#{ecmInstance},#{logDirSuffix},#{status})
     </insert>
 
     <update id="updateECResourceInfoRecord" flushCache="true" 
parameterType="org.apache.linkis.manager.common.entity.persistence.ECResourceInfoRecord">
@@ -46,6 +50,7 @@
             <if test="requestResource != null">request_resource = 
#{requestResource},</if>
             <if test="releasedResource != null">released_resource = 
#{releasedResource},</if>
             <if test="ecmInstance != null">ecm_instance = #{ecmInstance},</if>
+            <if test="status != null">status = #{status},</if>
         </trim>
         <![CDATA[
         WHERE id = #{id}
diff --git a/linkis-dist/package/db/linkis_ddl.sql 
b/linkis-dist/package/db/linkis_ddl.sql
index 70a8b047a..36c7759c1 100644
--- a/linkis-dist/package/db/linkis_ddl.sql
+++ b/linkis-dist/package/db/linkis_ddl.sql
@@ -754,6 +754,7 @@ CREATE TABLE `linkis_cg_ec_resource_info_record` (
     `service_instance` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'ec 
instance info',
     `ecm_instance` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'ecm 
instance info ',
     `ticket_id` VARCHAR(100) NOT NULL COMMENT 'ec ticket id',
+    `status` varchar(50) DEFAULT NULL COMMENT 'EC status: 
Starting,Unlock,Locked,Idle,Busy,Running,ShuttingDown,Failed,Success',
     `log_dir_suffix` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'log 
path',
     `request_times` INT(8) COMMENT 'resource request times',
     `request_resource` VARCHAR(1020) COMMENT 'request resource',
diff --git a/linkis-dist/package/db/upgrade/1.3.1_schema/mysql/linkis_ddl.sql 
b/linkis-dist/package/db/upgrade/1.3.1_schema/mysql/linkis_ddl.sql
index 5696c77be..370876a2b 100644
--- a/linkis-dist/package/db/upgrade/1.3.1_schema/mysql/linkis_ddl.sql
+++ b/linkis-dist/package/db/upgrade/1.3.1_schema/mysql/linkis_ddl.sql
@@ -22,6 +22,7 @@
 ALTER TABLE `linkis_ps_dm_datasource_env` ADD CONSTRAINT `env_name` UNIQUE 
(`env_name`);
 ALTER TABLE `linkis_ps_dm_datasource_env` MODIFY COLUMN `parameter` 
varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL;
 
+ALTER TABLE `linkis_cg_ec_resource_info_record` ADD COLUMN `status` 
varchar(50) DEFAULT NULL COMMENT 'EC status: 
Starting,Unlock,Locked,Idle,Busy,Running,ShuttingDown,Failed,Success';
 -- ----------------------------
 -- Alter table structure for linkis_ps_dm_datasource
 -- ----------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to