use of com.cloud.legacymodel.communication.answer.StartupAnswer in project cosmic by MissionCriticalCloud.
the class Agent method processStartupAnswer.
public void processStartupAnswer(final Answer answer, final Response response, final Link link) {
boolean cancelled = false;
synchronized (this) {
if (this._startup != null) {
this._startup.cancel();
this._startup = null;
} else {
cancelled = true;
}
}
final StartupAnswer startup = (StartupAnswer) answer;
if (!startup.getResult()) {
logger.error("Not allowed to connect to the server: " + answer.getDetails());
System.exit(1);
}
if (cancelled) {
logger.warn("Threw away a startup answer because we're reconnecting.");
return;
}
logger.info("Process agent startup answer, agent id = " + startup.getHostId());
setId(startup.getHostId());
// change to ms.
this._pingInterval = (long) startup.getPingInterval() * 1000;
setLastPingResponseTime();
scheduleWatch(link, response, this._pingInterval, this._pingInterval);
this._urgentTaskPool.setKeepAliveTime(2 * this._pingInterval, TimeUnit.MILLISECONDS);
logger.info("Startup Response Received: agent id = " + getId());
}
use of com.cloud.legacymodel.communication.answer.StartupAnswer in project cosmic by MissionCriticalCloud.
the class AgentManagerImpl method connectAgent.
protected void connectAgent(final Link link, final Command[] cmds, final Request request) {
// send startupanswer to agent in the very beginning, so agent can move on without waiting for the answer for an undetermined time, if we put this logic into another
// thread pool.
final StartupAnswer[] answers = new StartupAnswer[cmds.length];
Command cmd;
for (int i = 0; i < cmds.length; i++) {
cmd = cmds[i];
if (cmd instanceof StartupRoutingCommand || cmd instanceof StartupProxyCommand || cmd instanceof StartupSecondaryStorageCommand || cmd instanceof StartupStorageCommand) {
answers[i] = new StartupAnswer((StartupCommand) cmds[i], 0, getPingInterval());
break;
}
}
Response response = null;
response = new Response(request, answers[0], this._nodeId, -1);
try {
link.send(response.toBytes());
} catch (final ClosedChannelException e) {
s_logger.debug("Failed to send startupanswer: " + e.toString());
}
this._connectExecutor.execute(new HandleAgentConnectTask(link, cmds, request));
}
use of com.cloud.legacymodel.communication.answer.StartupAnswer in project cosmic by MissionCriticalCloud.
the class AgentManagerImpl method handleDirectConnectAgent.
@Override
public boolean handleDirectConnectAgent(final Host host, final StartupCommand[] cmds, final ServerResource resource, final boolean forRebalance) throws ConnectionException {
AgentAttache attache;
attache = createAttacheForDirectConnect(host, resource);
final StartupAnswer[] answers = new StartupAnswer[cmds.length];
for (int i = 0; i < answers.length; i++) {
answers[i] = new StartupAnswer(cmds[i], attache.getId(), this.PingInterval.value());
}
attache.process(answers);
attache = notifyMonitorsOfConnection(attache, cmds, forRebalance);
return attache != null;
}
use of com.cloud.legacymodel.communication.answer.StartupAnswer in project cosmic by MissionCriticalCloud.
the class DirectAgentAttache method send.
@Override
public void send(final Request req) throws AgentUnavailableException {
req.logD("Executing: ", true);
if (req instanceof Response) {
final Response resp = (Response) req;
final Answer[] answers = resp.getAnswers();
if (answers != null && answers[0] instanceof StartupAnswer) {
final StartupAnswer startup = (StartupAnswer) answers[0];
final int interval = startup.getPingInterval();
this._futures.add(this._agentMgr.getCronJobPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS));
}
} else {
final Command[] cmds = req.getCommands();
if (cmds.length > 0 && !(cmds[0] instanceof CronCommand)) {
queueTask(new Task(req));
scheduleFromQueue();
} else {
final CronCommand cmd = (CronCommand) cmds[0];
this._futures.add(this._agentMgr.getCronJobPool().scheduleAtFixedRate(new CronTask(req), cmd.getInterval(), cmd.getInterval(), TimeUnit.SECONDS));
}
}
}
use of com.cloud.legacymodel.communication.answer.StartupAnswer in project cosmic by MissionCriticalCloud.
the class DirectAgentAttache method process.
@Override
public void process(final Answer[] answers) {
if (answers != null && answers[0] instanceof StartupAnswer) {
final StartupAnswer startup = (StartupAnswer) answers[0];
final int interval = startup.getPingInterval();
s_logger.info("StartupAnswer received " + startup.getHostId() + " Interval = " + interval);
this._futures.add(this._agentMgr.getCronJobPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS));
}
}
Aggregations