// 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); } } }