summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchenjinsong <[email protected]>2018-11-02 15:59:26 +0800
committerchenjinsong <[email protected]>2018-11-02 15:59:26 +0800
commitf779ad688601cb4edc835fc555a09f76237bc3ad (patch)
treefd2f82c9bb4eda358e5a6603efb130578fd1cc82
parentc1742aa7905a62853531996c2e973322c6001428 (diff)
扫描新任务时,先过滤一次任务:任务含自己的节点时加入,否则直接将状态改为未能执行
-rw-r--r--src/com/nms/server/service/UpgradeService.java127
1 files changed, 113 insertions, 14 deletions
diff --git a/src/com/nms/server/service/UpgradeService.java b/src/com/nms/server/service/UpgradeService.java
index ab78710..810e4bd 100644
--- a/src/com/nms/server/service/UpgradeService.java
+++ b/src/com/nms/server/service/UpgradeService.java
@@ -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;
}
}