Fix findbugs findings in cloud-plugin-network-ovs OvsTunnelManagerImpl.java:456, RC_REF_COMPARISON, Priority: High
Serveral low priority fixes Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ef2ced75 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ef2ced75 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ef2ced75 Branch: refs/heads/ui-restyle Commit: ef2ced7564d2c8a7920458e9db482d3d09ec5ff3 Parents: cc6938e Author: Hugo Trippaers <htrippa...@schubergphilis.com> Authored: Mon Feb 10 13:09:53 2014 +0100 Committer: Hugo Trippaers <htrippa...@schubergphilis.com> Committed: Fri Feb 14 18:37:46 2014 +0100 ---------------------------------------------------------------------- .../com/cloud/network/element/OvsElement.java | 283 +++++++++---------- .../cloud/network/guru/OvsGuestNetworkGuru.java | 4 - .../com/cloud/network/ovs/OvsTunnelManager.java | 4 +- .../cloud/network/ovs/OvsTunnelManagerImpl.java | 148 +++++----- 4 files changed, 213 insertions(+), 226 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef2ced75/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java index ea46f93..03eeedd 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java @@ -75,12 +75,12 @@ import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.DomainRouterDao; @Local(value = {NetworkElement.class, ConnectivityProvider.class, - SourceNatServiceProvider.class, StaticNatServiceProvider.class, - PortForwardingServiceProvider.class, IpDeployer.class}) + SourceNatServiceProvider.class, StaticNatServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class}) public class OvsElement extends AdapterBase implements NetworkElement, - OvsElementService, ConnectivityProvider, ResourceStateAdapter, - PortForwardingServiceProvider, LoadBalancingServiceProvider, - StaticNatServiceProvider, IpDeployer { +OvsElementService, ConnectivityProvider, ResourceStateAdapter, +PortForwardingServiceProvider, LoadBalancingServiceProvider, +StaticNatServiceProvider, IpDeployer { @Inject OvsTunnelManager _ovsTunnelMgr; @Inject @@ -109,21 +109,21 @@ public class OvsElement extends AdapterBase implements NetworkElement, protected boolean canHandle(Network network, Service service) { s_logger.debug("Checking if OvsElement can handle service " - + service.getName() + " on network " + network.getDisplayText()); + + service.getName() + " on network " + network.getDisplayText()); if (network.getBroadcastDomainType() != BroadcastDomainType.Vswitch) { return false; } if (!_networkModel.isProviderForNetwork(getProvider(), network.getId())) { s_logger.debug("OvsElement is not a provider for network " - + network.getDisplayText()); + + network.getDisplayText()); return false; } if (!_ntwkSrvcDao.canProviderSupportServiceInNetwork(network.getId(), - service, Network.Provider.Ovs)) { + service, Network.Provider.Ovs)) { s_logger.debug("OvsElement can't provide the " + service.getName() - + " service on network " + network.getDisplayText()); + + " service on network " + network.getDisplayText()); return false; } @@ -132,7 +132,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean configure(String name, Map<String, Object> params) - throws ConfigurationException { + throws ConfigurationException { super.configure(name, params); _resourceMgr.registerResourceStateAdapter(name, this); return true; @@ -140,12 +140,12 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean implement(Network network, NetworkOffering offering, - DeployDestination dest, ReservationContext context) - throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { + DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { s_logger.debug("entering OvsElement implement function for network " - + network.getDisplayText() + " (state " + network.getState() - + ")"); + + network.getDisplayText() + " (state " + network.getState() + + ")"); if (!canHandle(network, Service.Connectivity)) { return false; @@ -155,10 +155,10 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean prepare(Network network, NicProfile nic, - VirtualMachineProfile vm, - DeployDestination dest, ReservationContext context) - throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { + VirtualMachineProfile vm, + DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { if (!canHandle(network, Service.Connectivity)) { return false; } @@ -171,16 +171,16 @@ public class OvsElement extends AdapterBase implements NetworkElement, return false; } - _ovsTunnelMgr.VmCheckAndCreateTunnel(vm, network, dest); + _ovsTunnelMgr.vmCheckAndCreateTunnel(vm, network, dest); return true; } @Override public boolean release(Network network, NicProfile nic, - VirtualMachineProfile vm, - ReservationContext context) throws ConcurrentOperationException, - ResourceUnavailableException { + VirtualMachineProfile vm, + ReservationContext context) throws ConcurrentOperationException, + ResourceUnavailableException { if (!canHandle(network, Service.Connectivity)) { return false; } @@ -192,14 +192,14 @@ public class OvsElement extends AdapterBase implements NetworkElement, return false; } - _ovsTunnelMgr.CheckAndDestroyTunnel(vm.getVirtualMachine(), network); + _ovsTunnelMgr.checkAndDestroyTunnel(vm.getVirtualMachine(), network); return true; } @Override public boolean shutdown(Network network, ReservationContext context, - boolean cleanup) throws ConcurrentOperationException, - ResourceUnavailableException { + boolean cleanup) throws ConcurrentOperationException, + ResourceUnavailableException { if (!canHandle(network, Service.Connectivity)) { return false; } @@ -208,7 +208,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean destroy(Network network, ReservationContext context) - throws ConcurrentOperationException, ResourceUnavailableException { + throws ConcurrentOperationException, ResourceUnavailableException { if (!canHandle(network, Service.Connectivity)) { return false; } @@ -222,8 +222,8 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean shutdownProviderInstances( - PhysicalNetworkServiceProvider provider, ReservationContext context) - throws ConcurrentOperationException, ResourceUnavailableException { + PhysicalNetworkServiceProvider provider, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException { return true; } @@ -275,90 +275,90 @@ public class OvsElement extends AdapterBase implements NetworkElement, method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is loadbalancer cookie based stickiness method."); method.addParam("cookie-name", false, "Cookie name passed in http header by the LB to the client.", false); method.addParam("mode", false, - "Valid values: insert, rewrite, prefix. Default value: insert. In the insert mode cookie will be created" + - " by the LB. In other modes, cookie will be created by the server and LB modifies it.", false); + "Valid values: insert, rewrite, prefix. Default value: insert. In the insert mode cookie will be created" + + " by the LB. In other modes, cookie will be created by the server and LB modifies it.", false); method.addParam( - "nocache", - false, - "This option is recommended in conjunction with the insert mode when there is a cache between the client" + - " and HAProxy, as it ensures that a cacheable response will be tagged non-cacheable if a cookie needs " + - "to be inserted. This is important because if all persistence cookies are added on a cacheable home page" + - " for instance, then all customers will then fetch the page from an outer cache and will all share the " + - "same persistence cookie, leading to one server receiving much more traffic than others. See also the " + - "insert and postonly options. ", - true); + "nocache", + false, + "This option is recommended in conjunction with the insert mode when there is a cache between the client" + + " and HAProxy, as it ensures that a cacheable response will be tagged non-cacheable if a cookie needs " + + "to be inserted. This is important because if all persistence cookies are added on a cacheable home page" + + " for instance, then all customers will then fetch the page from an outer cache and will all share the " + + "same persistence cookie, leading to one server receiving much more traffic than others. See also the " + + "insert and postonly options. ", + true); method.addParam( - "indirect", - false, - "When this option is specified in insert mode, cookies will only be added when the server was not reached" + - " after a direct access, which means that only when a server is elected after applying a load-balancing algorithm," + - " or after a redispatch, then the cookie will be inserted. If the client has all the required information" + - " to connect to the same server next time, no further cookie will be inserted. In all cases, when the " + - "indirect option is used in insert mode, the cookie is always removed from the requests transmitted to " + - "the server. The persistence mechanism then becomes totally transparent from the application point of view.", - true); + "indirect", + false, + "When this option is specified in insert mode, cookies will only be added when the server was not reached" + + " after a direct access, which means that only when a server is elected after applying a load-balancing algorithm," + + " or after a redispatch, then the cookie will be inserted. If the client has all the required information" + + " to connect to the same server next time, no further cookie will be inserted. In all cases, when the " + + "indirect option is used in insert mode, the cookie is always removed from the requests transmitted to " + + "the server. The persistence mechanism then becomes totally transparent from the application point of view.", + true); method.addParam( - "postonly", - false, - "This option ensures that cookie insertion will only be performed on responses to POST requests. It is an" + - " alternative to the nocache option, because POST responses are not cacheable, so this ensures that the " + - "persistence cookie will never get cached.Since most sites do not need any sort of persistence before the" + - " first POST which generally is a login request, this is a very efficient method to optimize caching " + - "without risking to find a persistence cookie in the cache. See also the insert and nocache options.", - true); + "postonly", + false, + "This option ensures that cookie insertion will only be performed on responses to POST requests. It is an" + + " alternative to the nocache option, because POST responses are not cacheable, so this ensures that the " + + "persistence cookie will never get cached.Since most sites do not need any sort of persistence before the" + + " first POST which generally is a login request, this is a very efficient method to optimize caching " + + "without risking to find a persistence cookie in the cache. See also the insert and nocache options.", + true); method.addParam( - "domain", - false, - "This option allows to specify the domain at which a cookie is inserted. It requires exactly one parameter:" + - " a valid domain name. If the domain begins with a dot, the browser is allowed to use it for any host " + - "ending with that name. It is also possible to specify several domain names by invoking this option multiple" + - " times. Some browsers might have small limits on the number of domains, so be careful when doing that. " + - "For the record, sending 10 domains to MSIE 6 or Firefox 2 works as expected.", - false); + "domain", + false, + "This option allows to specify the domain at which a cookie is inserted. It requires exactly one parameter:" + + " a valid domain name. If the domain begins with a dot, the browser is allowed to use it for any host " + + "ending with that name. It is also possible to specify several domain names by invoking this option multiple" + + " times. Some browsers might have small limits on the number of domains, so be careful when doing that. " + + "For the record, sending 10 domains to MSIE 6 or Firefox 2 works as expected.", + false); methodList.add(method); method = new LbStickinessMethod(StickinessMethodType.AppCookieBased, - "This is App session based sticky method. Define session stickiness on an existing application cookie. " + + "This is App session based sticky method. Define session stickiness on an existing application cookie. " + "It can be used only for a specific http traffic"); method.addParam("cookie-name", false, "This is the name of the cookie used by the application and which LB will " + - "have to learn for each new session. Default value: Auto geneared based on ip", false); + "have to learn for each new session. Default value: Auto geneared based on ip", false); method.addParam("length", false, "This is the max number of characters that will be memorized and checked in " + - "each cookie value. Default value:52", false); + "each cookie value. Default value:52", false); method.addParam( - "holdtime", - false, - "This is the time after which the cookie will be removed from memory if unused. The value should be in " + - "the format Example : 20s or 30m or 4h or 5d . only seconds(s), minutes(m) hours(h) and days(d) are valid," + - " cannot use th combinations like 20h30m. Default value:3h ", - false); + "holdtime", + false, + "This is the time after which the cookie will be removed from memory if unused. The value should be in " + + "the format Example : 20s or 30m or 4h or 5d . only seconds(s), minutes(m) hours(h) and days(d) are valid," + + " cannot use th combinations like 20h30m. Default value:3h ", + false); method.addParam( - "request-learn", - false, - "If this option is specified, then haproxy will be able to learn the cookie found in the request in case the server does not specify any in response. This is typically what happens with PHPSESSID cookies, or when haproxy's session expires before the application's session and the correct server is selected. It is recommended to specify this option to improve reliability", - true); + "request-learn", + false, + "If this option is specified, then haproxy will be able to learn the cookie found in the request in case the server does not specify any in response. This is typically what happens with PHPSESSID cookies, or when haproxy's session expires before the application's session and the correct server is selected. It is recommended to specify this option to improve reliability", + true); method.addParam( - "prefix", - false, - "When this option is specified, haproxy will match on the cookie prefix (or URL parameter prefix). " - + - "The appsession value is the data following this prefix. Example : appsession ASPSESSIONID len 64 timeout 3h prefix This will match the cookie ASPSESSIONIDXXXX=XXXXX, the appsession value will be XXXX=XXXXX.", - true); + "prefix", + false, + "When this option is specified, haproxy will match on the cookie prefix (or URL parameter prefix). " + + + "The appsession value is the data following this prefix. Example : appsession ASPSESSIONID len 64 timeout 3h prefix This will match the cookie ASPSESSIONIDXXXX=XXXXX, the appsession value will be XXXX=XXXXX.", + true); method.addParam( - "mode", - false, - "This option allows to change the URL parser mode. 2 modes are currently supported : - path-parameters " + - ": The parser looks for the appsession in the path parameters part (each parameter is separated by a semi-colon), " + - "which is convenient for JSESSIONID for example.This is the default mode if the option is not set. - query-string :" + - " In this mode, the parser will look for the appsession in the query string.", - false); + "mode", + false, + "This option allows to change the URL parser mode. 2 modes are currently supported : - path-parameters " + + ": The parser looks for the appsession in the path parameters part (each parameter is separated by a semi-colon), " + + "which is convenient for JSESSIONID for example.This is the default mode if the option is not set. - query-string :" + + " In this mode, the parser will look for the appsession in the query string.", + false); methodList.add(method); method = new LbStickinessMethod(StickinessMethodType.SourceBased, "This is source based Stickiness method, " + - "it can be used for any type of protocol."); + "it can be used for any type of protocol."); method.addParam("tablesize", false, "Size of table to store source ip addresses. example: tablesize=200k or 300m" + - " or 400g. Default value:200k", false); + " or 400g. Default value:200k", false); method.addParam("expire", false, "Entry in source ip table will expire after expire duration. units can be s,m,h,d ." + - " example: expire=30m 20s 50h 4d. Default value:3h", false); + " example: expire=30m 20s 50h 4d. Default value:3h", false); methodList.add(method); Gson gson = new Gson(); @@ -374,14 +374,14 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public HostVO createHostVOForConnectedAgent(HostVO host, - StartupCommand[] cmd) { + StartupCommand[] cmd) { return null; } @Override public HostVO createHostVOForDirectConnectAgent(HostVO host, - StartupCommand[] startup, ServerResource resource, - Map<String, String> details, List<String> hostTags) { + StartupCommand[] startup, ServerResource resource, + Map<String, String> details, List<String> hostTags) { if (!(startup[0] instanceof StartupOvsCommand)) { return null; } @@ -391,7 +391,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, - boolean isForceDeleteStorage) throws UnableDeleteHostException { + boolean isForceDeleteStorage) throws UnableDeleteHostException { if (!(host.getType() == Host.Type.L2Networking)) { return null; } @@ -405,8 +405,8 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean applyIps(Network network, - List<? extends PublicIpAddress> ipAddress, Set<Service> services) - throws ResourceUnavailableException { + List<? extends PublicIpAddress> ipAddress, Set<Service> services) + throws ResourceUnavailableException { boolean canHandle = true; for (Service service : services) { // check if Ovs can handle services except SourceNat & Firewall @@ -417,11 +417,11 @@ public class OvsElement extends AdapterBase implements NetworkElement, } if (canHandle) { List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole( - network.getId(), Role.VIRTUAL_ROUTER); + network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router element doesn't need to associate ip addresses on the backend; virtual " - + "router doesn't exist in the network " - + network.getId()); + + "router doesn't exist in the network " + + network.getId()); return true; } @@ -433,15 +433,15 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean applyStaticNats(Network network, List<? extends StaticNat> rules) - throws ResourceUnavailableException { + throws ResourceUnavailableException { if (!canHandle(network, Service.StaticNat)) { return false; } List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole( - network.getId(), Role.VIRTUAL_ROUTER); + network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug("Ovs element doesn't need to apply static nat on the backend; virtual " - + "router doesn't exist in the network " + network.getId()); + + "router doesn't exist in the network " + network.getId()); return true; } @@ -450,15 +450,15 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean applyPFRules(Network network, List<PortForwardingRule> rules) - throws ResourceUnavailableException { + throws ResourceUnavailableException { if (!canHandle(network, Service.PortForwarding)) { return false; } List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole( - network.getId(), Role.VIRTUAL_ROUTER); + network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug("Ovs element doesn't need to apply firewall rules on the backend; virtual " - + "router doesn't exist in the network " + network.getId()); + + "router doesn't exist in the network " + network.getId()); return true; } @@ -467,25 +467,25 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) - throws ResourceUnavailableException { + throws ResourceUnavailableException { if (canHandle(network, Service.Lb)) { if (!canHandleLbRules(rules)) { return false; } List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole( - network.getId(), Role.VIRTUAL_ROUTER); + network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual " - + "router doesn't exist in the network " - + network.getId()); + + "router doesn't exist in the network " + + network.getId()); return true; } if (!_routerMgr.applyLoadBalancingRules(network, rules, routers)) { throw new CloudRuntimeException( - "Failed to apply load balancing rules in network " - + network.getId()); + "Failed to apply load balancing rules in network " + + network.getId()); } else { return true; } @@ -500,7 +500,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, rules.add(rule); if (canHandle(network, Service.Lb) && canHandleLbRules(rules)) { List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole( - network.getId(), Role.VIRTUAL_ROUTER); + network.getId(), Role.VIRTUAL_ROUTER); if (routers == null || routers.isEmpty()) { return true; } @@ -511,21 +511,21 @@ public class OvsElement extends AdapterBase implements NetworkElement, @Override public List<LoadBalancerTO> updateHealthChecks(Network network, - List<LoadBalancingRule> lbrules) { + List<LoadBalancingRule> lbrules) { // TODO Auto-generated method stub return null; } private boolean canHandleLbRules(List<LoadBalancingRule> rules) { - Map<Capability, String> lbCaps = this.getCapabilities().get(Service.Lb); + Map<Capability, String> lbCaps = getCapabilities().get(Service.Lb); if (!lbCaps.isEmpty()) { String schemeCaps = lbCaps.get(Capability.LbSchemes); if (schemeCaps != null) { for (LoadBalancingRule rule : rules) { if (!schemeCaps.contains(rule.getScheme().toString())) { s_logger.debug("Scheme " + rules.get(0).getScheme() - + " is not supported by the provider " - + this.getName()); + + " is not supported by the provider " + + getName()); return false; } } @@ -539,13 +539,13 @@ public class OvsElement extends AdapterBase implements NetworkElement, for (LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) { List<Pair<String, String>> paramsList = stickinessPolicy - .getParams(); + .getParams(); if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase( - stickinessPolicy.getMethodName())) { + stickinessPolicy.getMethodName())) { } else if (StickinessMethodType.SourceBased.getName() - .equalsIgnoreCase(stickinessPolicy.getMethodName())) { + .equalsIgnoreCase(stickinessPolicy.getMethodName())) { String tablesize = "200k"; // optional String expire = "30m"; // optional @@ -559,38 +559,29 @@ public class OvsElement extends AdapterBase implements NetworkElement, expire = value; } if ((expire != null) - && !containsOnlyNumbers(expire, timeEndChar)) { + && !containsOnlyNumbers(expire, timeEndChar)) { throw new InvalidParameterValueException( - "Failed LB in validation rule id: " + rule.getId() + "Failed LB in validation rule id: " + rule.getId() + " Cause: expire is not in timeformat: " + expire); } if ((tablesize != null) - && !containsOnlyNumbers(tablesize, "kmg")) { + && !containsOnlyNumbers(tablesize, "kmg")) { throw new InvalidParameterValueException( - "Failed LB in validation rule id: " - + rule.getId() - + " Cause: tablesize is not in size format: " - + tablesize); + "Failed LB in validation rule id: " + + rule.getId() + + " Cause: tablesize is not in size format: " + + tablesize); } } else if (StickinessMethodType.AppCookieBased.getName() - .equalsIgnoreCase(stickinessPolicy.getMethodName())) { - /* - * FORMAT : appsession <cookie> len <length> timeout <holdtime> - * [request-learn] [prefix] [mode - * <path-parameters|query-string>] - */ - /* example: appsession JSESSIONID len 52 timeout 3h */ - String cookieName = null; // optional + .equalsIgnoreCase(stickinessPolicy.getMethodName())) { String length = null; // optional String holdTime = null; // optional for (Pair<String, String> paramKV : paramsList) { String key = paramKV.first(); String value = paramKV.second(); - if ("cookie-name".equalsIgnoreCase(key)) - cookieName = value; if ("length".equalsIgnoreCase(key)) length = value; if ("holdtime".equalsIgnoreCase(key)) @@ -599,15 +590,15 @@ public class OvsElement extends AdapterBase implements NetworkElement, if ((length != null) && (!containsOnlyNumbers(length, null))) { throw new InvalidParameterValueException( - "Failed LB in validation rule id: " + rule.getId() + "Failed LB in validation rule id: " + rule.getId() + " Cause: length is not a number: " + length); } if ((holdTime != null) - && (!containsOnlyNumbers(holdTime, timeEndChar) && !containsOnlyNumbers( - holdTime, null))) { + && (!containsOnlyNumbers(holdTime, timeEndChar) && !containsOnlyNumbers( + holdTime, null))) { throw new InvalidParameterValueException( - "Failed LB in validation rule id: " + rule.getId() + "Failed LB in validation rule id: " + rule.getId() + " Cause: holdtime is not in timeformat: " + holdTime); } @@ -630,7 +621,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, boolean matchedEndChar = false; if (str.length() < 2) return false; // atleast one numeric and one char. example: - // 3h + // 3h char strEnd = str.toCharArray()[str.length() - 1]; for (char c : endChar.toCharArray()) { if (strEnd == c) { @@ -643,7 +634,7 @@ public class OvsElement extends AdapterBase implements NetworkElement, return false; } try { - int i = Integer.parseInt(number); + Integer.parseInt(number); } catch (NumberFormatException e) { return false; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef2ced75/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java index 6aacbb2..8fa636d 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java @@ -144,10 +144,6 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru { if (network.getCidr() != null) { implemented.setCidr(network.getCidr()); } - String name = network.getName(); - if (name == null || name.isEmpty()) { - name = ((NetworkVO)network).getUuid(); - } // do we need to create switch right now? http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef2ced75/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java b/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java index eaf2d66..118beeb 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManager.java @@ -26,8 +26,8 @@ public interface OvsTunnelManager extends Manager { boolean isOvsTunnelEnabled(); - public void VmCheckAndCreateTunnel(VirtualMachineProfile vm, Network nw, DeployDestination dest); + public void vmCheckAndCreateTunnel(VirtualMachineProfile vm, Network nw, DeployDestination dest); - public void CheckAndDestroyTunnel(VirtualMachine vm, Network nw); + public void checkAndDestroyTunnel(VirtualMachine vm, Network nw); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef2ced75/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java ---------------------------------------------------------------------- diff --git a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java b/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java index aa0f42e..320568b 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/ovs/OvsTunnelManagerImpl.java @@ -104,7 +104,7 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage @Override public boolean configure(String name, Map<String, Object> params) - throws ConfigurationException { + throws ConfigurationException { _executorPool = Executors.newScheduledThreadPool(10, new NamedThreadFactory("OVS")); _cleanupExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("OVS-Cleanup")); @@ -113,13 +113,13 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage @DB protected OvsTunnelInterfaceVO createInterfaceRecord(String ip, - String netmask, String mac, long hostId, String label) { + 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)); + .acquireInLockTable(Long.valueOf(1)); if (lock == null) { s_logger.warn("Cannot lock table ovs_tunnel_account"); return null; @@ -128,7 +128,7 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage _tunnelInterfaceDao.releaseFromLockTable(lock.getId()); } catch (EntityExistsException e) { s_logger.debug("A record for the interface for network " + label - + " on host id " + hostId + " already exists"); + + " on host id " + hostId + " already exists"); } return ti; } @@ -138,13 +138,13 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage if (ans.getResult()) { if (ans.getIp() != null && !("".equals(ans.getIp()))) { OvsTunnelInterfaceVO ti = createInterfaceRecord(ans.getIp(), - ans.getNetmask(), ans.getMac(), hostId, ans.getLabel()); + ans.getNetmask(), ans.getMac(), hostId, ans.getLabel()); return ti.getIp(); } } // Fetch interface failed! s_logger.warn("Unable to fetch the IP address for the GRE tunnel endpoint" - + ans.getDetails()); + + ans.getDetails()); return null; } @@ -169,22 +169,22 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage 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()); + 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()); 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)); + String.format("Unable find tunnelNetwork record" + + "(from=%1$s,to=%2$s, account=%3$s", + from, to, networkId)); } if (!r.getResult()) { tunnel.setState("FAILED"); s_logger.warn("Create GRE tunnel failed due to " + r.getDetails() - + s); + + s); } else { tunnel.setState("SUCCESS"); tunnel.setPortName(r.getInPortName()); @@ -194,31 +194,31 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage } private String getGreEndpointIP(Host host, Network nw) - throws AgentUnavailableException, OperationTimedoutException { + throws AgentUnavailableException, OperationTimedoutException { String endpointIp = null; // Fetch fefault name for network label from configuration String physNetLabel = _configDao.getValue(Config.OvsTunnelNetworkDefaultLabel.key()); Long physNetId = nw.getPhysicalNetworkId(); PhysicalNetworkTrafficType physNetTT = - _physNetTTDao.findBy(physNetId, TrafficType.Guest); + _physNetTTDao.findBy(physNetId, TrafficType.Guest); HypervisorType hvType = host.getHypervisorType(); String label = null; switch (hvType) { - case XenServer: - label = physNetTT.getXenNetworkLabel(); - if ((label != null) && (!label.equals(""))) { - physNetLabel = label; - } - break; - case KVM: - label = physNetTT.getKvmNetworkLabel(); - if ((label != null) && (!label.equals(""))) { - physNetLabel = label; - } - break; - default: - throw new CloudRuntimeException("Hypervisor " + + case XenServer: + label = physNetTT.getXenNetworkLabel(); + if ((label != null) && (!label.equals(""))) { + physNetLabel = label; + } + break; + case KVM: + label = physNetTT.getKvmNetworkLabel(); + if ((label != null) && (!label.equals(""))) { + physNetLabel = label; + } + break; + default: + throw new CloudRuntimeException("Hypervisor " + hvType.toString() + " unsupported by OVS Tunnel Manager"); } @@ -226,16 +226,16 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage // 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); + _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)); + new Commands(new OvsFetchInterfaceCommand(physNetLabel)); s_logger.debug("Ask host " + host.getId() + - " to retrieve interface for phy net with label:" + - physNetLabel); + " 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()); @@ -255,26 +255,26 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage // !! not in the case of lswitch/pvlan/(possibly)vswitch // So we now feel quite safe in converting it into a string // by calling the appropriate BroadcastDomainType method - key = Integer.valueOf(keyStr); + key = Integer.parseInt(keyStr); return key; } catch (NumberFormatException e) { s_logger.debug("Well well, how did '" + key - + "' end up in the broadcast URI for the network?"); + + "' end up in the broadcast URI for the network?"); throw new CloudRuntimeException(String.format( - "Invalid GRE key parsed from" - + "network broadcast URI (%s)", network - .getBroadcastUri().toString())); + "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) { s_logger.debug("Creating tunnels with OVS tunnel manager"); if (instance.getType() != VirtualMachine.Type.User - && instance.getType() != VirtualMachine.Type.DomainRouter) { + && instance.getType() != VirtualMachine.Type.DomainRouter) { s_logger.debug("Will not work if you're not" - + "an instance or a virtual router"); + + "an instance or a virtual router"); return; } @@ -282,8 +282,8 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage int key = getGreKey(nw); // 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); + 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>(); @@ -313,14 +313,14 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage } ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(), - hostId, nw.getId()); + 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); + rh.longValue() + " to:" + hostId); if (ta == null) { createTunnelRecord(rh.longValue(), hostId, - nw.getId(), key); + nw.getId(), key); } if (!fromHostIds.contains(rh)) { fromHostIds.add(rh); @@ -338,14 +338,14 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage String otherIp = getGreEndpointIP(rHost, nw); if (otherIp == null) throw new GreTunnelException( - "Unable to retrieve the remote " - + "endpoint for the GRE tunnel." - + "Failure is on host:" + rHost.getId()); + "Unable to retrieve the remote " + + "endpoint for the GRE tunnel." + + "Failure is on host:" + rHost.getId()); Commands cmds = new Commands( - new OvsCreateTunnelCommand(otherIp, key, - Long.valueOf(hostId), i, nw.getId(), myIp)); + new OvsCreateTunnelCommand(otherIp, key, + Long.valueOf(hostId), i, nw.getId(), myIp)); s_logger.debug("Ask host " + hostId - + " to create gre tunnel to " + i); + + " to create gre tunnel to " + i); Answer[] answers = _agentMgr.send(hostId, cmds); handleCreateTunnelAnswer(answers); noHost = false; @@ -355,9 +355,9 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage HostVO rHost = _hostDao.findById(i); String otherIp = getGreEndpointIP(rHost, nw); Commands cmds = new Commands(new OvsCreateTunnelCommand(myIp, - key, i, Long.valueOf(hostId), nw.getId(), otherIp)); + key, i, Long.valueOf(hostId), nw.getId(), otherIp)); s_logger.debug("Ask host " + i + " to create gre tunnel to " - + hostId); + + hostId); Answer[] answers = _agentMgr.send(i, cmds); handleCreateTunnelAnswer(answers); noHost = false; @@ -367,13 +367,13 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage // This will ensure VIF rules will be triggered if (noHost) { Commands cmds = new Commands(new OvsSetupBridgeCommand(key, - hostId, nw.getId())); + hostId, nw.getId())); s_logger.debug("Ask host " + hostId - + " to configure bridge for network:" + nw.getId()); + + " to configure bridge for network:" + nw.getId()); Answer[] answers = _agentMgr.send(hostId, cmds); handleSetupBridgeAnswer(answers); } - } catch (Exception e) { + } catch (GreTunnelException | OperationTimedoutException | AgentUnavailableException e) { // I really thing we should do a better handling of these exceptions s_logger.warn("Ovs Tunnel network created tunnel failed", e); } @@ -385,9 +385,9 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage } @Override - public void VmCheckAndCreateTunnel(VirtualMachineProfile vm, - Network nw, DeployDestination dest) { - CheckAndCreateTunnel(vm.getVirtualMachine(), nw, dest); + public void vmCheckAndCreateTunnel(VirtualMachineProfile vm, + Network nw, DeployDestination dest) { + checkAndCreateTunnel(vm.getVirtualMachine(), nw, dest); } @DB @@ -396,9 +396,9 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage 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, networkId)); + "ovs_tunnel_account, remove record of " + + "tunnel(from=%1$s, to=%2$s account=%3$s) failed", + from, to, networkId)); return; } @@ -406,8 +406,8 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage _tunnelNetworkDao.releaseFromLockTable(lock.getId()); s_logger.debug(String.format("Destroy tunnel(account:%1$s," + - "from:%2$s, to:%3$s) successful", - networkId, from, to)); + "from:%2$s, to:%3$s) successful", + networkId, from, to)); } else { s_logger.debug(String.format("Destroy tunnel(account:%1$s," + "from:%2$s, to:%3$s) failed", networkId, from, to)); } @@ -427,10 +427,10 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage _tunnelNetworkDao.releaseFromLockTable(lock.getId()); s_logger.debug(String.format("Destroy bridge for" + - "network %1$s successful", networkId)); + "network %1$s successful", networkId)); } else { s_logger.debug(String.format("Destroy bridge for" + - "network %1$s failed", networkId)); + "network %1$s failed", networkId)); } } @@ -440,7 +440,7 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage } @Override - public void CheckAndDestroyTunnel(VirtualMachine vm, Network nw) { + public void checkAndDestroyTunnel(VirtualMachine vm, Network nw) { // if (!_isEnabled) { // return; // } @@ -453,7 +453,7 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage List<DomainRouterVO> routers = _routerDao.findByNetwork(nw.getId()); for (DomainRouterVO router : routers) { - if (router.getHostId() == vm.getHostId()) { + if (router.getHostId().equals(vm.getHostId())) { return; } } @@ -471,18 +471,18 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage /* Then ask hosts have peer tunnel with me to destroy them */ List<OvsTunnelNetworkVO> peers = - _tunnelNetworkDao.listByToNetwork(vm.getHostId(), - nw.getId()); + _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()); + p.getPortName()); s_logger.debug("Destroying tunnel to " + vm.getHostId() + - " from " + p.getFrom()); + " from " + p.getFrom()); ans = _agentMgr.send(p.getFrom(), cmd); handleDestroyTunnelAnswer(ans, p.getFrom(), - p.getTo(), p.getNetworkId()); + p.getTo(), p.getNetworkId()); } } } catch (Exception e) {