use of com.cloud.common.transport.Request in project cosmic by MissionCriticalCloud.
the class Agent method sendRequest.
@Override
public AgentControlAnswer sendRequest(final AgentControlCommand cmd, final int timeoutInMilliseconds) throws AgentControlChannelException {
final Request request = new Request(getId(), -1, new Command[] { cmd }, true, false);
request.setSequence(getNextSequence());
final AgentControlListener listener = new AgentControlListener(request);
registerControlListener(listener);
try {
logger.debug("Sending request to management server: " + request.toString());
postRequest(request);
synchronized (listener) {
try {
listener.wait(timeoutInMilliseconds);
} catch (final InterruptedException e) {
logger.warn("sendRequest is interrupted, exit waiting");
}
}
return listener.getAnswer();
} finally {
unregisterControlListener(listener);
}
}
use of com.cloud.common.transport.Request in project cosmic by MissionCriticalCloud.
the class Agent method sendStartup.
public void sendStartup(final Link link) {
final StartupCommand[] startup = this.resource.initialize();
if (startup != null) {
final Command[] commands = new Command[startup.length];
for (int i = 0; i < startup.length; i++) {
setupStartupCommand(startup[i]);
commands[i] = startup[i];
}
final Request request = new Request(this._id != null ? this._id : -1, -1, commands, false, false);
request.setSequence(getNextSequence());
if (logger.isDebugEnabled()) {
logger.debug("Sending Startup: " + request.toString());
}
lockStartupTask(link);
try {
link.send(request.toBytes());
} catch (final ClosedChannelException e) {
logger.warn("Unable to send request: " + request.toString());
}
}
}
use of com.cloud.common.transport.Request in project cosmic by MissionCriticalCloud.
the class Agent method processOtherTask.
public void processOtherTask(final Task task) {
final Object obj = task.get();
if (obj instanceof Response) {
if (System.currentTimeMillis() - this._lastPingResponseTime > this._pingInterval * this.agentConfiguration.getPingRetries()) {
logger.error("Ping Interval has gone past " + this._pingInterval * this.agentConfiguration.getPingRetries() + ". Won't reconnect to mgt server, as connection is still alive");
return;
}
final PingCommand ping = this.resource.getCurrentStatus(getId());
final Request request = new Request(this._id, -1, ping, false);
request.setSequence(getNextSequence());
if (logger.isDebugEnabled()) {
logger.debug("Sending ping: " + request.toString());
}
try {
task.getLink().send(request.toBytes());
// if i can send pingcommand out, means the link is ok
setLastPingResponseTime();
} catch (final ClosedChannelException e) {
logger.warn("Unable to send request: " + request.toString());
}
} else if (obj instanceof Request) {
final Request req = (Request) obj;
final Command command = req.getCommand();
if (command.getContextParam("logid") != null) {
MDC.put("logcontextid", command.getContextParam("logid"));
}
Answer answer = null;
this._inProgress.incrementAndGet();
try {
answer = this.resource.executeRequest(command);
} finally {
this._inProgress.decrementAndGet();
}
if (answer != null) {
final Response response = new Response(req, answer);
if (logger.isDebugEnabled()) {
logger.debug("Watch Sent: " + response.toString());
}
try {
task.getLink().send(response.toBytes());
} catch (final ClosedChannelException e) {
logger.warn("Unable to send response: " + response.toString());
}
}
} else {
logger.warn("Ignoring an unknown task");
}
}
Aggregations