Skip to content

Commit aa23ab9

Browse files
author
李浩
committed
Merge branch 'hotfix-1.3.7' into hotfix-2.0.9
2 parents 56ac0ae + 6c2bee2 commit aa23ab9

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

src/main/java/io/choerodon/devops/api/ws/host/HostAgentSocketHandler.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.Map;
77
import java.util.Objects;
8+
import java.util.concurrent.TimeUnit;
89
import javax.annotation.PostConstruct;
910

1011
import org.hzero.websocket.constant.ClientWebSocketConstant;
@@ -40,6 +41,8 @@
4041
public class HostAgentSocketHandler extends AbstractSocketHandler {
4142

4243
private static final Logger LOGGER = LoggerFactory.getLogger(HostAgentSocketHandler.class);
44+
private static final String C7N_AGENT_UPGRADE_COUNT_REDIS_KEY = "host:%s";
45+
private static final Integer C7N_AGENT_MAX_UPGRADE_ATTEMPT_COUNT = 3;
4346

4447
private final Map<String, HostMsgHandler> hostMsgHandlerMap = new HashMap<>();
4548

@@ -83,15 +86,29 @@ public void afterConnectionEstablished(WebSocketSession session) {
8386
MsgVO msgVO;
8487
// 版本不一致,需要升级
8588
if (!agentVersion.equals(WebSocketTool.getVersion(session))) {
86-
DevopsHostDTO devopsHostDTO = devopsHostService.baseQuery(Long.parseLong(hostId));
87-
HostMsgVO hostMsgVO = new HostMsgVO();
88-
hostMsgVO.setType(HostCommandEnum.UPGRADE_AGENT.value());
89-
Map<String, String> upgradeInfo = new HashMap<>();
90-
upgradeInfo.put("upgradeCommand", devopsHostService.getUpgradeString(devopsHostDTO.getProjectId(), devopsHostDTO));
91-
upgradeInfo.put("version", agentVersion);
92-
hostMsgVO.setPayload(JsonHelper.marshalByJackson(upgradeInfo));
93-
94-
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.UPGRADE_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
89+
String redisKey = String.format(C7N_AGENT_UPGRADE_COUNT_REDIS_KEY, hostId);
90+
Integer count = (Integer) redisTemplate.opsForValue().get(redisKey);
91+
if (C7N_AGENT_MAX_UPGRADE_ATTEMPT_COUNT.equals(count)) {
92+
// 表示agent进行了3次尝试升级,都失败了,那么agent应该退出。手动处理升级失败问题
93+
HostMsgVO hostMsgVO = new HostMsgVO();
94+
hostMsgVO.setType(HostCommandEnum.EXIT_AGENT.value());
95+
hostMsgVO.setPayload("{}");
96+
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.EXIT_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
97+
} else {
98+
if (count == null) {
99+
count = 0;
100+
}
101+
count++;
102+
redisTemplate.opsForValue().set(redisKey, count, 1800, TimeUnit.SECONDS);
103+
DevopsHostDTO devopsHostDTO = devopsHostService.baseQuery(Long.parseLong(hostId));
104+
HostMsgVO hostMsgVO = new HostMsgVO();
105+
hostMsgVO.setType(HostCommandEnum.UPGRADE_AGENT.value());
106+
Map<String, String> upgradeInfo = new HashMap<>();
107+
upgradeInfo.put("upgradeCommand", devopsHostService.getUpgradeString(devopsHostDTO.getProjectId(), devopsHostDTO));
108+
upgradeInfo.put("version", agentVersion);
109+
hostMsgVO.setPayload(JsonHelper.marshalByJackson(upgradeInfo));
110+
msgVO = (new MsgVO()).setGroup(DevopsHostConstants.GROUP + hostId).setKey(HostCommandEnum.UPGRADE_AGENT.value()).setMessage(JsonHelper.marshalByJackson(hostMsgVO)).setType(ClientWebSocketConstant.SendType.S_GROUP);
111+
}
95112
} else {
96113
HostMsgVO hostMsgVO = new HostMsgVO();
97114
hostMsgVO.setType(HostCommandEnum.INIT_AGENT.value());

src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class DevopsHostServiceImpl implements DevopsHostService {
6969
private static final String ERROR_HOST_STATUS_IS_NOT_DISCONNECT = "error.host.status.is.not.disconnect";
7070
private static final String LOGIN_NAME = "loginName";
7171
private static final String REAL_NAME = "realName";
72-
private static final String HOST_AGENT = "curl -o host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh %s";
72+
private static final String HOST_AGENT = "curl -Lo host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh %s";
7373
private static final String HOST_UNINSTALL_SHELL = "sudo systemctl stop c7n-agent";
7474
private static final String HOST_ACTIVATE_COMMAND_TEMPLATE;
7575
private static final String HOST_UPGRADE_COMMAND_TEMPLATE;

src/main/java/io/choerodon/devops/infra/enums/host/HostCommandEnum.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public enum HostCommandEnum {
3939
KILL_MIDDLEWARE("kill_middleware"),
4040
INIT_AGENT("init_agent"),
4141
UPGRADE_AGENT("upgrade_agent"),
42+
EXIT_AGENT("exit_agent"),
4243
INIT_AGENT_FAILED("init_agent_failed"),
4344
/**
4445
* 该事件返回command结果

src/main/resources/shell/host.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ sudo chmod 0777 ${WORK_DIR}/c7n-agent.sh
6767

6868
# 4. 下载执行程序
6969
echo "Downloading c7n-agent"
70-
curl -o ${TAR_FILE} "{{ BINARY }}"
70+
curl -Lo ${TAR_FILE} "{{ BINARY }}"
7171

7272
rm -rf /var/choerodon/c7n-agent
7373

0 commit comments

Comments
 (0)