扫描新任务时,先过滤一次任务:任务含自己的节点时加入,否则直接将状态改为未能执行

This commit is contained in:
chenjinsong
2018-11-02 15:59:26 +08:00
parent c1742aa790
commit f779ad6886

View File

@@ -23,6 +23,7 @@ import com.nms.server.bean.LoopMissionRoundInfo;
import com.nms.server.bean.MissionResult;
import com.nms.server.bean.MissionResult2;
import com.nms.server.bean.MissionStateTable;
import com.nms.server.bean.ServerIpSegment;
import com.nms.server.bean.Task1;
import com.nms.server.bean.Task4;
import com.nms.server.bean.Task6;
@@ -90,19 +91,106 @@ public class UpgradeService extends CommonService{
try {
rs = dao.dbSelect(searchSQL.toString(), fields);
if(rs!=null && rs.size()>0){
Long serverId = Common.getServerTable().getId();
boolean missionSingle = Constants.MISSION_SINGLE.equals("1") ? true : false;
logger.info("开始加载新任务...过滤当前dc范围内的任务" + (missionSingle ? "" : ""));
//获取当前dc范围
List<ServerIpSegment> ipSegList = Common.getServerTable().getIpSegList();
for(Map<String, String> maps : rs){
MissionStateTable mission = new MissionStateTable();
// mission.setMissionName(maps.get("mission_name"));
mission.setMissionId(StringUtils.isEmpty(maps.get("mission_id"))?null:Long.parseLong(maps.get("mission_id")));
mission.setMissionType(StringUtils.isEmpty(maps.get("mission_type"))?null:Long.parseLong(maps.get("mission_type")) );
mission.setMissionState(StringUtils.isEmpty(maps.get("mission_state"))?null:Long.parseLong(maps.get("mission_state")));
mission.setSystemId(StringUtils.isEmpty(maps.get("system_id"))?null:Long.parseLong(maps.get("system_id")));
mission.setGroupId(StringUtils.isEmpty(maps.get("group_id"))?null:Long.parseLong(maps.get("group_id")));
mission.setStartTime(StringUtils.isEmpty(maps.get("start_time"))?null:format.parse(maps.get("start_time")));
mission.setEndTime(StringUtils.isEmpty(maps.get("end_time"))?null:format.parse(maps.get("end_time")));
mission.setLoopFlag(StringUtils.isEmpty(maps.get("is_loop"))?null:Long.parseLong(maps.get("is_loop")));
mission.setLoopDelay(StringUtils.isEmpty(maps.get("loop_delay"))?null:Long.parseLong(maps.get("loop_delay")));
mstList.add(mission);
//是否加载任务
boolean flag = false;
//第一步判断是否过滤dc范围外节点
if (missionSingle) {
logger.info("当前dc的server_id:" + serverId);
//第二步获取每个任务下发的所有节点判断是否在dc范围内若一个在范围内的都没有就把任务状态改为失败
//----查询任务下发的节点组ids/节点ids
String messionType = maps.get("mission_type");
StringBuffer mnSql = new StringBuffer();
mnSql.append("SELECT mpt.node_ips_id, mpt.node_groups_id ");
mnSql.append("FROM mission_state_table mst ");
mnSql.append("LEFT JOIN mission_parameter_table" + messionType + " mpt ON mpt.mission_id=mst.mission_id ");
mnSql.append("where mst.mission_id=" + maps.get("mission_id"));
ArrayList<String> mnFields = new ArrayList<String>();
mnFields.add("node_ips_id");
mnFields.add("node_groups_id");
ArrayList<Map<String, String>> mns = dao.dbSelect(mnSql.toString(), mnFields);
if (mns != null && mns.size() > 0) {
for (Map<String, String> mn : mns) {
//----根据节点组ids/节点ids查出seq_id
StringBuffer nodeSQL = new StringBuffer();
nodeSQL.append("select distinct nt.seq_id,nt.node_type ");
nodeSQL.append("from node_table nt ");
nodeSQL.append("where 1 = 1 ");
nodeSQL.append(" and nvl(nt.seq_id,-1)<> -1 ");
nodeSQL.append(" and nt.node_state = 0 ");
ArrayList<String> nodeFields = new ArrayList<String>();
nodeFields.add("seq_id");
nodeFields.add("node_type");
if(StringUtils.isNotBlank(mn.get("node_ips_id"))){
nodeSQL.append(" and nt.NODE_ID in(" + mn.get("node_ips_id") + ") ");
}else{
if(StringUtils.isNotBlank(mn.get("node_groups_id"))){
String startWithConnectBy = dao.startWithConnectBy("select nt.group_id from NODEGROUP_TABLE nt where nt.leaf_group = 1 ", " nt.group_id in (" + mn.get("node_groups_id") + ") ", "group_id", "parent_group_id");
nodeSQL.append(" and nt.node_group_id in( " + startWithConnectBy + ")");
}
}
ArrayList<Map<String, String>> nodeMapList = dao.dbSelect(nodeSQL.toString(), nodeFields);
//----拼写uuid串用于校验管理范围外IP
StringBuffer uuidStr = new StringBuffer("0");
if (nodeMapList != null && nodeMapList.size() > 0) {
for(Map<String, String> map : nodeMapList){
if(StringUtils.isNotEmpty(map.get("seq_id"))){
uuidStr.append("," + map.get("seq_id"));
}
}
}
logger.info("mission_id:" + maps.get("mission_id") + ",seq_id范围:" + uuidStr.toString());
StringBuffer omNodeSql = new StringBuffer("select distinct nt.seq_id from node_table nt where 1=1 ");
if(ipSegList!=null && ipSegList.size() > 0){
for(ServerIpSegment map : ipSegList){
omNodeSql.append(" and (ipn < '" + map.getStartIpn() + "' or ipn > '" + map.getEndIpn() + "')");
}
}
omNodeSql.append("and nt.seq_id in (" + uuidStr + ")");
ArrayList<String> omNodeFields = new ArrayList<String>();
omNodeFields.add("seq_id");
ArrayList<Map<String, String>> omNodeMapList = dao.dbSelect(omNodeSql.toString(), omNodeFields);
if (omNodeMapList != null && nodeMapList != null) {
if (omNodeMapList.size() < nodeMapList.size()) {
flag = true;
break;
}
}
}
}
} else {
flag = true;
}
//任务范围含有dc范围内节点则加载任务否则直接将任务状态改为未能执行
if (flag) {
logger.info("任务节点在dc范围内开始加载...");
MissionStateTable mission = new MissionStateTable();
// mission.setMissionName(maps.get("mission_name"));
mission.setMissionId(StringUtils.isEmpty(maps.get("mission_id"))?null:Long.parseLong(maps.get("mission_id")));
mission.setMissionType(StringUtils.isEmpty(maps.get("mission_type"))?null:Long.parseLong(maps.get("mission_type")) );
mission.setMissionState(StringUtils.isEmpty(maps.get("mission_state"))?null:Long.parseLong(maps.get("mission_state")));
mission.setSystemId(StringUtils.isEmpty(maps.get("system_id"))?null:Long.parseLong(maps.get("system_id")));
mission.setGroupId(StringUtils.isEmpty(maps.get("group_id"))?null:Long.parseLong(maps.get("group_id")));
mission.setStartTime(StringUtils.isEmpty(maps.get("start_time"))?null:format.parse(maps.get("start_time")));
mission.setEndTime(StringUtils.isEmpty(maps.get("end_time"))?null:format.parse(maps.get("end_time")));
mission.setLoopFlag(StringUtils.isEmpty(maps.get("is_loop"))?null:Long.parseLong(maps.get("is_loop")));
mission.setLoopDelay(StringUtils.isEmpty(maps.get("loop_delay"))?null:Long.parseLong(maps.get("loop_delay")));
mstList.add(mission);
} else {
String cancelSql = "update mission_state_table set mission_state=4 where mission_id=" + maps.get("mission_id");
dao.dbUpdate(cancelSql);
logger.info("任务节点不在dc范围内已取消");
}
}
}
return mstList;
@@ -902,8 +990,19 @@ public class UpgradeService extends CommonService{
}
//查询任务下发节点sql-管理范围外节点
boolean missionSingle = Constants.MISSION_SINGLE.equals("1") ? true : false;
StringBuffer msSql = new StringBuffer("");
if (missionSingle) {
Long serverId = Common.getServerTable().getId();
msSql.append("and sis.server_id=");
msSql.append(serverId);
msSql.append(" ");
}
ArrayList<String> ipnSegmentFields = new ArrayList<String>();
StringBuffer ipnSegmentSQL = new StringBuffer("select sis.start_ipn,sis.end_ipn from server_ip_segment sis left join server_table st on st.id = sis.server_id where st.server_state='0' and nvl(sis.segment_state,0) <>-1");
StringBuffer ipnSegmentSQL = new StringBuffer("select sis.start_ipn,sis.end_ipn from server_ip_segment sis left join server_table st on st.id = sis.server_id where st.server_state='0' and nvl(sis.segment_state,0) <>-1 ");
ipnSegmentSQL.append(msSql);
ipnSegmentFields.add("start_ipn");
ipnSegmentFields.add("end_ipn");
ArrayList<Map<String, String>> omNodeMapList = dao.dbSelect(ipnSegmentSQL.toString(), ipnSegmentFields);
@@ -952,7 +1051,7 @@ public class UpgradeService extends CommonService{
if(omNodeMapList!= null && omNodeMapList.size()>0){
omNode:for(Map<String, String> map : omNodeMapList){
if(seqIdTmp.equals(map.get("seq_id"))){//管理范围外节点失败结果
params.add(new String[]{curMissionId.longValue()+"",seqIdTmp,"1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE});
//params.add(new String[]{curMissionId.longValue()+"",seqIdTmp,"1",MissionConstants.ERROR_RESULT_UN_MANAGEMENT_NODE});
continue node;
}
}