CS-14605: OVS cleanup

Fix syntax errors in ConfigurationManager and Resource Manager test
This commit is contained in:
Salvatore Orlando 2012-04-25 10:53:41 +01:00
parent 6e0a86862a
commit 2bf0c7f7ff
7 changed files with 134 additions and 140 deletions

View File

@ -103,16 +103,9 @@ import com.cloud.network.firewall.FirewallManagerImpl;
import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
import com.cloud.network.ovs.OvsNetworkManagerImpl;
import com.cloud.network.ovs.OvsTunnelManagerImpl;
import com.cloud.network.ovs.dao.GreTunnelDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelDaoImpl;
import com.cloud.network.ovs.dao.OvsWorkDaoImpl;
import com.cloud.network.ovs.dao.VlanMappingDaoImpl;
import com.cloud.network.ovs.dao.VlanMappingDirtyDaoImpl;
import com.cloud.network.ovs.dao.VmFlowLogDaoImpl;
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
import com.cloud.network.rules.RulesManagerImpl;
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
@ -295,12 +288,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addDao("UsageEventDao", UsageEventDaoImpl.class);
addDao("ClusterDetailsDao", ClusterDetailsDaoImpl.class);
addDao("UserVmDetailsDao", UserVmDetailsDaoImpl.class);
addDao("VlanMappingDao", VlanMappingDaoImpl.class);
addDao("VlanMappingDirtyDao", VlanMappingDirtyDaoImpl.class);
addDao("OvsWorkDao", OvsWorkDaoImpl.class);
addDao("VmFlowLogDao", VmFlowLogDaoImpl.class);
addDao("GreTunnelDao", GreTunnelDaoImpl.class);
addDao("OvsTunnelDao", OvsTunnelDaoImpl.class);
addDao("OvsTunnelInterfaceDao", OvsTunnelInterfaceDaoImpl.class);
addDao("OvsTunnelAccountDao", OvsTunnelNetworkDaoImpl.class);
addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class);
@ -372,7 +359,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
addManager("RulesManager", RulesManagerImpl.class);
addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
addManager("OvsNetworkManager", OvsNetworkManagerImpl.class);
addManager("OvsTunnelManager", OvsTunnelManagerImpl.class);
addManager("Capacity Manager", CapacityManagerImpl.class);
addManager("VirtualMachineManager", ClusteredVirtualMachineManagerImpl.class);

View File

@ -26,9 +26,7 @@ import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
import com.cloud.network.Networks;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.ovs.OvsNetworkManager;
import com.cloud.network.ovs.OvsTunnelManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.utils.component.AdapterBase;
@ -40,8 +38,6 @@ import com.cloud.vm.VirtualMachineProfile;
@Local(value = NetworkElement.class)
public class OvsElement extends AdapterBase implements NetworkElement {
@Inject
OvsNetworkManager _ovsVlanMgr;
@Inject
OvsTunnelManager _ovsTunnelMgr;
@ -84,14 +80,6 @@ public class OvsElement extends AdapterBase implements NetworkElement {
return true;
}
//NOTE (Salvatore Orlando):
//The code for ovs Vlan Manager has not been touched. Only the OVS tunnel
//manager has been restored. Ideally, the code for OVS Vlan Manager should go.
_ovsVlanMgr.VmCheckAndCreateTunnel(vm, dest);
String command = _ovsVlanMgr.applyDefaultFlow(vm.getVirtualMachine(), dest);
if (command != null) {
nic.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(command));
}
_ovsTunnelMgr.VmCheckAndCreateTunnel(vm, network, dest);
//_ovsTunnelMgr.applyDefaultFlow(vm.getVirtualMachine(), dest);

View File

