Search in sources :

Example 11 with Request

use of com.cloud.agent.transport.Request in project cloudstack by apache.

the class Agent method processOtherTask.

public void processOtherTask(final Task task) {
    final Object obj = task.get();
    if (obj instanceof Response) {
        if (System.currentTimeMillis() - _lastPingResponseTime > _pingInterval * _shell.getPingRetries()) {
            s_logger.error("Ping Interval has gone past " + _pingInterval * _shell.getPingRetries() + ". Won't reconnect to mgt server, as connection is still alive");
            return;
        }
        final PingCommand ping = _resource.getCurrentStatus(getId());
        final Request request = new Request(_id, -1, ping, false);
        request.setSequence(getNextSequence());
        if (s_logger.isDebugEnabled()) {
            s_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) {
            s_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;
        _inProgress.incrementAndGet();
        try {
            answer = _resource.executeRequest(command);
        } finally {
            _inProgress.decrementAndGet();
        }
        if (answer != null) {
            final Response response = new Response(req, answer);
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Watch Sent: " + response.toString());
            }
            try {
                task.getLink().send(response.toBytes());
            } catch (final ClosedChannelException e) {
                s_logger.warn("Unable to send response: " + response.toString());
            }
        }
    } else {
        s_logger.warn("Ignoring an unknown task");
    }
}
Also used : Response(com.cloud.agent.transport.Response) ClosedChannelException(java.nio.channels.ClosedChannelException) AgentControlAnswer(com.cloud.agent.api.AgentControlAnswer) Answer(com.cloud.agent.api.Answer) MaintainAnswer(com.cloud.agent.api.MaintainAnswer) StartupAnswer(com.cloud.agent.api.StartupAnswer) StartupCommand(com.cloud.agent.api.StartupCommand) AgentControlCommand(com.cloud.agent.api.AgentControlCommand) PingCommand(com.cloud.agent.api.PingCommand) MaintainCommand(com.cloud.agent.api.MaintainCommand) ShutdownCommand(com.cloud.agent.api.ShutdownCommand) Command(com.cloud.agent.api.Command) ReadyCommand(com.cloud.agent.api.ReadyCommand) CronCommand(com.cloud.agent.api.CronCommand) Request(com.cloud.agent.transport.Request) PingCommand(com.cloud.agent.api.PingCommand)

Example 12 with Request

use of com.cloud.agent.transport.Request in project cloudstack by apache.

the class Agent method sendStartup.

public void sendStartup(final Link link) {
    final StartupCommand[] startup = _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(_id != null ? _id : -1, -1, commands, false, false);
        request.setSequence(getNextSequence());
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Sending Startup: " + request.toString());
        }
        lockStartupTask(link);
        try {
            link.send(request.toBytes());
        } catch (final ClosedChannelException e) {
            s_logger.warn("Unable to send reques: " + request.toString());
        }
    }
}
Also used : StartupCommand(com.cloud.agent.api.StartupCommand) ClosedChannelException(java.nio.channels.ClosedChannelException) StartupCommand(com.cloud.agent.api.StartupCommand) AgentControlCommand(com.cloud.agent.api.AgentControlCommand) PingCommand(com.cloud.agent.api.PingCommand) MaintainCommand(com.cloud.agent.api.MaintainCommand) ShutdownCommand(com.cloud.agent.api.ShutdownCommand) Command(com.cloud.agent.api.Command) ReadyCommand(com.cloud.agent.api.ReadyCommand) CronCommand(com.cloud.agent.api.CronCommand) Request(com.cloud.agent.transport.Request)

Example 13 with Request

use of com.cloud.agent.transport.Request in project cloudstack by apache.

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 {
        postRequest(request);
        synchronized (listener) {
            try {
                listener.wait(timeoutInMilliseconds);
            } catch (final InterruptedException e) {
                s_logger.warn("sendRequest is interrupted, exit waiting");
            }
        }
        return listener.getAnswer();
    } finally {
        unregisterControlListener(listener);
    }
}
Also used : Request(com.cloud.agent.transport.Request)

