From bb45887eadf56f0c12de615305c71b60a36e5be0 Mon Sep 17 00:00:00 2001 From: fanqq Date: Tue, 23 Jun 2015 15:55:16 +0800 Subject: [PATCH] update write clean conf --- .../com/ctrip/zeus/nginx/NginxOperator.java | 37 +++++++++++++++++++ .../service/build/conf/UpstreamsConf.java | 16 ++++---- .../service/nginx/impl/NginxServiceImpl.java | 9 +++++ .../status/impl/GroupStatusServiceImpl.java | 2 +- 4 files changed, 55 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ctrip/zeus/nginx/NginxOperator.java b/src/main/java/com/ctrip/zeus/nginx/NginxOperator.java index ce25dd08..2d3630f9 100644 --- a/src/main/java/com/ctrip/zeus/nginx/NginxOperator.java +++ b/src/main/java/com/ctrip/zeus/nginx/NginxOperator.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; +import java.util.List; public class NginxOperator { private static final Logger LOGGER = LoggerFactory.getLogger(NginxOperator.class); @@ -79,6 +80,42 @@ public class NginxOperator { throw e; } } + public NginxResponse cleanConf(List vsid) throws IOException{ + try { + StringBuilder sb = new StringBuilder(128); + sb.append("'"); + for (Long vs : vsid) + { + sb.append(vs).append(".conf\\|"); + } + sb.append("'"); + + String cleanVhostCommand = "sudo ls "+nginxConfDir+"/vhosts | grep -vw "+sb.toString()+"|sed \"s:^:"+nginxConfDir+"/vhosts/: \" | xargs sudo rm "; + String cleanUpstreamCommand = "sudo ls "+nginxConfDir+"/upstreams | grep -vw "+sb.toString()+"|sed \"s:^:"+nginxConfDir+"/upstreams/: \" | xargs sudo rm "; + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ByteArrayOutputStream errorStream = new ByteArrayOutputStream(); + CommandLine commandline = CommandLine.parse(cleanVhostCommand+";"+cleanUpstreamCommand); + + DefaultExecutor exec = new DefaultExecutor(); + exec.setExitValues(null); + + PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream,errorStream); + exec.setStreamHandler(streamHandler); + + int exitVal = exec.execute(commandline); + String out = outputStream.toString("UTF-8"); + String error = errorStream.toString("UTF-8"); + NginxResponse response = new NginxResponse(); + response.setOutMsg(out); + response.setErrMsg(error); + response.setSucceed(0==exitVal); + return response; + } catch (IOException e) { + LOGGER.error("Fail to clean conf",e); + throw e; + } + } public NginxResponse reloadConf() throws IOException{ try { String command = nginxBinDir + "/nginx -s reload"; diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java index 00e28070..ea62b3fa 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/UpstreamsConf.java @@ -35,10 +35,12 @@ public class UpstreamsConf { public static String buildUpstreamConf(Slb slb, VirtualServer vs, Group group, String upstreamName, Set allDownServers, Set allUpGroupServers) throws Exception { StringBuilder b = new StringBuilder(1024); - + String body = buildUpstreamConfBody(slb,vs,group,allDownServers,allUpGroupServers); + if (null == body){ + return ""; + } b.append("upstream ").append(upstreamName).append(" {").append("\n"); - - b.append(buildUpstreamConfBody(slb,vs,group,allDownServers,allUpGroupServers)); + b.append(body); b.append("}").append("\n"); @@ -50,14 +52,12 @@ public class UpstreamsConf { //LBMethod b.append(LBConf.generate(slb, vs, group)); - //ToDo: - //b.append(" ").append("zone " + upstreamName + " 64K").append(";\n"); - List groupServers= group.getGroupServers(); - if (groupServers==null) + if (groupServers==null||groupServers.size()==0) { - groupServers = new ArrayList<>(); +// groupServers = new ArrayList<>(); + return null; } for (GroupServer as : groupServers) { diff --git a/src/main/java/com/ctrip/zeus/service/nginx/impl/NginxServiceImpl.java b/src/main/java/com/ctrip/zeus/service/nginx/impl/NginxServiceImpl.java index 8d85e605..aaa10bb0 100644 --- a/src/main/java/com/ctrip/zeus/service/nginx/impl/NginxServiceImpl.java +++ b/src/main/java/com/ctrip/zeus/service/nginx/impl/NginxServiceImpl.java @@ -66,6 +66,7 @@ public class NginxServiceImpl implements NginxService { NginxOperator nginxOperator = new NginxOperator(slb.getNginxConf(), slb.getNginxBin()); + cleanConfOnDisk(slbId, version, nginxOperator); writeConfToDisk(slbId, version, nginxOperator); NginxResponse response = nginxOperator.reloadConfTest(); @@ -358,4 +359,12 @@ public class NginxServiceImpl implements NginxService { nginxOperator.writeUpstreamsConf(d.getVsId(), d.getContent()); } } + private void cleanConfOnDisk (Long slbId, int version, NginxOperator nginxOperator) throws Exception { + List nginxConfServerDataList = nginxConfService.getNginxConfServer(slbId, version); + List vslist = new ArrayList<>(); + for (NginxConfServerData d : nginxConfServerDataList) { + vslist.add(d.getVsId()); + } + nginxOperator.cleanConf(vslist); + } } diff --git a/src/main/java/com/ctrip/zeus/service/status/impl/GroupStatusServiceImpl.java b/src/main/java/com/ctrip/zeus/service/status/impl/GroupStatusServiceImpl.java index 8e5b82db..78def05d 100644 --- a/src/main/java/com/ctrip/zeus/service/status/impl/GroupStatusServiceImpl.java +++ b/src/main/java/com/ctrip/zeus/service/status/impl/GroupStatusServiceImpl.java @@ -139,7 +139,7 @@ public class GroupStatusServiceImpl implements GroupStatusService { boolean flag = "up".equalsIgnoreCase(server.getStatus()); if (!(memberUp&&serverUp)&&flag) { - LOGGER.error("nginx status api return status while memberUp and serverUp are down! ip:"+ip+" groupId:"+groupId); + LOGGER.error("nginx status api return status while memberUp or serverUp is down! ip:"+ip+" groupId:"+groupId); } return flag; }