package org.fastcatsearch.http.action.management.servers; import java.util.List; import org.fastcatsearch.cluster.ClusterUtils; import org.fastcatsearch.cluster.Node; import org.fastcatsearch.cluster.NodeService; import org.fastcatsearch.control.JobService; import org.fastcatsearch.env.SettingManager; import org.fastcatsearch.http.ActionAuthority; import org.fastcatsearch.http.ActionAuthorityLevel; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.action.ActionRequest; import org.fastcatsearch.http.action.ActionResponse; import org.fastcatsearch.http.action.AuthAction; import org.fastcatsearch.job.cluster.NodeListUpdateJob; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.settings.NodeListSettings; import org.fastcatsearch.settings.NodeListSettings.NodeSettings; import org.fastcatsearch.util.ResponseWriter; @ActionMapping(value = "/management/servers/update", authority = ActionAuthority.Servers, authorityLevel = ActionAuthorityLevel.WRITABLE) public class UpdateServerInfoAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { boolean isSuccess = false; try { String mode = request.getParameter("mode"); int serverIndex = request.getIntParameter("serverIndex",0); String nodeId = request.getParameter("id"); String name = request.getParameter("name"); String address = request.getParameter("host"); int port = request.getIntParameter("port",0); boolean enable = "true".equals(request.getParameter("enable")); SettingManager settingManager = environment.settingManager(); NodeListSettings nodeListSettings = settingManager.getNodeListSettings(); List<NodeSettings> nodeSettingList = nodeListSettings.getNodeList(); NodeSettings settings = new NodeSettings(); settings.setId(nodeId); settings.setName(name); settings.setAddress(address); settings.setPort(port); settings.setEnabled(enable); if(serverIndex!=-1) { //런타임상황의 노드번호와 세팅의노드번호가 다름. //따라서 노드들을 모두 순회 하면서 아이디매칭이 필요. serverIndex = nodeListSettings.findNodeById(nodeId); } if(serverIndex==-1) { nodeSettingList.add(settings); } else { nodeSettingList.set(serverIndex,settings); } if("delete".equals(mode)) { nodeSettingList.remove(serverIndex); } JobService jobService = JobService.getInstance(); NodeListUpdateJob job = new NodeListUpdateJob(); job.setArgs(nodeListSettings); jobService.offer(job).take(); NodeService nodeService = ServiceManager.getInstance().getService(NodeService.class); List<Node> nodeList = nodeService.getNodeArrayList(); ClusterUtils.sendJobToNodeList(job, nodeService, nodeList, true); isSuccess = true; } catch (Exception e) { logger.error("",e); isSuccess = false; } ResponseWriter responseWriter = getDefaultResponseWriter(response.getWriter()); responseWriter.object(); responseWriter.key("success").value(isSuccess); responseWriter.endObject(); responseWriter.done(); } }