package org.fastcatsearch.job.cluster; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.fastcatsearch.cluster.NodeService; import org.fastcatsearch.common.io.Streamable; import org.fastcatsearch.exception.FastcatSearchException; import org.fastcatsearch.ir.io.DataInput; import org.fastcatsearch.ir.io.DataOutput; import org.fastcatsearch.job.Job; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.settings.NodeListSettings; import org.fastcatsearch.settings.NodeListSettings.NodeSettings; public class NodeListUpdateJob extends Job implements Streamable { private static final long serialVersionUID = 7761738276375209615L; public NodeListUpdateJob() { } @Override public JobResult doRun() throws FastcatSearchException { try { logger.debug("run node update job.."); NodeListSettings nodeListSettings = (NodeListSettings)args; NodeService nodeService = ServiceManager.getInstance().getService(NodeService.class); nodeService.updateNode(nodeListSettings); return new JobResult(true); } catch (Exception e) { logger.error("", e); throw new FastcatSearchException("ERR-00525", e); } } @Override public void readFrom(DataInput input) throws IOException { List<NodeSettings>settings = new ArrayList<NodeSettings>(); int size = input.readInt(); for(int inx=0;inx<size;inx++) { NodeSettings setting = new NodeSettings(); setting.setId(new String(input.readAString())); setting.setName(new String(input.readUString())); setting.setAddress(new String(input.readAString())); setting.setPort(input.readInt()); setting.setEnabled(input.readBoolean()); settings.add(setting); } NodeListSettings nodeListSettings = new NodeListSettings(); nodeListSettings.setNodeList(settings); this.args = nodeListSettings; } @Override public void writeTo(DataOutput output) throws IOException { if(args!=null && args instanceof NodeListSettings) { NodeListSettings nodeListSettings = (NodeListSettings)args; List<NodeSettings> settings = nodeListSettings.getNodeList(); output.writeInt(settings.size()); for(int inx=0;inx< settings.size(); inx++) { NodeSettings setting = settings.get(inx); String id = setting.getId(); String name = setting.getName(); String address = setting.getAddress(); int port = setting.getPort(); boolean enabled = setting.isEnabled(); output.writeAString(id.toCharArray(),0,id.length()); output.writeUString(name.toCharArray(),0,name.length()); output.writeAString(address.toCharArray(),0,address.length()); output.writeInt(port); output.writeBoolean(enabled); } } } }