@ -35,7 +35,6 @@ import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.PhysicalNetworkVO;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.ovs.OvsNetworkManager;
import com.cloud.network.ovs.OvsTunnelManager;
import com.cloud.network.rules.PortForwardingRuleVO;
import com.cloud.network.rules.dao.PortForwardingRulesDao;
@ -66,13 +65,11 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
@Inject
PortForwardingRulesDao _pfRulesDao;
@Inject
OvsNetworkManager _ovsNetworkMgr;
@Inject
OvsTunnelManager _tunnelMgr;
@Override
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return null;
}
@ -91,7 +88,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException {
assert (config.getState() == State.Implementing) : "Why are we implementing " + config;
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return null;
}
@ -174,7 +171,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
NicProfile profile = super.allocate(config, nic, vm);
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return null;
}
@ -193,7 +190,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
public void deallocate(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm) {
super.deallocate(config, nic, vm);
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return;
}
@ -210,7 +207,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
public void reserve(NicProfile nic, Network config, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context)
throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException {
assert (nic.getReservationStrategy() == ReservationStrategy.Start) : "What can I do for nics that are not allocated at start? ";
if (_ovsNetworkMgr.isOvsNetworkEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return;
}
@ -244,7 +241,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
@Override
public boolean release(NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, String reservationId) {
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
if (_tunnelMgr.isOvsTunnelEnabled()) {
return true;
}

View File

@ -27,7 +27,6 @@ import com.cloud.exception.InsufficientVirtualNetworkCapcityException;
import com.cloud.network.Network;
import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkVO;
import com.cloud.network.ovs.OvsNetworkManager;
import com.cloud.network.ovs.OvsTunnelManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.user.Account;
@ -45,14 +44,13 @@ import com.cloud.network.Network.State;
public class OvsGuestNetworkGuru extends GuestNetworkGuru {
private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class);
@Inject OvsNetworkManager _ovsNetworkMgr;
@Inject NetworkManager _externalNetworkManager;
@Inject OvsTunnelManager _ovsTunnelMgr;
@Override
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
if (!_ovsNetworkMgr.isOvsNetworkEnabled() && !_ovsTunnelMgr.isOvsTunnelEnabled()) {
if (!_ovsTunnelMgr.isOvsTunnelEnabled()) {
return null;
}
@ -73,13 +71,7 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru {
if (vnet == null) {
throw new InsufficientVirtualNetworkCapcityException("Unable to allocate vnet as a part of network " + network + " implement ", DataCenter.class, dcId);
}
String vnetUri = null;
if (_ovsNetworkMgr.isOvsNetworkEnabled()) {
vnetUri = "vlan" + vnet;
} else if (_ovsTunnelMgr.isOvsTunnelEnabled()) {
vnetUri = vnet;
}
implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnetUri));
implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnet));
EventUtils.saveEvent(UserContext.current().getCallerUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: "+vnet+ " Network Id: "+network.getId(), 0);
} else {
implemented.setBroadcastUri(network.getBroadcastUri());
@ -89,7 +81,7 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru {
@Override
public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException {
assert (config.getState() == State.Implementing) : "Why are we implementing " + config;
if (!_ovsNetworkMgr.isOvsNetworkEnabled()&& !_ovsTunnelMgr.isOvsTunnelEnabled()) {
if (!_ovsTunnelMgr.isOvsTunnelEnabled()) {
return null;
}
NetworkVO implemented = (NetworkVO)super.implement(config, offering, dest, context);

View File

@ -22,7 +22,8 @@ public interface OvsTunnelManager extends Manager {
boolean isOvsTunnelEnabled();
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm, Network nw, DeployDestination dest);
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm,
Network nw, DeployDestination dest);
public void CheckAndDestroyTunnel(VirtualMachine vm, Network nw);

View File

@ -39,9 +39,7 @@ import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.Network;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkTrafficType;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
import com.cloud.network.ovs.dao.OvsTunnelInterfaceDao;
import com.cloud.network.ovs.dao.OvsTunnelInterfaceVO;
@ -63,7 +61,8 @@ import com.cloud.vm.dao.UserVmDao;
@Local(value={OvsTunnelManager.class})
public class OvsTunnelManagerImpl implements OvsTunnelManager {
public static final Logger s_logger = Logger.getLogger(OvsTunnelManagerImpl.class.getName());
public static final Logger s_logger =
Logger.getLogger(OvsTunnelManagerImpl.class.getName());
String _name;
boolean _isEnabled;
@ -95,12 +94,13 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
}
@DB
protected OvsTunnelNetworkVO createTunnelRecord(long from, long to, long networkId, int key) {
protected OvsTunnelNetworkVO createTunnelRecord(long from, long to,
long networkId, int key) {
OvsTunnelNetworkVO ta = null;
try {
ta = new OvsTunnelNetworkVO(from, to, key, networkId);
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
OvsTunnelNetworkVO lock =
_tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
if (lock == null) {
s_logger.warn("Cannot lock table ovs_tunnel_account");
return null;
@ -108,20 +108,21 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
_tunnelNetworkDao.persist(ta);
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
} catch (EntityExistsException e) {
s_logger.debug("A record for the tunnel from " + from + " to " + to + " already exists");
s_logger.debug("A record for the tunnel from " + from +
" to " + to + " already exists");
}
return ta;
}
@DB
protected OvsTunnelInterfaceVO createInterfaceRecord(String ip, String netmask, String mac,
long hostId, String label) {
protected OvsTunnelInterfaceVO createInterfaceRecord(String ip,
String netmask,String mac,long hostId, String label) {
OvsTunnelInterfaceVO ti = null;
try {
ti = new OvsTunnelInterfaceVO(ip, netmask, mac, hostId, label);
//TODO: Is locking really necessary here?
OvsTunnelInterfaceVO lock = _tunnelInterfaceDao.acquireInLockTable(Long.valueOf(1));
OvsTunnelInterfaceVO lock =
_tunnelInterfaceDao.acquireInLockTable(Long.valueOf(1));
if (lock == null) {
s_logger.warn("Cannot lock table ovs_tunnel_account");
return null;
@ -135,49 +136,54 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
return ti;
}
private String handleFetchInterfaceAnswer(Answer[] answers, Long hostId){
OvsFetchInterfaceAnswer ans = (OvsFetchInterfaceAnswer) answers[0];
OvsTunnelInterfaceVO ti = createInterfaceRecord(ans.getIp(), ans.getNetmask(), ans.getMac(),
hostId, ans.getLabel());
s_logger.debug("### Interface added to DB - id:" + ti.getId());
OvsTunnelInterfaceVO ti =
createInterfaceRecord(ans.getIp(), ans.getNetmask(),
ans.getMac(), hostId, ans.getLabel());
return ti.getIp();
}
private void handleCreateTunnelAnswer(Answer[] answers){
OvsCreateTunnelAnswer r = (OvsCreateTunnelAnswer) answers[0];
String s = String.format(
"(hostIP:%1$s, remoteIP:%2$s, bridge:%3$s, greKey:%4$s, portName:%5$s)",
r.getFromIp(), r.getToIp(), r.getBridge(), r.getKey(), r.getInPortName());
"(hostIP:%1$s, remoteIP:%2$s, bridge:%3$s," +
"greKey:%4$s, portName:%5$s)",
r.getFromIp(), r.getToIp(), r.getBridge(),
r.getKey(), r.getInPortName());
Long from = r.getFrom();
Long to = r.getTo();
long networkId = r.getNetworkId();
OvsTunnelNetworkVO tunnel = _tunnelNetworkDao.getByFromToNetwork(from, to, networkId);
if (tunnel == null) {
throw new CloudRuntimeException(String.format("Unable find tunnelNetwork record(from=%1$s, to=%2$s, account=%3$s", from, to, networkId));
throw new CloudRuntimeException(
String.format("Unable find tunnelNetwork record" +
"(from=%1$s,to=%2$s, account=%3$s",
from, to, networkId));
}
s_logger.debug("Result:" + r.getResult());
if (!r.getResult()) {
tunnel.setState("FAILED");
s_logger.warn("Create GRE tunnel failed due to " + r.getDetails() + s);
s_logger.warn("Create GRE tunnel failed due to " +
r.getDetails() + s);
} else {
tunnel.setState("SUCCESS");
tunnel.setPortName(r.getInPortName());
s_logger.warn("Create GRE tunnel " + r.getDetails() + s);
s_logger.warn("Create GRE tunnel " +
r.getDetails() + s);
}
_tunnelNetworkDao.update(tunnel.getId(), tunnel);
}
private String getGreEndpointIP(Host host, Network nw) throws AgentUnavailableException, OperationTimedoutException {
private String getGreEndpointIP(Host host, Network nw) throws
AgentUnavailableException, OperationTimedoutException {
String endpointIp = null;
// Fetch physical network and associated tags
// If no tag specified, look for this network
// TODO: Should we Make this a configuration option?
// Default name for network label
String physNetLabel = "cloud-public";
Long physNetId = nw.getPhysicalNetworkId();
PhysicalNetworkTrafficType physNetTT = _physNetTTDao.findBy(physNetId, TrafficType.Guest);
s_logger.debug("### Physical network:" + physNetId + " - traffic type:" + physNetTT.getUuid());
PhysicalNetworkTrafficType physNetTT =
_physNetTTDao.findBy(physNetId, TrafficType.Guest);
HypervisorType hvType = host.getHypervisorType();
switch (hvType) {
@ -188,27 +194,34 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
}
break;
default:
throw new CloudRuntimeException("Hypervisor " + hvType.toString() + " unsupported by OVS Tunnel Manager");
throw new CloudRuntimeException("Hypervisor " +
hvType.toString() +
" unsupported by OVS Tunnel Manager");
}
// Try to fetch GRE endpoint IP address for cloud db
// If not found, then find it on the hypervisor
OvsTunnelInterfaceVO tunnelIface = _tunnelInterfaceDao.getByHostAndLabel(host.getId(), physNetLabel);
OvsTunnelInterfaceVO tunnelIface =
_tunnelInterfaceDao.getByHostAndLabel(host.getId(),
physNetLabel);
if (tunnelIface == null) {
//Now find and fetch configuration for physical interface for network with label on target host
Commands fetchIfaceCmds = new Commands(new OvsFetchInterfaceCommand(physNetLabel));
s_logger.debug("Ask host " + host.getId() + " to retrieve interface for phy net with label:" + physNetLabel);
Answer[] fetchIfaceAnswers = _agentMgr.send(host.getId(), fetchIfaceCmds);
//Now find and fetch configuration for physical interface
//for network with label on target host
Commands fetchIfaceCmds =
new Commands(new OvsFetchInterfaceCommand(physNetLabel));
s_logger.debug("Ask host " + host.getId() +
" to retrieve interface for phy net with label:" +
physNetLabel);
Answer[] fetchIfaceAnswers = _agentMgr.send(host.getId(),
fetchIfaceCmds);
//And finally save it for future use
endpointIp = handleFetchInterfaceAnswer(fetchIfaceAnswers, host.getId());
endpointIp = handleFetchInterfaceAnswer(fetchIfaceAnswers,
host.getId());
} else {
endpointIp = tunnelIface.getIp();
}
s_logger.debug("### Ladies and gents, the endpoint for host " + host.getId() + " is " + endpointIp);
return endpointIp;
}
private int getGreKey(Network network) {
int key = 0;
@ -223,13 +236,15 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
s_logger.debug("Well well, how did '" + key +
"' end up in the broadcast URI for the network?");
throw new CloudRuntimeException(
String.format("Invalid GRE key parsed from network broadcast URI (%s)",
String.format("Invalid GRE key parsed from" +
"network broadcast URI (%s)",
network.getBroadcastUri().toString()));
}
}
@DB
protected void CheckAndCreateTunnel(VirtualMachine instance, Network nw, DeployDestination dest) {
protected void CheckAndCreateTunnel(VirtualMachine instance,
Network nw, DeployDestination dest) {
if (!_isEnabled) {
return;
}
@ -237,15 +252,17 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
s_logger.debug("Creating tunnels with OVS tunnel manager");
if (instance.getType() != VirtualMachine.Type.User
&& instance.getType() != VirtualMachine.Type.DomainRouter) {
s_logger.debug("Will not work if you're not an instance or a virtual router");
s_logger.debug("Will not work if you're not" +
"an instance or a virtual router");
return;
}
long hostId = dest.getHost().getId();
int key = getGreKey(nw);
// Find active (i.e.: not shut off) VMs with a NIC on the target network
List<UserVmVO> vms = _userVmDao.listByNetworkIdAndStates(nw.getId(), State.Running, State.Starting,
State.Stopping, State.Unknown, State.Migrating);
// Find active VMs with a NIC on the target network
List<UserVmVO> vms = _userVmDao.listByNetworkIdAndStates(nw.getId(),
State.Running, State.Starting,
State.Stopping, State.Unknown, State.Migrating);
// Find routers for the network
List<DomainRouterVO> routers = _routerDao.findByNetwork(nw.getId());
List<VMInstanceVO>ins = new ArrayList<VMInstanceVO>();
@ -262,24 +279,31 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
if (rh == null || rh.longValue() == hostId) {
continue;
}
OvsTunnelNetworkVO ta = _tunnelNetworkDao.getByFromToNetwork(hostId, rh.longValue(), nw.getId());
OvsTunnelNetworkVO ta =
_tunnelNetworkDao.getByFromToNetwork(hostId,
rh.longValue(), nw.getId());
// Try and create the tunnel even if a previous attempt failed
if (ta == null || ta.getState().equals("FAILED")) {
s_logger.debug("Attempting to create tunnel from:" + hostId + " to:" + rh.longValue());
s_logger.debug("Attempting to create tunnel from:" +
hostId + " to:" + rh.longValue());
if (ta == null) {
this.createTunnelRecord(hostId, rh.longValue(), nw.getId(), key);
this.createTunnelRecord(hostId, rh.longValue(),
nw.getId(), key);
}
if (!toHostIds.contains(rh)) {
toHostIds.add(rh);
}
}
ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(), hostId, nw.getId());
ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(),
hostId, nw.getId());
// Try and create the tunnel even if a previous attempt failed
if (ta == null || ta.getState().equals("FAILED")) {
s_logger.debug("Attempting to create tunnel from:" + rh.longValue() + " to:" + hostId);
s_logger.debug("Attempting to create tunnel from:" +
rh.longValue() + " to:" + hostId);
if (ta == null) {
this.createTunnelRecord(rh.longValue(), hostId, nw.getId(), key);
this.createTunnelRecord(rh.longValue(), hostId,
nw.getId(), key);
}
if (!fromHostIds.contains(rh)) {
fromHostIds.add(rh);
@ -295,8 +319,9 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
String otherIp = getGreEndpointIP(rHost, nw);
Commands cmds = new Commands(
new OvsCreateTunnelCommand(otherIp, key,
Long.valueOf(hostId), i, nw.getId(), myIp));
s_logger.debug("Ask host " + hostId + " to create gre tunnel to " + i);
Long.valueOf(hostId), i, nw.getId(), myIp));
s_logger.debug("Ask host " + hostId +
" to create gre tunnel to " + i);
Answer[] answers = _agentMgr.send(hostId, cmds);
handleCreateTunnelAnswer(answers);
noHost = false;
@ -306,9 +331,11 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
HostVO rHost = _hostDao.findById(i);
String otherIp = getGreEndpointIP(rHost, nw);
Commands cmds = new Commands(
new OvsCreateTunnelCommand(myIp, key, i, Long.valueOf(hostId),
new OvsCreateTunnelCommand(myIp, key, i,
Long.valueOf(hostId),
nw.getId(), otherIp));
s_logger.debug("Ask host " + i + " to create gre tunnel to " + hostId);
s_logger.debug("Ask host " + i +
" to create gre tunnel to " + hostId);
Answer[] answers = _agentMgr.send(i, cmds);
handleCreateTunnelAnswer(answers);
noHost = false;
@ -318,7 +345,8 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
if (noHost) {
Commands cmds = new Commands(
new OvsSetupBridgeCommand(key, hostId, nw.getId()));
s_logger.debug("Ask host " + hostId + " to configure bridge for network:" + nw.getId());
s_logger.debug("Ask host " + hostId +
" to configure bridge for network:" + nw.getId());
Answer[] answers = _agentMgr.send(hostId, cmds);
handleSetupBridgeAnswer(answers);
}
@ -348,49 +376,59 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
}
@Override
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm, Network nw, DeployDestination dest) {
public void VmCheckAndCreateTunnel(
VirtualMachineProfile<? extends VirtualMachine> vm,
Network nw, DeployDestination dest) {
CheckAndCreateTunnel(vm.getVirtualMachine(), nw, dest);
}
@DB
private void handleDestroyTunnelAnswer(Answer ans, long from, long to, long network_id) {
private void handleDestroyTunnelAnswer(Answer ans, long from,
long to, long network_id) {
if (ans.getResult()) {
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
if (lock == null) {
s_logger.warn(String.format("failed to lock ovs_tunnel_account, remove record of " +
"tunnel(from=%1$s, to=%2$s account=%3$s) failed",
from, to, network_id));
s_logger.warn(String.format("failed to lock" +
"ovs_tunnel_account, remove record of " +
"tunnel(from=%1$s, to=%2$s account=%3$s) failed",
from, to, network_id));
return;
}
_tunnelNetworkDao.removeByFromToNetwork(from, to, network_id);
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
s_logger.debug(String.format("Destroy tunnel(account:%1$s, from:%2$s, to:%3$s) successful",
network_id, from, to));
s_logger.debug(String.format("Destroy tunnel(account:%1$s," +
"from:%2$s, to:%3$s) successful",
network_id, from, to));
} else {
s_logger.debug(String.format("Destroy tunnel(account:%1$s, from:%2$s, to:%3$s) failed",
network_id, from, to));
s_logger.debug(String.format("Destroy tunnel(account:%1$s," +
"from:%2$s, to:%3$s) failed",
network_id, from, to));
}
}
@DB
private void handleDestroyBridgeAnswer(Answer ans, long host_id, long network_id) {
private void handleDestroyBridgeAnswer(Answer ans,
long host_id, long network_id) {
if (ans.getResult()) {
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
OvsTunnelNetworkVO lock =
_tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
if (lock == null) {
s_logger.warn("failed to lock ovs_tunnel_network, remove record");
s_logger.warn("failed to lock ovs_tunnel_network," +
"remove record");
return;
}
_tunnelNetworkDao.removeByFromNetwork(host_id, network_id);
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
s_logger.debug(String.format("Destroy bridge for network %1$s successful", network_id));
s_logger.debug(String.format("Destroy bridge for" +
"network %1$s successful", network_id));
} else {
s_logger.debug(String.format("Destroy bridge for network %1$s failed", network_id));
s_logger.debug(String.format("Destroy bridge for" +
"network %1$s failed", network_id));
}
}
@ -405,19 +443,22 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
return;
}
List<UserVmVO> userVms = _userVmDao.listByAccountIdAndHostId(vm.getAccountId(), vm.getHostId());
List<UserVmVO> userVms = _userVmDao.listByAccountIdAndHostId(
vm.getAccountId(), vm.getHostId());
if (vm.getType() == VirtualMachine.Type.User) {
if (userVms.size() > 1) {
return;
}
List<DomainRouterVO> routers = _routerDao.findByNetwork(nw.getId());
List<DomainRouterVO> routers =
_routerDao.findByNetwork(nw.getId());
for (DomainRouterVO router : routers) {
if (router.getHostId() == vm.getHostId()) {
return;
}
}
} else if (vm.getType() == VirtualMachine.Type.DomainRouter && userVms.size() != 0) {
} else if (vm.getType() == VirtualMachine.Type.DomainRouter &&
userVms.size() != 0) {
return;
}
try {
@ -425,26 +466,31 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
* the tunnels for this network */
int key = getGreKey(nw);
Command cmd = new OvsDestroyBridgeCommand(nw.getId(), key);
s_logger.debug("Destroying bridge for network " + nw.getId() + " on host:" + vm.getHostId());
s_logger.debug("Destroying bridge for network " + nw.getId() +
" on host:" + vm.getHostId());
Answer ans = _agentMgr.send(vm.getHostId(), cmd);
handleDestroyBridgeAnswer(ans, vm.getHostId(), nw.getId());
/* Then ask hosts have peer tunnel with me to destroy them */
List<OvsTunnelNetworkVO> peers = _tunnelNetworkDao.listByToNetwork(vm.getHostId(), nw.getId());
List<OvsTunnelNetworkVO> peers =
_tunnelNetworkDao.listByToNetwork(vm.getHostId(),
nw.getId());
for (OvsTunnelNetworkVO p : peers) {
// If the tunnel was not successfully created don't bother to remove it
if (p.getState().equals("SUCCESS")) {
cmd = new OvsDestroyTunnelCommand(p.getNetworkId(), key, p.getPortName());
cmd = new OvsDestroyTunnelCommand(p.getNetworkId(), key,
p.getPortName());
s_logger.debug("Destroying tunnel to " + vm.getHostId() +
" from " + p.getFrom());
ans = _agentMgr.send(p.getFrom(), cmd);
handleDestroyTunnelAnswer(ans, p.getFrom(), p.getTo(), p.getNetworkId());
handleDestroyTunnelAnswer(ans, p.getFrom(),
p.getTo(), p.getNetworkId());
}
}
} catch (Exception e) {
s_logger.warn(String.format("Destroy tunnel(account:%1$s, hostId:%2$s) failed", vm.getAccountId(), vm.getHostId()), e);
s_logger.warn(String.format("Destroy tunnel(account:%1$s," +
"hostId:%2$s) failed", vm.getAccountId(), vm.getHostId()), e);
}
}
}

View File

@ -87,15 +87,7 @@ import com.cloud.network.firewall.FirewallManagerImpl;
import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
import com.cloud.network.ovs.OvsNetworkManagerImpl;
import com.cloud.network.ovs.OvsTunnelManagerImpl;
import com.cloud.network.ovs.dao.GreTunnelDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelAccountDaoImpl;
import com.cloud.network.ovs.dao.OvsTunnelDaoImpl;
import com.cloud.network.ovs.dao.OvsWorkDaoImpl;
import com.cloud.network.ovs.dao.VlanMappingDaoImpl;
import com.cloud.network.ovs.dao.VlanMappingDirtyDaoImpl;
import com.cloud.network.ovs.dao.VmFlowLogDaoImpl;
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
import com.cloud.network.rules.RulesManagerImpl;
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
@ -262,13 +254,6 @@ public class ResourceManagerTest extends TestCase {
_locator.addDao("UsageEventDao", UsageEventDaoImpl.class);
_locator.addDao("ClusterDetailsDao", ClusterDetailsDaoImpl.class);
_locator.addDao("UserVmDetailsDao", UserVmDetailsDaoImpl.class);
_locator.addDao("VlanMappingDao", VlanMappingDaoImpl.class);
_locator.addDao("VlanMappingDirtyDao", VlanMappingDirtyDaoImpl.class);
_locator.addDao("OvsWorkDao", OvsWorkDaoImpl.class);
_locator.addDao("VmFlowLogDao", VmFlowLogDaoImpl.class);
_locator.addDao("GreTunnelDao", GreTunnelDaoImpl.class);
_locator.addDao("OvsTunnelDao", OvsTunnelDaoImpl.class);
_locator.addDao("OvsTunnelAccountDao", OvsTunnelAccountDaoImpl.class);
_locator.addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class);
_locator.addDao("HostTagsDao", HostTagsDaoImpl.class);
_locator.addDao("NetworkDomainDao", NetworkDomainDaoImpl.class);
@ -311,7 +296,6 @@ public class ResourceManagerTest extends TestCase {
_locator.addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
_locator.addManager("RulesManager", RulesManagerImpl.class);
_locator.addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
_locator.addManager("OvsNetworkManager", OvsNetworkManagerImpl.class);
_locator.addManager("OvsTunnelManager", OvsTunnelManagerImpl.class);
_locator.addManager("Capacity Manager", CapacityManagerImpl.class);
_locator.addManager("Cluster Manager", ClusterManagerImpl.class);