NaaS: Add back service offering ID for network offering

It would be used to adjust service offering of virtual router
This commit is contained in:
Sheng Yang 2011-11-02 18:42:19 -07:00
parent 3e20c60d6d
commit b646f07f9c
8 changed files with 61 additions and 12 deletions

View File

@ -70,6 +70,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
@Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed.") @Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed.")
private Integer networkRate; private Integer networkRate;
@Parameter(name=ApiConstants.SERVICE_OFFERING_ID, type=CommandType.LONG, description="the service offering ID used by virtual router provider")
private Long serviceOfferingId;
@Parameter(name=ApiConstants.DHCP_SERVICE, type=CommandType.BOOLEAN, description="true if network offering supports dhcp service") @Parameter(name=ApiConstants.DHCP_SERVICE, type=CommandType.BOOLEAN, description="true if network offering supports dhcp service")
private Boolean dhcpService; private Boolean dhcpService;
@ -153,6 +156,10 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
return maxConnections; return maxConnections;
} }
public Long getServiceOfferingId() {
return serviceOfferingId;
}
public Boolean getDhcpService() { public Boolean getDhcpService() {
return dhcpService == null ? false : dhcpService; return dhcpService == null ? false : dhcpService;
} }

View File

@ -93,4 +93,6 @@ public interface NetworkOffering {
State getState(); State getState();
GuestType getGuestType(); GuestType getGuestType();
Long getServiceOfferingId();
} }

View File

@ -182,10 +182,11 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
* @param systemOnly TODO * @param systemOnly TODO
* @param id * @param id
* @param specifyVlan; * @param specifyVlan;
* @param serviceOfferingId
* @return network offering object * @return network offering object
*/ */
NetworkOfferingVO createNetworkOffering(long userId, String name, String displayText, TrafficType trafficType, String tags, Integer maxConnections, boolean specifyVlan, Availability availability, Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly); NetworkOfferingVO createNetworkOffering(long userId, String name, String displayText, TrafficType trafficType, String tags, Integer maxConnections, boolean specifyVlan, Availability availability, Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly, Long serviceOfferingId);
Vlan createVlanAndPublicIpRange(Long userId, Long zoneId, Long podId, String startIP, String endIP, String vlanGateway, String vlanNetmask, boolean forVirtualNetwork, String vlanId, Account account, Long networkId, Long physicalNetworkId) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException; Vlan createVlanAndPublicIpRange(Long userId, Long zoneId, Long podId, String startIP, String endIP, String vlanGateway, String vlanNetmask, boolean forVirtualNetwork, String vlanId, Account account, Long networkId, Long physicalNetworkId) throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException;

View File

@ -2845,6 +2845,18 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
Integer maxConnections = cmd.getMaxconnections(); Integer maxConnections = cmd.getMaxconnections();
Long serviceOfferingId = cmd.getServiceOfferingId();
if (serviceOfferingId != null) {
ServiceOfferingVO offering = _serviceOfferingDao.findById(serviceOfferingId);
if (offering == null) {
throw new InvalidParameterValueException("Cannot find specified service offering: " + serviceOfferingId);
}
if (!VirtualMachine.Type.DomainRouter.toString().equalsIgnoreCase(offering.getSystemVmType())) {
throw new InvalidParameterValueException("The specified service offering " + serviceOfferingId + " cannot be used by virtual router!");
}
}
// configure service provider map // configure service provider map
Map<Network.Service, Set<Network.Provider>> serviceProviderMap = new HashMap<Network.Service, Set<Network.Provider>>(); Map<Network.Service, Set<Network.Provider>> serviceProviderMap = new HashMap<Network.Service, Set<Network.Provider>>();
Set<Network.Provider> defaultProviders = new HashSet<Network.Provider>(); Set<Network.Provider> defaultProviders = new HashSet<Network.Provider>();
@ -2927,19 +2939,23 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
} }
} }
return createNetworkOffering(userId, name, displayText, trafficType, tags, maxConnections, specifyVlan, availability, networkRate, serviceProviderMap, false, guestType, false); return createNetworkOffering(userId, name, displayText, trafficType, tags, maxConnections, specifyVlan, availability, networkRate, serviceProviderMap, false, guestType, false, serviceOfferingId);
} }
@Override @Override
@DB @DB
public NetworkOfferingVO createNetworkOffering(long userId, String name, String displayText, TrafficType trafficType, String tags, Integer maxConnections, boolean specifyVlan, public NetworkOfferingVO createNetworkOffering(long userId, String name, String displayText, TrafficType trafficType, String tags, Integer maxConnections, boolean specifyVlan,
Availability availability, Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly) { Availability availability, Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly, Long serviceOfferingId) {
String multicastRateStr = _configDao.getValue("multicast.throttling.rate"); String multicastRateStr = _configDao.getValue("multicast.throttling.rate");
int multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr)); int multicastRate = ((multicastRateStr == null) ? 10 : Integer.parseInt(multicastRateStr));
tags = cleanupTags(tags); tags = cleanupTags(tags);
NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, maxConnections, isDefault, availability, tags, type); NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, maxConnections, isDefault, availability, tags, type);
if (serviceOfferingId != null) {
offering.setServiceOfferingId(serviceOfferingId);
}
Transaction txn = Transaction.currentTxn(); Transaction txn = Transaction.currentTxn();
txn.start(); txn.start();

