package com.alimama.mdrill.topology; import java.util.ArrayList; import java.util.Map; import org.apache.hadoop.conf.Configuration; import org.apache.log4j.Logger; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.OutputCollector; import com.alimama.mdrill.solr.realtime.ShardPartion; import com.alimama.mdrill.utils.IndexUtils; import com.alipay.bluewhale.core.task.StopCheck; import com.alipay.bluewhale.core.task.heartbeat.TaskHeartbeatRunable; public class SolrStart implements StopCheck, SolrStartInterface { private static Logger LOG = Logger.getLogger(SolrStart.class); private SolrStartJetty jetty; private SolrStartTable[] tables; private BoltParams params; public SolrStart(BoltParams params,SpoutOutputCollector collector, Configuration conf, String solrhomeBase, String[] tableNames, String diskList, Integer portbase, int taskIndex, String topologyName, Integer taskid, Integer partions) throws Exception { this.params=params; ShardPartion.base=solrhomeBase; ShardPartion.taskIndex=taskIndex; ShardPartion.index=IndexUtils.getHdfsForder(taskIndex); jetty = new SolrStartJetty(this.params,collector, conf, solrhomeBase + "/" + tableNames[0], diskList, portbase, taskIndex, topologyName, taskid, partions); tables = new SolrStartTable[tableNames.length]; for (int i = 0; i < tableNames.length; i++) { LOG.info("create table " + tableNames[i]); tables[i] = new SolrStartTable(this.params,collector, conf, solrhomeBase + "/" + tableNames[i], diskList, taskIndex, tableNames[i], taskid, jetty); } } @Override public void setMergeServer(boolean isMergeServer) { jetty.setMergeServer(isMergeServer); for (SolrStartTable table : tables) { table.setMergeServer(isMergeServer); } } @Override public void setConfigDir(String dir) { jetty.setConfigDir(dir); for (SolrStartTable table : tables) { table.setConfigDir(dir); } } @Override public void start() throws Exception { jetty.start(); for (SolrStartTable table : tables) { table.start(); } TaskHeartbeatRunable.regieterStopCheck(this); } @Override public void stop() throws Exception { jetty.stop(); for (SolrStartTable table : tables) { table.stop(); } } @Override public Boolean isTimeout() { if (jetty.isTimeout()) { return true; } for (SolrStartTable table : tables) { if (table.isTimeout()) { return true; } } return false; } @Override public void heartbeat() throws Exception { this.jetty.heartbeat(); for (final SolrStartTable table : tables) { table.heartbeat(); } } @Override public void unregister() { jetty.unregister(); for (SolrStartTable table : tables) { table.unregister(); } } @Override public boolean isStop() { if(this.isTimeout()) { return true; } for (SolrStartTable table : tables) { if (!table.isStop()) { return false; } } for (SolrStartTable table : tables) { table.reportError("timeout"); } return true; } @Override public void setConf(Map stormConf) { jetty.setConf(stormConf); for (SolrStartTable table : tables) { table.setConf(stormConf); } } @Override public void setExecute(ShardThread EXECUTE) { jetty.setExecute(EXECUTE); for (SolrStartTable table : tables) { table.setExecute(EXECUTE); } } public void checkError(){ jetty.checkError(); for (SolrStartTable table : tables) { table.checkError(); } } }