diff --git a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/AgentMessenger.java b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/AgentMessenger.java index 111d4f5a..6270e345 100644 --- a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/AgentMessenger.java +++ b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/AgentMessenger.java @@ -3,6 +3,7 @@ package org.bench4q.master.infrastructure.communication; import java.io.File; import java.util.List; import java.util.UUID; +import java.util.concurrent.Future; import org.bench4q.master.domain.entity.Agent; import org.bench4q.share.models.agent.RunScenarioModel; @@ -25,4 +26,6 @@ public interface AgentMessenger { public StopTestModel stop(Agent agent, UUID runId); public ServerStatusModel getStatus(Agent agent); + + public Future getStatusAsync(Agent agent); } diff --git a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/impl/AgentMessengerImpl.java b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/impl/AgentMessengerImpl.java index 5ef0fafd..43cb418e 100644 --- a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/impl/AgentMessengerImpl.java +++ b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/communication/impl/AgentMessengerImpl.java @@ -4,6 +4,10 @@ import java.io.File; import java.util.LinkedList; import java.util.List; import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import org.apache.log4j.Logger; import org.bench4q.master.domain.entity.Agent; @@ -23,6 +27,7 @@ import org.springframework.stereotype.Component; @Component public class AgentMessengerImpl implements AgentMessenger { private HttpRequester httpRequester; + private ExecutorService executorService = Executors.newCachedThreadPool(); private Logger logger = Logger.getLogger(AgentMessengerImpl.class); private HttpRequester getHttpRequester() { @@ -55,6 +60,17 @@ public class AgentMessengerImpl implements AgentMessenger { } } + public Future bookTestAsync(final Agent agent, + final int requiredLoad) { + return this.executorService + .submit(new Callable() { + @Override + public RunScenarioResultModel call() throws Exception { + return bookTest(agent, requiredLoad); + } + }); + } + public RunScenarioResultModel submitScenrioWithParams(Agent agent, UUID agentRunId, List paramFiles, final RunScenarioModel runScenarioModel) { @@ -79,6 +95,19 @@ public class AgentMessengerImpl implements AgentMessenger { } } + public Future submitScenarioWithParamsAsync( + final Agent agent, final UUID agentRunId, + final List paramFiles, final RunScenarioModel runScenarioModel) { + return this.executorService + .submit(new Callable() { + @Override + public RunScenarioResultModel call() throws Exception { + return submitScenrioWithParams(agent, agentRunId, + paramFiles, runScenarioModel); + } + }); + } + public RunScenarioResultModel runWithParams(Agent agent, UUID agentRunId) { HttpResponse httpResponse = null; try { @@ -100,6 +129,17 @@ public class AgentMessengerImpl implements AgentMessenger { } } + public Future runAsync(final Agent agent, + final UUID agentRunId) { + return this.executorService + .submit(new Callable() { + @Override + public RunScenarioResultModel call() throws Exception { + return runWithParams(agent, agentRunId); + } + }); + } + // there is bug in here public TestBriefStatusModel scriptBriefAll(Agent agent, UUID runId) { HttpResponse httpResponse = null; @@ -125,6 +165,17 @@ public class AgentMessengerImpl implements AgentMessenger { } } + public Future scriptBriefAsync(final Agent agent, + final UUID runId) { + return this.executorService + .submit(new Callable() { + @Override + public TestBriefStatusModel call() throws Exception { + return scriptBriefAll(agent, runId); + } + }); + } + public StopTestModel stop(Agent agent, UUID runId) { HttpResponse httpResponse; try { @@ -146,6 +197,16 @@ public class AgentMessengerImpl implements AgentMessenger { } } + public Future stopAsync(final Agent agent, final UUID runId) { + return this.executorService.submit(new Callable() { + + @Override + public StopTestModel call() throws Exception { + return stop(agent, runId); + } + }); + } + private String buildBaseUrl(Agent agent) { return agent.getHostName() + ":" + agent.getPort(); } @@ -165,4 +226,14 @@ public class AgentMessengerImpl implements AgentMessenger { return null; } } + + public Future getStatusAsync(final Agent agent) { + return this.executorService.submit(new Callable() { + @Override + public ServerStatusModel call() throws Exception { + return getStatus(agent); + } + }); + } + } diff --git a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/highavailable/impl/HighAvailablePoolImpl.java b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/highavailable/impl/HighAvailablePoolImpl.java index 56ae2acc..3fec4818 100644 --- a/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/highavailable/impl/HighAvailablePoolImpl.java +++ b/Bench4Q-Master/src/main/java/org/bench4q/master/infrastructure/highavailable/impl/HighAvailablePoolImpl.java @@ -7,9 +7,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.apache.log4j.Logger; import org.bench4q.master.domain.RunningAgentInterface; @@ -37,7 +34,6 @@ public class HighAvailablePoolImpl extends CurrentLoadSubject implements private Map agentStatusOfPreviousBeatMap; private Map agentRunBlotters; private List agentRunIdShouldBeSubstitute; - private ExecutorService excuExecutorService; private long maxAvailableLoad; private int currentAvailableLoad; static Logger logger = Logger.getLogger(HighAvailablePoolImpl.class); @@ -133,7 +129,6 @@ public class HighAvailablePoolImpl extends CurrentLoadSubject implements this.setCurrentAvailableLoad(0); this.setAgentRunIdShouldBeSubstitute(new LinkedList()); this.setAgentRepository(agentRepository); - this.excuExecutorService = Executors.newCachedThreadPool(); initialPool(); } @@ -152,8 +147,7 @@ public class HighAvailablePoolImpl extends CurrentLoadSubject implements private void heartBeatsAndUpdateHAPool() { Map> map = new HashMap>(); for (Agent agent : this.getPool().values()) { - HearBeat checkHearBeat = new HearBeat(agent, agentMessenger); - map.put(agent, this.excuExecutorService.submit(checkHearBeat)); + map.put(agent, this.getAgentMessenger().getStatusAsync(agent)); } this.updateAgentPoolByHeart(map); } @@ -166,7 +160,6 @@ public class HighAvailablePoolImpl extends CurrentLoadSubject implements ServerStatusModel model; try { model = map.get(agent).get(); - if (model == null) { doForBreakDown(agent); } else { @@ -350,23 +343,3 @@ public class HighAvailablePoolImpl extends CurrentLoadSubject implements } } - -class HearBeat implements Callable { - private Agent agent; - private AgentMessenger agentMessenger; - - private AgentMessenger getAgentMessenger() { - return agentMessenger; - } - - public HearBeat(Agent agent, AgentMessenger agentMessenger) { - this.agent = agent; - this.agentMessenger = agentMessenger; - } - - @Override - public ServerStatusModel call() throws Exception { - // TODO Auto-generated method stub - return this.getAgentMessenger().getStatus(agent); - } -} \ No newline at end of file diff --git a/Bench4Q-Master/src/test/java/stubs/Mock_AgentMessenger.java b/Bench4Q-Master/src/test/java/stubs/Mock_AgentMessenger.java index 52509e26..39c4bea8 100644 --- a/Bench4Q-Master/src/test/java/stubs/Mock_AgentMessenger.java +++ b/Bench4Q-Master/src/test/java/stubs/Mock_AgentMessenger.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.Future; import org.bench4q.master.domain.entity.Agent; import org.bench4q.master.infrastructure.communication.AgentMessenger; @@ -17,6 +18,7 @@ import org.bench4q.share.models.agent.TestBriefStatusModel; import org.bench4q.share.models.agent.statistics.AgentBehaviorsBriefModel; import org.bench4q.share.models.agent.statistics.AgentBriefStatusModel; import org.bench4q.share.models.agent.statistics.AgentPagesBriefModel; +import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Component; @Component @@ -83,4 +85,9 @@ public class Mock_AgentMessenger implements AgentMessenger { } return null; } + + @Override + public Future getStatusAsync(Agent agent) { + return new AsyncResult(getStatus(agent)); + } }