Example 14 with Request

use of com.cloud.agent.transport.Request in project cloudstack by apache.

the class AgentAttache method sendNext.

protected synchronized void sendNext(final long seq) {
    _currentSequence = null;
    if (_requests.isEmpty()) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug(log(seq, "No more commands found"));
        }
        return;
    }
    Request req = _requests.pop();
    if (s_logger.isDebugEnabled()) {
        s_logger.debug(log(req.getSequence(), "Sending now.  is current sequence."));
    }
    try {
        send(req);
    } catch (AgentUnavailableException e) {
        if (s_logger.isDebugEnabled()) {
            s_logger.debug(log(req.getSequence(), "Unable to send the next sequence"));
        }
        cancel(req.getSequence());
    }
    _currentSequence = req.getSequence();
}
Also used : AgentUnavailableException(com.cloud.exception.AgentUnavailableException) Request(com.cloud.agent.transport.Request)

Example 15 with Request

use of com.cloud.agent.transport.Request in project cloudstack by apache.

the class AgentManagerImpl method send.

@Override
public long send(final Long hostId, final Commands commands, final Listener listener) throws AgentUnavailableException {
    final AgentAttache agent = getAttache(hostId);
    if (agent.isClosed()) {
        throw new AgentUnavailableException("Agent " + agent.getId() + " is closed", agent.getId());
    }
    final Command[] cmds = checkForCommandsAndTag(commands);
    final Request req = new Request(hostId, agent.getName(), _nodeId, cmds, commands.stopOnError(), true);
    req.setSequence(agent.getNextSequence());
    agent.send(req, listener);
    return req.getSequence();
}
Also used : StartupStorageCommand(com.cloud.agent.api.StartupStorageCommand) StartupCommand(com.cloud.agent.api.StartupCommand) AgentControlCommand(com.cloud.agent.api.AgentControlCommand) PingCommand(com.cloud.agent.api.PingCommand) PingRoutingCommand(com.cloud.agent.api.PingRoutingCommand) SetHostParamsCommand(com.cloud.agent.api.SetHostParamsCommand) StartupSecondaryStorageCommand(com.cloud.agent.api.StartupSecondaryStorageCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand) ShutdownCommand(com.cloud.agent.api.ShutdownCommand) StartupProxyCommand(com.cloud.agent.api.StartupProxyCommand) CheckHealthCommand(com.cloud.agent.api.CheckHealthCommand) Command(com.cloud.agent.api.Command) ReadyCommand(com.cloud.agent.api.ReadyCommand) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) Request(com.cloud.agent.transport.Request)

Aggregations

Request (com.cloud.agent.transport.Request)18 ShutdownCommand (com.cloud.agent.api.ShutdownCommand)8 StartupCommand (com.cloud.agent.api.StartupCommand)8 ClosedChannelException (java.nio.channels.ClosedChannelException)7 AgentControlCommand (com.cloud.agent.api.AgentControlCommand)6 Command (com.cloud.agent.api.Command)6 PingCommand (com.cloud.agent.api.PingCommand)6 AgentUnavailableException (com.cloud.exception.AgentUnavailableException)6 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)6 ReadyCommand (com.cloud.agent.api.ReadyCommand)5 ConfigurationException (javax.naming.ConfigurationException)5 CronCommand (com.cloud.agent.api.CronCommand)4 MaintainCommand (com.cloud.agent.api.MaintainCommand)4 AgentControlAnswer (com.cloud.agent.api.AgentControlAnswer)3 Answer (com.cloud.agent.api.Answer)3 StartupAnswer (com.cloud.agent.api.StartupAnswer)3 HostVO (com.cloud.host.HostVO)3 NoTransitionException (com.cloud.utils.fsm.NoTransitionException)3 CheckHealthCommand (com.cloud.agent.api.CheckHealthCommand)2 MaintainAnswer (com.cloud.agent.api.MaintainAnswer)2