// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. Citrix Systems, Inc.
// reserves all rights not expressly granted by 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.
//
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.agent.manager;
import com.cloud.agent.AgentManager;
import com.cloud.agent.transport.Request;
import com.cloud.agent.transport.Response;
import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.UnsupportedVersionException;
import com.cloud.resource.ServerResource;
import com.cloud.utils.exception.CloudRuntimeException;
public class ClusteredDirectAgentAttache extends DirectAgentAttache implements Routable {
private final ClusteredAgentManagerImpl _mgr;
private final long _nodeId;
public ClusteredDirectAgentAttache(AgentManagerImpl agentMgr, long id, long mgmtId, ServerResource resource, boolean maintenance, ClusteredAgentManagerImpl mgr) {
super(agentMgr, id, resource, maintenance, mgr);
_mgr = mgr;
_nodeId = mgmtId;
}
@Override
public void routeToAgent(byte[] data) throws AgentUnavailableException {
Request req;
try {
req = Request.parse(data);
} catch (ClassNotFoundException e) {
throw new CloudRuntimeException("Unable to rout to an agent ", e);
} catch (UnsupportedVersionException e) {
throw new CloudRuntimeException("Unable to rout to an agent ", e);
}
if (req instanceof Response) {
super.process(((Response) req).getAnswers());
} else {
super.send(req);
}
}
@Override
public boolean processAnswers(long seq, Response response) {
long mgmtId = response.getManagementServerId();
if (mgmtId != -1 && mgmtId != _nodeId) {
_mgr.routeToPeer(Long.toString(mgmtId), response.getBytes());
if (response.executeInSequence()) {
sendNext(response.getSequence());
}
return true;
} else {
return super.processAnswers(seq, response);
}
}
}