/**
*
*/
package com.taobao.top.analysis.node.connect;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.taobao.top.analysis.exception.AnalysisException;
import com.taobao.top.analysis.node.event.GetTaskRequestEvent;
import com.taobao.top.analysis.node.event.GetTaskResponseEvent;
import com.taobao.top.analysis.node.event.SendMonitorInfoEvent;
import com.taobao.top.analysis.node.event.SendMonitorInfoResponseEvent;
import com.taobao.top.analysis.node.event.SendResultsRequestEvent;
import com.taobao.top.analysis.node.event.SendResultsResponseEvent;
import com.taobao.top.analysis.node.event.SlaveEventCode;
import com.taobao.top.analysis.node.event.SlaveNodeEvent;
import com.taobao.top.analysis.node.job.JobTask;
import com.taobao.top.analysis.node.monitor.MasterMonitorInfo;
/**
* 用于单机的分布式模拟,用内存作为通信的客户端实现
* @author fangweng
* @Email fangweng@taobao.com
* 2011-11-29
*
*/
public class MemSlaveConnector extends AbstractSlaveConnector {
private static final Log logger = LogFactory.getLog(MemSlaveConnector.class);
MemTunnel tunnel;
@Override
public void init() throws AnalysisException {
}
@Override
public void releaseResource() {
// TODO Auto-generated method stub
}
@Override
//做成阻塞模式
public JobTask[] getJobTasks(GetTaskRequestEvent requestEvent) {
tunnel.getMasterSide().offer(requestEvent);
try {
SlaveNodeEvent event = tunnel.getSlaveSide().poll(10, TimeUnit.SECONDS);
if (event != null && event.getEventCode().equals(SlaveEventCode.GET_TASK_RESP))
{
List<JobTask> jobTasks = ((GetTaskResponseEvent)event).getJobTasks();
JobTask[] result = new JobTask[jobTasks.size()];
jobTasks.toArray(result);
return result;
}
} catch (InterruptedException e) {
logger.error(e,e);
}
return null;
}
@Override
public String sendJobTaskResults(SendResultsRequestEvent jobResponseEvent,String master) {
tunnel.getMasterSide().offer(jobResponseEvent);
try {
SlaveNodeEvent event = tunnel.getSlaveSide().poll(10, TimeUnit.SECONDS);
if (event != null && event.getEventCode().equals(SlaveEventCode.SEND_RESULT_RESP))
{
return ((SendResultsResponseEvent)event).getResponse();
}
} catch (InterruptedException e) {
logger.error(e,e);
}
return null;
}
@Override
public MasterMonitorInfo sendMonitorInfo(
SendMonitorInfoEvent sendSlaveMonitorInfoEvent) {
tunnel.getMasterSide().offer(sendSlaveMonitorInfoEvent);
try {
SlaveNodeEvent event = tunnel.getSlaveSide().poll(10, TimeUnit.SECONDS);
if (event != null && event.getEventCode().equals(SlaveEventCode.SEND_RESULT_RESP)) {
return ((SendMonitorInfoResponseEvent)event).getMasterMonitorInfo();
}
} catch (InterruptedException e) {
logger.error(e,e);
}
return null;
}
public MemTunnel getTunnel() {
return tunnel;
}
public void setTunnel(MemTunnel tunnel) {
this.tunnel = tunnel;
}
@Override
public void changeMaster(String master) {
// TODO Auto-generated method stub
}
}