package com.alibaba.doris.admin.web.configer.module.action;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.citrus.service.form.CustomErrors;
import com.alibaba.citrus.turbine.Context;
import com.alibaba.citrus.turbine.Navigator;
import com.alibaba.citrus.turbine.dataresolver.FormField;
import com.alibaba.citrus.turbine.dataresolver.FormGroup;
import com.alibaba.doris.admin.core.AdminServiceLocator;
import com.alibaba.doris.admin.dataobject.PhysicalNodeDO;
import com.alibaba.doris.admin.service.AdminNodeService;
import com.alibaba.doris.admin.service.NodeValidatorService;
import com.alibaba.doris.admin.service.common.node.NodesManager;
import com.alibaba.doris.admin.web.configer.util.WebConstant;
public class NodeAddAction {
AdminNodeService adminNodeService = AdminServiceLocator.getAdminNodeService();
NodesManager nodesManager = NodesManager.getInstance();
NodeValidatorService nodeValidatorService = AdminServiceLocator.getNodeValidatorService();
/**
* XXME 相同的MachineID下面的Node,不可以分布在不同的序列里面,即一台物理机里面的Node肯定是分布在同一个序列里面? XXME
* 另外,在新增Node的时候,不需要给LogincID、SerialID及Status赋值,那么是否应该将DB中的整数类型设置为VARCHAR?LogicID的自然有序需要教授在save DB的时候来保证
*/
public void doAddNode(@FormGroup("physicalNode") PhysicalNodeDO physicalNodeDO,
@FormField(name = "physicalIdError", group = "physicalNode") CustomErrors physicalIdErr,
@FormField(name = "ipAndPortError", group = "physicalNode") CustomErrors ipAndPorterr,
Navigator nav, Context context) {
// XXME 需要保证逻辑ID的自然有序
boolean isExistPhysicalId = nodeValidatorService.checkPhysicalIdExist(physicalNodeDO);
if (isExistPhysicalId) {
ipAndPorterr.setMessage("ipAndPortRepeated");
return;
}
physicalNodeDO.setPhysicalId(physicalNodeDO.getIp() + ":" + physicalNodeDO.getPort());
adminNodeService.addPhysicalNode(physicalNodeDO);
nodesManager.reLoadNodes();
// XXME 需要处理保存失败的跳转以及提示等|len.liu
nav.redirectTo(WebConstant.NODE_MANAGE_LIST_LINK);
}
public void doEditNode(@FormGroup("physicalNode") PhysicalNodeDO physicalNodeDO,
@FormField(name = "physicalIdError", group = "physicalNode") CustomErrors physicalIdErr,
@FormField(name = "ipAndPortError", group = "physicalNode") CustomErrors ipAndPorterr,
Navigator nav, Context context, HttpServletRequest request) {
// XXME 需要保证逻辑ID的自然有序
Integer nodeId = Integer.parseInt(request.getParameter("nodeId"));
physicalNodeDO.setId(nodeId);
boolean isExistPhysicalId = nodeValidatorService.checkPhysicalIdExist4Edit(physicalNodeDO);
if (isExistPhysicalId) {
ipAndPorterr.setMessage("ipAndPortRepeated");
return;
}
physicalNodeDO.setPhysicalId(physicalNodeDO.getIp() + ":" + physicalNodeDO.getPort());
adminNodeService.updatePhysicalNodeByNodeId(physicalNodeDO);
nodesManager.reLoadNodes();
// XXME 需要处理保存失败的跳转以及提示等|len.liu
nav.redirectTo(WebConstant.NODE_MANAGE_LIST_LINK);
}
}