diff --git a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java index bd3db8d2905..b444786ef1a 100644 --- a/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java +++ b/api/src/com/cloud/api/commands/CreateNetworkOfferingCmd.java @@ -71,7 +71,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { @Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed") private Integer networkRate; - @Parameter(name=ApiConstants.CONSERVE_MODE, type=CommandType.BOOLEAN, required = true, description="true if the network offering is IP conserve mode enabled") + @Parameter(name=ApiConstants.CONSERVE_MODE, type=CommandType.BOOLEAN, description="true if the network offering is IP conserve mode enabled") private Boolean conserveMode; @IdentityMapper(entityTableName="disk_offering") @@ -139,6 +139,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd { } public Boolean getConserveMode() { + if (conserveMode == null) { + return true; + } return conserveMode; } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 3d13bf3bcf1..b4a444ca4b5 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -743,12 +743,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Set services = ipToServices.get(ip); Provider provider = null; for (Service service : services) { - Provider curProvider = (Provider)serviceToProviders.get(service).toArray()[0]; - //We don't support multiply providers for one service now + Set curProviders = serviceToProviders.get(service); + if (curProviders == null || curProviders.isEmpty()) { + continue; + } + Provider curProvider = (Provider)curProviders.toArray()[0]; if (provider == null) { provider = curProvider; continue; } + //We don't support multiply providers for one service now if (!provider.equals(curProvider)) { throw new CloudRuntimeException("There would be multiply providers for IP " + ip.getAddress() + " with the new network offering!"); } @@ -767,8 +771,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } //We only support one provider for one service now - Provider oldProvider = (Provider)serviceToProviders.get((Service)services.toArray()[0]).toArray()[0]; - Provider newProvider = (Provider)serviceToProviders.get(service).toArray()[0]; + Set oldProviders = serviceToProviders.get((Service)services.toArray()[0]); + Provider oldProvider = (Provider)oldProviders.toArray()[0]; + //Since IP already has service to bind with, the oldProvider can't be null + Set newProviders = serviceToProviders.get(service); + if (newProviders == null || newProviders.isEmpty()) { + throw new CloudRuntimeException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); + } + Provider newProvider = (Provider)newProviders.toArray()[0]; if (!oldProvider.equals(newProvider)) { throw new CloudRuntimeException("There would be multiply providers for IP " + publicIp.getAddress() + "!"); } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index a0875b7f5a6..61f191132c6 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -259,7 +259,7 @@ CREATE TABLE `cloud`.`network_offerings` ( `system_only` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering for system use only', `specify_vlan` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Should the user specify vlan', `service_offering_id` bigint unsigned COMMENT 'service offering id that virtual router is tied to', - `conserve_mode` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering is IP conserve mode enabled', + `conserve_mode` int(1) unsigned NOT NULL DEFAULT 1 COMMENT 'Is this network offering is IP conserve mode enabled', `created` datetime NOT NULL COMMENT 'time the entry was created', `removed` datetime DEFAULT NULL COMMENT 'time the entry was removed', `default` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if network offering is default',