View File

@ -890,18 +890,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
NetworkOfferingVO defaultGuestOffering = _networkOfferingDao.findByUniqueName(NetworkOffering.SystemGuestNetwork); NetworkOfferingVO defaultGuestOffering = _networkOfferingDao.findByUniqueName(NetworkOffering.SystemGuestNetwork);
if (defaultGuestOffering == null) { if (defaultGuestOffering == null) {
defaultGuestOffering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM, NetworkOffering.SystemGuestNetwork, "System Offering for System-Guest-Network", TrafficType.Guest, null, null, false, Availability.Optional, null, defaultDirectNetworkOfferingProviders, true, Network.GuestType.Shared, false); defaultGuestOffering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM, NetworkOffering.SystemGuestNetwork, "System Offering for System-Guest-Network", TrafficType.Guest, null, null, false, Availability.Optional, null, defaultDirectNetworkOfferingProviders, true, Network.GuestType.Shared, false, null);
_networkOfferingDao.update(defaultGuestOffering.getId(), defaultGuestOffering); _networkOfferingDao.update(defaultGuestOffering.getId(), defaultGuestOffering);
} }
NetworkOfferingVO offering = null; NetworkOfferingVO offering = null;
if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultVirtualizedNetworkOffering) == null) { if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultVirtualizedNetworkOffering) == null) {
offering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM,NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, null, null, false, Availability.Required, null, defaultVirtualNetworkOfferingProviders, true, Network.GuestType.Isolated, false); offering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM,NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, null, null, false, Availability.Required, null, defaultVirtualNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null);
_networkOfferingDao.update(offering.getId(), offering); _networkOfferingDao.update(offering.getId(), offering);
} }
if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultDirectNetworkOffering) == null) { if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultDirectNetworkOffering) == null) {
offering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM, NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Guest, null, null, true, Availability.Optional, null, defaultDirectNetworkOfferingProviders, true, Network.GuestType.Shared, false); offering = _configMgr.createNetworkOffering(Account.ACCOUNT_ID_SYSTEM, NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Guest, null, null, true, Availability.Optional, null, defaultDirectNetworkOfferingProviders, true, Network.GuestType.Shared, false, null);
_networkOfferingDao.update(offering.getId(), offering); _networkOfferingDao.update(offering.getId(), offering);
} }

View File

