blob: 843a634b4c0049d1597a4809e1cae77657b495c5 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.agent;
import com.cloud.agent.api.AgentControlAnswer;
import com.cloud.agent.api.AgentControlCommand;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
import com.cloud.exception.ConnectionException;
import com.cloud.host.Host;
import com.cloud.host.Status;
/**
* There are several types of events that the AgentManager forwards
*
* 1. Agent Connect & Disconnect
* 2. Commands sent by the agent.
* 3. Answers sent by the agent.
*/
public interface Listener {
/**
*
* @param agentId id of the agent
* @param seq sequence number return by the send() method.
* @param answers answers to the commands.
* @return true if processed. false if not.
*/
boolean processAnswers(long agentId, long seq, Answer[] answers);
/**
* This method is called by the AgentManager when an agent sent
* a command to the server. In order to process these commands,
* the Listener must be registered for host commands.
*
* @param agentId id of the agent.
* @param seq sequence number of the command sent.
* @param commands commands that were sent.
* @return true if you processed the commands. false if not.
*/
boolean processCommands(long agentId, long seq, Command[] commands);
/**
* process control command sent from agent under its management
* @param agentId
* @param cmd
* @return
*/
AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd);
/**
* This method is called by AgentManager when a host is added to a cluster.
* @param long the ID of the newly added host
*/
void processHostAdded(long hostId);
/**
* This method is called by AgentManager when an agent made a
* connection to this server if the listener has
* been registered for host events.
* @param cmd command sent by the agent to the server on startup.
* @param forRebalance TODO
* @param agentId id of the agent
* @throws ConnectionException if host has problems and needs to put into maintenance state.
*/
void processConnect(Host host, StartupCommand cmd, boolean forRebalance) throws ConnectionException;
/**
* This method is called by AgentManager when an agent disconnects
* from this server if the listener has been registered for host events.
*
* If the Listener is passed to the send() method, this method is
* also called by AgentManager if the agent disconnected.
*
* @param agentId id of the agent
* @param state the current state of the agent.
*/
boolean processDisconnect(long agentId, Status state);
/**
* This method is called by AgentManager when a host is about to be removed from a cluster.
* @param long the ID of the host that's about to be removed
*/
void processHostAboutToBeRemoved(long hostId);
/**
* This method is called by AgentManager when a host is removed from a cluster.
* @param long the ID of the newly removed host
*/
void processHostRemoved(long hostId, long clusterId);
/**
* If this Listener is passed to the send() method, this method
* is called by AgentManager after processing an answer
* from the agent. Returning true means you're expecting more
* answers from the agent using the same sequence number.
*
* @return true if expecting more answers using the same sequence number.
*/
boolean isRecurring();
/**
* If the Listener is passed to the send() method, this method is
* called to determine how long to wait for the reply. The value
* is in seconds. -1 indicates to wait forever. 0 indicates to
* use the default timeout. If the timeout is
* reached, processTimeout on this same Listener is called.
*
* @return timeout in seconds before processTimeout is called.
*/
int getTimeout();
/**
* If the Listener is passed to the send() method, this method is
* called by the AgentManager to process a command timeout.
* @param agentId id of the agent
* @param seq sequence number returned by the send().
* @return true if processed; false if not.
*/
boolean processTimeout(long agentId, long seq);
}