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]