/** * */ package com.taobao.top.analysis.node.component; import java.io.File; import org.jboss.netty.handler.codec.serialization.ObjectDecoder; import org.jboss.netty.handler.codec.serialization.ObjectEncoder; import org.junit.Ignore; import org.junit.Test; import com.taobao.top.analysis.config.MasterConfig; import com.taobao.top.analysis.config.SlaveConfig; import com.taobao.top.analysis.exception.AnalysisException; import com.taobao.top.analysis.node.connect.SocketMasterConnector; import com.taobao.top.analysis.node.connect.SocketSlaveConnector; import com.taobao.top.analysis.node.event.SlaveEventCode; import com.taobao.top.analysis.node.event.SlaveNodeEvent; import com.taobao.top.analysis.node.io.FileInputAdaptor; import com.taobao.top.analysis.node.io.FileOutputAdaptor; import com.taobao.top.analysis.node.io.HdfsInputAdaptor; import com.taobao.top.analysis.node.io.HttpInputAdaptor; import com.taobao.top.analysis.node.io.IInputAdaptor; import com.taobao.top.analysis.node.io.IOutputAdaptor; import com.taobao.top.analysis.statistics.StatisticsEngine; /** * @author fangweng * @email: fangweng@taobao.com * 2011-12-6 上午12:01:31 * */ public class MasterSlaveIntegrationTest_SocketVersion { public static MasterNode buildMaster(String configfile) throws InterruptedException { MasterNode masterNode = new MasterNode(); SocketMasterConnector masterConnector = new SocketMasterConnector(); JobManager jobManager = new JobManager(); JobResultMerger jobResultMerger = new JobResultMerger(); MixJobBuilder mixJobBuilder = new MixJobBuilder(); FileJobExporter fileJobExporter = new FileJobExporter(); MasterMonitor monitor = new MasterMonitor(); jobManager.setJobBuilder(mixJobBuilder); jobManager.setJobExporter(fileJobExporter); jobManager.setJobResultMerger(jobResultMerger); masterConnector.setDownstreamHandler(new ObjectEncoder()); masterConnector.setUpstreamHandler(new ObjectDecoder()); masterNode.setJobManager(jobManager); masterNode.setMasterConnector(masterConnector); masterNode.setMonitor(monitor); MasterConfig config = new MasterConfig(); config.load(configfile); masterNode.setConfig(config); masterNode.startNode(); return masterNode; } public static SlaveNode buildSlave(String configfile,boolean needStart) { SlaveNode slaveNode = new SlaveNode(); JobResultMerger jobResultMerger2 = new JobResultMerger(); SocketSlaveConnector slaveConnector = new SocketSlaveConnector(); SlaveMonitor monitor = new SlaveMonitor(); slaveConnector.setDownstreamHandler(new ObjectEncoder()); slaveConnector.setUpstreamHandler(new ObjectDecoder()); StatisticsEngine statisticsEngine = new StatisticsEngine(); SlaveConfig slaveConfig = new SlaveConfig(); slaveConfig.load(configfile); slaveNode.setConfig(slaveConfig); slaveNode.setSlaveConnector(slaveConnector); slaveNode.setStatisticsEngine(statisticsEngine); slaveNode.setJobResultMerger(jobResultMerger2); slaveNode.setMonitor(monitor); IInputAdaptor fileInputAdaptor = new FileInputAdaptor(); IInputAdaptor httpInputAdaptor = new HttpInputAdaptor(); IInputAdaptor hdfsInputAdaptor = new HdfsInputAdaptor(); IOutputAdaptor fileOutAdaptor = new FileOutputAdaptor(); FileJobExporter fileJobExporter2 = new FileJobExporter(); fileJobExporter2.setMaxCreateReportWorker(2); fileJobExporter2.init(); ((FileOutputAdaptor)fileOutAdaptor).setJobExporter(fileJobExporter2); statisticsEngine.addInputAdaptor(fileInputAdaptor); statisticsEngine.addInputAdaptor(httpInputAdaptor); statisticsEngine.addInputAdaptor(hdfsInputAdaptor); statisticsEngine.addOutputAdaptor(fileOutAdaptor); if (needStart) slaveNode.startNode(); return slaveNode; } @Test @Ignore public void test() throws AnalysisException, InterruptedException { //build MasterNode1 MasterNode masterNode = buildMaster("master-config-ms.properties"); MasterNode masterNode1 = buildMaster("master-config-ms1.properties"); MasterNode masterNode2 = buildMaster("master-config-ms2.properties"); //build SlaveNode SlaveNode slaveNode = buildSlave("slave-config.properties",false); SlaveNodeEvent event = new SlaveNodeEvent(); event.setEventCode(SlaveEventCode.SUSPEND); slaveNode.addEvent(event); slaveNode.startNode(); Thread.sleep(3000); event.setEventCode(SlaveEventCode.AWAKE); slaveNode.addEvent(event); Thread.sleep(35 * 1000); masterNode.stopNode(); masterNode1.stopNode(); masterNode2.stopNode(); slaveNode.stopNode(); Thread.sleep(3000); } @Test public void test1() throws AnalysisException, InterruptedException { //build MasterNode1 MasterNode masterNode = buildMaster("master-config-ms.properties"); //MasterNode masterNode1 = buildMaster("master-config-ms1.properties"); //MasterNode masterNode2 = buildMaster("master-config-ms2.properties"); Thread.sleep(8000); //build SlaveNode SlaveNode slaveNode = buildSlave("slave-config.properties",true); SlaveNode slaveNode1 = buildSlave("slave-config1.properties",true); Thread.sleep(60 * 1000 * 60); masterNode.stopNode(); //masterNode1.stopNode(); //masterNode2.stopNode(); slaveNode.stopNode(); slaveNode1.stopNode(); Thread.sleep(60 * 1000 * 60); } @Test @Ignore public void testFailCover() throws AnalysisException, InterruptedException { //build MasterNode1 MasterNode masterNode = buildMaster("master-config-ms.properties"); MasterNode masterNode1 = buildMaster("master-config-ms1.properties"); Thread.sleep(1000); //build SlaveNode SlaveNode slaveNode = buildSlave("slave-config.properties",true); Thread.sleep(35 * 1000); masterNode.stopNode(); masterNode1.stopNode(); File tmpFiles = new File("slave1/temp"); MasterNode masterNode2 = buildMaster("master-config-ms2.properties"); Thread.sleep(15 * 1000); masterNode2.stopNode(); slaveNode.stopNode(); Thread.sleep(3000); } }