@ -1099,15 +1099,20 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
//Router is the network element, we don't know the hypervisor type yet. //Router is the network element, we don't know the hypervisor type yet.
//Try to allocate the domR twice using diff hypervisors, and when failed both times, throw the exception up //Try to allocate the domR twice using diff hypervisors, and when failed both times, throw the exception up
List<HypervisorType> supportedHypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId()); List<HypervisorType> supportedHypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId());
Long offering_id = _networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
if (offering_id == null) {
offering_id = _offering.getId();
}
ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(offering_id);
int retry = 0; int retry = 0;
for (HypervisorType hType : supportedHypervisors) { for (HypervisorType hType : supportedHypervisors) {
try { try {
s_logger.debug("Allocating the domR with the hypervisor type " + hType); s_logger.debug("Allocating the domR with the hypervisor type " + hType);
VMTemplateVO template = _templateDao.findRoutingTemplate(hType); VMTemplateVO template = _templateDao.findRoutingTemplate(hType);
router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), router = new DomainRouterVO(id, routerOffering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), isRedundant, 0, false, RedundantState.UNKNOWN, routerOffering.getOfferHA(), false);
router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner); router = _itMgr.allocate(router, template, routerOffering, networks, plan, null, owner);
break; break;
} catch (InsufficientCapacityException ex) { } catch (InsufficientCapacityException ex) {
if (retry < 2) { if (retry < 2) {
@ -1303,6 +1308,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
//Router is the network element, we don't know the hypervisor type yet. //Router is the network element, we don't know the hypervisor type yet.
//Try to allocate the domR twice using diff hypervisors, and when failed both times, throw the exception up //Try to allocate the domR twice using diff hypervisors, and when failed both times, throw the exception up
List<HypervisorType> supportedHypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId()); List<HypervisorType> supportedHypervisors = _resourceMgr.getSupportedHypervisorTypes(dest.getDataCenter().getId());
Long offering_id = _networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
if (offering_id == null) {
offering_id = _offering.getId();
}
ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(offering_id);
int retry = 0; int retry = 0;
for (HypervisorType hType : supportedHypervisors) { for (HypervisorType hType : supportedHypervisors) {
try { try {
@ -1310,10 +1320,10 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
/* Before starting router, already know the hypervisor type */ /* Before starting router, already know the hypervisor type */
VMTemplateVO template = _templateDao.findRoutingTemplate(hType); VMTemplateVO template = _templateDao.findRoutingTemplate(hType);
router = new DomainRouterVO(id, _offering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(), router = new DomainRouterVO(id, routerOffering.getId(), 0, VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, _offering.getOfferHA(), false); template.getGuestOSId(), owner.getDomainId(), owner.getId(), guestNetwork.getId(), false, 0, false, RedundantState.UNKNOWN, routerOffering.getOfferHA(), false);
router.setRole(Role.DHCP_USERDATA); router.setRole(Role.DHCP_USERDATA);
router = _itMgr.allocate(router, template, _offering, networks, plan, null, owner); router = _itMgr.allocate(router, template, routerOffering, networks, plan, null, owner);
break; break;
} catch (InsufficientCapacityException ex) { } catch (InsufficientCapacityException ex) {
if (retry < 2) { if (retry < 2) {

View File

@ -70,6 +70,9 @@ public class NetworkOfferingVO implements NetworkOffering {
@Column(name="system_only") @Column(name="system_only")
boolean systemOnly; boolean systemOnly;
@Column(name="service_offering_id")
Long serviceOfferingId;
@Column(name="tags", length=4096) @Column(name="tags", length=4096)
String tags; String tags;
@ -201,6 +204,15 @@ public class NetworkOfferingVO implements NetworkOffering {
return guestType; return guestType;
} }
public void setServiceOfferingId(Long serviceOfferingId) {
this.serviceOfferingId = serviceOfferingId;
}
@Override
public Long getServiceOfferingId() {
return serviceOfferingId;
}
public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, Integer concurrentConnections, boolean isDefault, Availability availability, String tags, Network.GuestType guestType) { public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, Integer concurrentConnections, boolean isDefault, Availability availability, String tags, Network.GuestType guestType) {
this.name = name; this.name = name;
this.displayText = displayText; this.displayText = displayText;

View File

@ -249,6 +249,7 @@ CREATE TABLE `cloud`.`network_offerings` (
`tags` varchar(4096) COMMENT 'tags supported by this offering', `tags` varchar(4096) COMMENT 'tags supported by this offering',
`system_only` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering for system use only', `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', `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',
`created` datetime NOT NULL COMMENT 'time the entry was created', `created` datetime NOT NULL COMMENT 'time the entry was created',
`removed` datetime DEFAULT NULL COMMENT 'time the entry was removed', `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', `default` int(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 if network offering is default',