bug 7704: network_rate is a part of network offering now. It's optional parameter; if not specified - global config param is used.

status 7704: resolved fixed
This commit is contained in:
alena 2011-01-21 09:37:24 -08:00
parent 80e81647a9
commit 671cce23ad
17 changed files with 104 additions and 24 deletions

View File

@ -13,9 +13,10 @@ public class IpAddressTO {
private String vlanNetmask;
private String vifMacAddress;
private String guestIp;
private Integer networkRate;
public IpAddressTO(String ipAddress, boolean add, boolean firstIP, boolean sourceNat, String vlanId, String vlanGateway, String vlanNetmask, String vifMacAddress, String guestIp) {
public IpAddressTO(String ipAddress, boolean add, boolean firstIP, boolean sourceNat, String vlanId, String vlanGateway, String vlanNetmask, String vifMacAddress, String guestIp, Integer networkRate) {
this.publicIp = ipAddress;
this.add = add;
this.firstIP = firstIP;
@ -25,6 +26,7 @@ public class IpAddressTO {
this.vlanNetmask = vlanNetmask;
this.vifMacAddress = vifMacAddress;
this.guestIp = guestIp;
this.networkRate = networkRate;
}
protected IpAddressTO() {
@ -73,5 +75,9 @@ public class IpAddressTO {
public String getVifMacAddress() {
return vifMacAddress;
}
public Integer getNetworkRate() {
return networkRate;
}
}

View File

@ -5,7 +5,7 @@ package com.cloud.agent.api.to;
public class NicTO extends NetworkTO {
int deviceId;
Integer networkRateMbps;
int networkRateMbps;
Integer networkRateMulticastMbps;
boolean defaultNic;

View File

@ -179,5 +179,6 @@ public class ApiConstants {
public static final String IS_DEFAULT = "isdefault";
public static final String IS_SYSTEM = "issystem";
public static final String AVAILABILITY = "availability";
public static final String NETWORKRATE = "networkrate";
}

View File

@ -58,6 +58,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
@Parameter(name=ApiConstants.AVAILABILITY, type=CommandType.STRING, description="the availability of network offering. Default value is Required")
private String availability;
@Parameter(name=ApiConstants.NETWORKRATE, type=CommandType.INTEGER, description="data transfer rate in megabits per second allowed.")
private Integer networkRate;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@ -91,6 +94,10 @@ public class CreateNetworkOfferingCmd extends BaseCmd {
//Verify availability
return availability == null ? Availability.Required.toString() : availability;
}
public Integer getNetworkRate() {
return networkRate;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////

View File

@ -2,6 +2,7 @@ package com.cloud.api.response;
import java.util.Date;
import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
@ -35,6 +36,9 @@ public class NetworkOfferingResponse extends BaseResponse{
@SerializedName("availability") @Param(description="availability of the network offering")
private String availability;
@SerializedName(ApiConstants.NETWORKRATE) @Param(description="data transfer rate in megabits per second allowed.")
private Integer networkRate;
public Long getId() {
return id;
@ -123,4 +127,12 @@ public class NetworkOfferingResponse extends BaseResponse{
public void setAvailability(String availability) {
this.availability = availability;
}
public Integer getNetworkRate() {
return networkRate;
}
public void setNetworkRate(Integer networkRate) {
this.networkRate = networkRate;
}
}

View File

@ -184,5 +184,9 @@ public interface ConfigurationService {
List<? extends NetworkOffering> searchForNetworkOfferings(ListNetworkOfferingsCmd cmd);
boolean deleteNetworkOffering(DeleteNetworkOfferingCmd cmd);
NetworkOffering getNetworkOffering(long id);
Integer getNetworkRate(long networkOfferingId);
}

View File

@ -34,6 +34,7 @@ public class NicProfile {
Integer deviceId;
String dns1;
String dns2;
int networkRate;
public String getDns1() {
return dns1;
@ -182,8 +183,12 @@ public class NicProfile {
public void setIp4Address(String ip4Address) {
this.ip4Address = ip4Address;
}
public int getNetworkRate() {
return networkRate;
}
public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri) {
public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate) {
this.id = nic.getId();
this.networkId = network.getId();
this.gateway = nic.getGateway();
@ -203,6 +208,9 @@ public class NicProfile {
this.netmask = nic.getNetmask();
this.dns1 = network.getDns1();
this.dns2 = network.getDns2();
if (networkRate != null) {
this.networkRate = networkRate;
}
}
public NicProfile(long id, BroadcastDomainType type, Mode mode, long vmId) {

View File

@ -1251,7 +1251,7 @@ public abstract class CitrixResourceBase implements ServerResource {
}
protected void assignPublicIpAddress(Connection conn, final String vmName, final String privateIpAddress, final String publicIpAddress, final boolean add, final boolean firstIP,
final boolean sourceNat, final String vlanId, final String vlanGateway, final String vlanNetmask, final String vifMacAddress, String guestIp) throws InternalErrorException {
final boolean sourceNat, final String vlanId, final String vlanGateway, final String vlanNetmask, final String vifMacAddress, String guestIp, Integer networkRate) throws InternalErrorException {
try {
VM router = getVM(conn, vmName);
@ -1290,7 +1290,7 @@ public abstract class CitrixResourceBase implements ServerResource {
nic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(vlanId));
}
nic.setDeviceId(Integer.parseInt(vifDeviceNum));
nic.setNetworkRateMbps(200);
nic.setNetworkRateMbps(networkRate);
correctVif = createVif(conn, vmName, router, nic);
correctVif.plug(conn);
@ -1383,7 +1383,7 @@ public abstract class CitrixResourceBase implements ServerResource {
for (IpAddressTO ip : ips) {
assignPublicIpAddress(conn, routerName, routerIp, ip.getPublicIp(), ip.isAdd(), ip.isFirstIP(), ip.isSourceNat(), ip.getVlanId(),
ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp());
ip.getVlanGateway(), ip.getVlanNetmask(), ip.getVifMacAddress(), ip.getGuestIp(), ip.getNetworkRate());
results[i++] = ip.getPublicIp() + " - success";
}
} catch (InternalErrorException e) {

View File

@ -7,6 +7,7 @@ import java.util.Map;
import com.cloud.agent.AgentManager;
import com.cloud.async.AsyncJobManager;
import com.cloud.async.AsyncJobVO;
import com.cloud.configuration.ConfigurationService;
import com.cloud.configuration.ResourceCount.ResourceType;
import com.cloud.dc.AccountVlanMapVO;
import com.cloud.dc.ClusterVO;
@ -137,6 +138,7 @@ public class ApiDBUtils {
private static DataCenterDao _zoneDao;
private static NetworkOfferingDao _networkOfferingDao;
private static NetworkDao _networkDao;
private static ConfigurationService _configMgr;
static {
_ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name);
@ -150,6 +152,7 @@ public class ApiDBUtils {
_storageMgr = locator.getManager(StorageManager.class);
_userVmMgr = locator.getManager(UserVmManager.class);
_networkMgr = locator.getManager(NetworkManager.class);
_configMgr = locator.getManager(ConfigurationService.class);
_accountDao = locator.getDao(AccountDao.class);
_accountVlanMapDao = locator.getDao(AccountVlanMapDao.class);
@ -521,4 +524,8 @@ public class ApiDBUtils {
}
}
public static Integer getNetworkRate(long networkOfferingId) {
return _configMgr.getNetworkRate(networkOfferingId);
}
}

View File

@ -2198,6 +2198,7 @@ public class ApiResponseHelper implements ResponseGenerator {
response.setIsDefault(offering.isDefault());
response.setSpecifyVlan(offering.getSpecifyVlan());
response.setAvailability(offering.getAvailability().toString());
response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId()));
response.setObjectName("networkoffering");
return response;
}

View File

@ -56,7 +56,7 @@ public enum Config {
GuestIpNetwork("Network", AgentManager.class, String.class, "guest.ip.network", "10.1.1.1", "The network address of the guest virtual network. Virtual machines will be assigned an IP in this subnet.", "privateip"),
GuestNetmask("Network", AgentManager.class, String.class, "guest.netmask", "255.255.255.0", "The netmask of the guest virtual network.", "netmask"),
GuestVlanBits("Network", ManagementServer.class, Integer.class, "guest.vlan.bits", "12", "The number of bits to reserve for the VLAN identifier in the guest subnet.", null),
MulticastThrottlingRate("Network", ManagementServer.class, Integer.class, "multicast.throttling.rate", "10", "Default multicast rate in megabits per second allowed.", null),
//MulticastThrottlingRate("Network", ManagementServer.class, Integer.class, "multicast.throttling.rate", "10", "Default multicast rate in megabits per second allowed.", null),
NetworkThrottlingRate("Network", ManagementServer.class, Integer.class, "network.throttling.rate", "200", "Default data transfer rate in megabits per second allowed.", null),
GuestDomainSuffix("Network", AgentManager.class, String.class, "guest.domain.suffix", "cloud.internal", "Default domain name for vms inside virtualized networks fronted by router", null),
OvsNetwork("Network", ManagementServer.class, Boolean.class, "open.vswitch.network", "false", "enable/disable open vswitch network", null),

View File

@ -43,7 +43,7 @@ import com.cloud.utils.component.Manager;
* ConfigurationManager handles adding pods/zones, changing IP ranges, enabling external firewalls, and editing configuration values
*
*/
public interface ConfigurationManager extends Manager {
public interface ConfigurationManager extends ConfigurationService, Manager {
/**
* Updates a configuration entry with a new value

View File

@ -2761,4 +2761,25 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
public DataCenterVO getZone(long id){
return _zoneDao.findById(id);
}
@Override
public NetworkOffering getNetworkOffering(long id) {
return _networkOfferingDao.findById(id);
}
@Override
public Integer getNetworkRate(long networkOfferingId) {
NetworkOffering no = getNetworkOffering(networkOfferingId);
Integer networkRate = null;
if (no == null) {
throw new InvalidParameterValueException("Unable to find network offering by id=" + networkOfferingId);
}
if (no.getRateMbps() != null) {
networkRate = no.getRateMbps();
} else {
networkRate = Integer.parseInt(_configDao.getValue(Config.NetworkThrottlingRate.key()));
}
return networkRate;
}
}

View File

@ -47,7 +47,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis
to.setDefaultNic(profile.isDefaultNic());
to.setBroadcastUri(profile.getBroadCastUri());
to.setIsolationuri(profile.getIsolationUri());
to.setNetworkRateMbps(profile.getNetworkRate());
return to;
}

View File

@ -655,8 +655,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
_name = name;
_configs = _configDao.getConfiguration("AgentManager", params);
Integer rateMbps = getIntegerConfigValue(Config.NetworkThrottlingRate.key(), null);
Integer multicastRateMbps = getIntegerConfigValue(Config.MulticastThrottlingRate.key(), null);
_networkGcWait = NumbersUtil.parseInt(_configs.get(Config.NetworkGcWait.key()), 600);
_networkGcInterval = NumbersUtil.parseInt(_configs.get(Config.NetworkGcInterval.key()), 600);
@ -679,9 +677,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
guestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(guestNetworkOffering);
_systemNetworks.put(NetworkOfferingVO.SysteGuestNetwork, guestNetworkOffering);
NetworkOfferingVO defaultGuestNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, false, false, rateMbps, multicastRateMbps, null, true, Availability.Required, false, false, false, false, false, false, false);
NetworkOfferingVO defaultGuestNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, false, false, null, null, null, true, Availability.Required, false, false, false, false, false, false, false);
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestNetworkOffering);
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Public, false, false, rateMbps, multicastRateMbps, null, true, Availability.Required, false, false, false, false, false, false, false);
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Public, false, false, null, null, null, true, Availability.Required, false, false, false, false, false, false, false);
defaultGuestDirectNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestDirectNetworkOffering);
AccountsUsingNetworkSearch = _accountDao.createSearchBuilder();
@ -891,7 +889,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
deviceIds[devId] = true;
nics.add(vo);
vm.addNic(new NicProfile(vo, network.first(), vo.getBroadcastUri(), vo.getIsolationUri()));
NetworkOffering no = _configMgr.getNetworkOffering(config.getNetworkOfferingId());
Integer networkRate = _configMgr.getNetworkRate(no.getId());
vm.addNic(new NicProfile(vo, network.first(), vo.getBroadcastUri(), vo.getIsolationUri(), networkRate));
}
if (nics.size() == 1) {
@ -963,6 +964,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
to.setDns1(profile.getDns1());
to.setDns2(profile.getDns2());
}
Integer networkRate = _configMgr.getNetworkRate(config.getNetworkOfferingId());
to.setNetworkRateMbps(networkRate);
return to;
}
@ -1043,6 +1047,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
Pair<NetworkGuru, NetworkVO> implemented = implementNetwork(nic.getNetworkId(), dest, context);
NetworkGuru concierge = implemented.first();
NetworkVO network = implemented.second();
NetworkOffering no = _configMgr.getNetworkOffering(network.getNetworkOfferingId());
Integer networkRate = _configMgr.getNetworkRate(no.getId());
NicProfile profile = null;
if (nic.getReservationStrategy() == ReservationStrategy.Start) {
nic.setState(Resource.State.Reserving);
@ -1055,7 +1061,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
URI isolationUri = nic.getIsolationUri();
profile = new NicProfile(nic, network, broadcastUri, isolationUri);
profile = new NicProfile(nic, network, broadcastUri, isolationUri, networkRate);
concierge.reserve(profile, network, vmProfile, dest, context);
nic.setIp4Address(profile.getIp4Address());
nic.setIp6Address(profile.getIp6Address());
@ -1069,7 +1075,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
nic.setAddressFormat(profile.getFormat());
updateNic(nic, network.getId(), 1);
} else {
profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri());
profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate);
nic.setState(Nic.State.Reserved);
updateNic(nic, network.getId(), 1);
}
@ -1090,8 +1096,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
List<NicVO> nics = _nicDao.listBy(vm.getId());
for (NicVO nic : nics) {
Network network = _networksDao.findById(nic.getNetworkId());
NetworkOffering no = _configMgr.getNetworkOffering(network.getNetworkOfferingId());
Integer networkRate = _configMgr.getNetworkRate(no.getId());
NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri());
NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate);
vm.addNic(profile);
}
@ -1109,7 +1117,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
NetworkGuru concierge = _networkGurus.get(network.getGuruName());
nic.setState(Resource.State.Releasing);
_nicDao.update(nic.getId(), nic);
NicProfile profile = new NicProfile(nic, network, null, null);
NicProfile profile = new NicProfile(nic, network, null, null, null);
if (concierge.release(profile, vmProfile, nic.getReservationId())) {
nic.setState(Resource.State.Allocated);
if (originalState == Nic.State.Reserved) {
@ -1284,7 +1292,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
nic.setState(Nic.State.Deallocating);
_nicDao.update(nic.getId(), nic);
NetworkVO network = _networksDao.findById(nic.getNetworkId());
NicProfile profile = new NicProfile(nic, network, null, null);
NicProfile profile = new NicProfile(nic, network, null, null, null);
NetworkGuru guru = _networkGurus.get(network.getGuruName());
guru.deallocate(network, profile, vm);
_nicDao.remove(nic.getId());

View File

@ -124,6 +124,7 @@ import com.cloud.network.rules.PortForwardingRule;
import com.cloud.network.rules.PortForwardingRuleVO;
import com.cloud.network.rules.RulesManager;
import com.cloud.network.rules.dao.PortForwardingRulesDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.service.ServiceOfferingVO;
@ -1497,7 +1498,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
if(vmId!=0){
vmGuestAddress = _vmDao.findById(vmId).getGuestIpAddress();
}
IpAddressTO ip = new IpAddressTO(ipAddr.getAddress().addr(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress);
//Get network rate - required for IpAssoc
Network network = _networkMgr.getNetwork(ipAddr.getNetworkId());
NetworkOffering no = _configMgr.getNetworkOffering(network.getNetworkOfferingId());
Integer networkRate = _configMgr.getNetworkRate(no.getId());
IpAddressTO ip = new IpAddressTO(ipAddr.getAddress().addr(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, vmGuestAddress, networkRate);
ipsToSend[i++] = ip;
firstIP = false;
}

View File

@ -694,8 +694,6 @@ public class ConfigurationServerImpl implements ConfigurationServer {
}
private void createDefaultNetworkOfferings() {
Integer rateMbps = getIntegerConfigValue(Config.NetworkThrottlingRate.key(), null);
Integer multicastRateMbps = getIntegerConfigValue(Config.MulticastThrottlingRate.key(), null);
NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public);
publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering);
@ -708,9 +706,9 @@ public class ConfigurationServerImpl implements ConfigurationServer {
NetworkOfferingVO guestNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SysteGuestNetwork, TrafficType.Guest);
guestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(guestNetworkOffering);
NetworkOfferingVO defaultGuestNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, false, false, rateMbps, multicastRateMbps, null, true, Availability.Required, false, false, false, false, false, false, false);
NetworkOfferingVO defaultGuestNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultVirtualizedNetworkOffering, "Virtual Vlan", TrafficType.Guest, false, false, null, null, null, true, Availability.Required, false, false, false, false, false, false, false);
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestNetworkOffering);
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Public, false, false, rateMbps, multicastRateMbps, null, true, Availability.Required, false, false, false, false, false, false, false);
NetworkOfferingVO defaultGuestDirectNetworkOffering = new NetworkOfferingVO(NetworkOffering.DefaultDirectNetworkOffering, "Direct", TrafficType.Public, false, false, null, null, null, true, Availability.Required, false, false, false, false, false, false, false);
defaultGuestNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultGuestDirectNetworkOffering);
}