mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
missing mac fields
This commit is contained in:
parent
790bf40be6
commit
7cfbd5b7e0
@ -156,6 +156,7 @@ public enum Config {
|
|||||||
DirectAttachNetworkExternalAPIURL("Advanced", ManagementServer.class, String.class, "direct.attach.network.externalIpAllocator.url", null, "Direct-attach VMs using external DHCP server (API url)", null),
|
DirectAttachNetworkExternalAPIURL("Advanced", ManagementServer.class, String.class, "direct.attach.network.externalIpAllocator.url", null, "Direct-attach VMs using external DHCP server (API url)", null),
|
||||||
CheckPodCIDRs("Advanced", ManagementServer.class, String.class, "check.pod.cidrs", "true", "If true, different pods must belong to different CIDR subnets.", "true,false"),
|
CheckPodCIDRs("Advanced", ManagementServer.class, String.class, "check.pod.cidrs", "true", "If true, different pods must belong to different CIDR subnets.", "true,false"),
|
||||||
MD5Hashed("Advanced", ManagementServer.class, Boolean.class, "security.password.md5hashed", "true", "If set to false password is sent in clear text or else md5hashed", null),
|
MD5Hashed("Advanced", ManagementServer.class, Boolean.class, "security.password.md5hashed", "true", "If set to false password is sent in clear text or else md5hashed", null),
|
||||||
|
NetworkGcWait("Advanced", ManagementServer.class, Integer.class, "network.gc.wait", "600", "Seconds to wait before shutting down a network that's not in used", null),
|
||||||
|
|
||||||
ControlCidr("Advanced", ManagementServer.class, String.class, "control.cidr", "169.254.0.0/16", "Changes the cidr for the control network traffic. Defaults to using link local. Must be unique within pods", null),
|
ControlCidr("Advanced", ManagementServer.class, String.class, "control.cidr", "169.254.0.0/16", "Changes the cidr for the control network traffic. Defaults to using link local. Must be unique within pods", null),
|
||||||
ControlGateway("Advanced", ManagementServer.class, String.class, "control.gateway", "169.254.0.1", "gateway for the control network traffic", null),
|
ControlGateway("Advanced", ManagementServer.class, String.class, "control.gateway", "169.254.0.1", "gateway for the control network traffic", null),
|
||||||
@ -270,18 +271,19 @@ public enum Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getComponent() {
|
public String getComponent() {
|
||||||
if (_componentClass == ManagementServer.class)
|
if (_componentClass == ManagementServer.class) {
|
||||||
return "management-server";
|
return "management-server";
|
||||||
else if (_componentClass == AgentManager.class)
|
} else if (_componentClass == AgentManager.class) {
|
||||||
return "AgentManager";
|
return "AgentManager";
|
||||||
else if (_componentClass == UserVmManager.class)
|
} else if (_componentClass == UserVmManager.class) {
|
||||||
return "UserVmManager";
|
return "UserVmManager";
|
||||||
else if (_componentClass == HighAvailabilityManager.class)
|
} else if (_componentClass == HighAvailabilityManager.class) {
|
||||||
return "HighAvailabilityManager";
|
return "HighAvailabilityManager";
|
||||||
else if (_componentClass == StoragePoolAllocator.class)
|
} else if (_componentClass == StoragePoolAllocator.class) {
|
||||||
return "StorageAllocator";
|
return "StorageAllocator";
|
||||||
else
|
} else {
|
||||||
return "none";
|
return "none";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRange() {
|
public String getRange() {
|
||||||
@ -302,8 +304,9 @@ public enum Config {
|
|||||||
for (String category : categories) {
|
for (String category : categories) {
|
||||||
List<Config> currentList = getConfigs(category);
|
List<Config> currentList = getConfigs(category);
|
||||||
for (Config c : currentList) {
|
for (Config c : currentList) {
|
||||||
if (c.key().equals(name))
|
if (c.key().equals(name)) {
|
||||||
return c;
|
return c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -56,6 +56,9 @@ public class DataCenterIpAddressVO {
|
|||||||
@Column(name="instance_id")
|
@Column(name="instance_id")
|
||||||
private Long instanceId;
|
private Long instanceId;
|
||||||
|
|
||||||
|
@Column(name="mac_address")
|
||||||
|
long macAddress;
|
||||||
|
|
||||||
protected DataCenterIpAddressVO() {
|
protected DataCenterIpAddressVO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,4 +107,8 @@ public class DataCenterIpAddressVO {
|
|||||||
public Date getTakenAt() {
|
public Date getTakenAt() {
|
||||||
return takenAt;
|
return takenAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getMacAddress() {
|
||||||
|
return macAddress;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,6 @@ import java.util.Date;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
import javax.ejb.Local;
|
import javax.ejb.Local;
|
||||||
@ -116,6 +115,7 @@ import com.cloud.user.UserStatisticsVO;
|
|||||||
import com.cloud.user.dao.AccountDao;
|
import com.cloud.user.dao.AccountDao;
|
||||||
import com.cloud.user.dao.UserStatisticsDao;
|
import com.cloud.user.dao.UserStatisticsDao;
|
||||||
import com.cloud.uservm.UserVm;
|
import com.cloud.uservm.UserVm;
|
||||||
|
import com.cloud.utils.NumbersUtil;
|
||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import com.cloud.utils.component.Adapters;
|
import com.cloud.utils.component.Adapters;
|
||||||
import com.cloud.utils.component.Inject;
|
import com.cloud.utils.component.Inject;
|
||||||
@ -184,13 +184,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
Adapters<NetworkElement> _networkElements;
|
Adapters<NetworkElement> _networkElements;
|
||||||
|
|
||||||
private HashMap<String, NetworkOfferingVO> _systemNetworks = new HashMap<String, NetworkOfferingVO>(5);
|
private HashMap<String, NetworkOfferingVO> _systemNetworks = new HashMap<String, NetworkOfferingVO>(5);
|
||||||
Random _rand = new Random(System.currentTimeMillis());
|
|
||||||
|
|
||||||
ScheduledExecutorService _executor;
|
ScheduledExecutorService _executor;
|
||||||
|
|
||||||
SearchBuilder<AccountVO> AccountsUsingNetworkSearch;
|
SearchBuilder<AccountVO> AccountsUsingNetworkSearch;
|
||||||
SearchBuilder<IPAddressVO> AssignIpAddressSearch;
|
SearchBuilder<IPAddressVO> AssignIpAddressSearch;
|
||||||
SearchBuilder<IPAddressVO> IpAddressSearch;
|
SearchBuilder<IPAddressVO> IpAddressSearch;
|
||||||
|
int _networkGcWait;
|
||||||
|
|
||||||
private Map<String, String> _configs;
|
private Map<String, String> _configs;
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(sourceNat != null) : "How do we get a bunch of ip addresses but none of them are source nat? account=" + ownerId + "; dc=" + dcId;
|
assert(sourceNat != null) : "How do we get a bunch of ip addresses but none of them are source nat? account=" + ownerId + "; dc=" + dcId;
|
||||||
ip = new PublicIp(sourceNat, _vlanDao.findById(sourceNat.getVlanId()), sourceNat.getMacAddress() | 0x060000000000l | (((long)_rand.nextInt(32768) << 25) & 0x00fffe000000l));
|
ip = new PublicIp(sourceNat, _vlanDao.findById(sourceNat.getVlanId()), NetUtils.createSequenceBasedMacAddress(sourceNat.getMacAddress()));
|
||||||
}
|
}
|
||||||
|
|
||||||
UserStatisticsVO stats = _userStatsDao.findBy(ownerId, dcId);
|
UserStatisticsVO stats = _userStatsDao.findBy(ownerId, dcId);
|
||||||
@ -747,6 +747,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
validateRemoteAccessVpnConfiguration();
|
validateRemoteAccessVpnConfiguration();
|
||||||
Integer rateMbps = getIntegerConfigValue(Config.NetworkThrottlingRate.key(), null);
|
Integer rateMbps = getIntegerConfigValue(Config.NetworkThrottlingRate.key(), null);
|
||||||
Integer multicastRateMbps = getIntegerConfigValue(Config.MulticastThrottlingRate.key(), null);
|
Integer multicastRateMbps = getIntegerConfigValue(Config.MulticastThrottlingRate.key(), null);
|
||||||
|
_networkGcWait = NumbersUtil.parseInt(_configs.get(Config.NetworkGcWait.key()), 600);
|
||||||
|
|
||||||
NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemVmPublicNetwork, TrafficType.Public, null);
|
NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemVmPublicNetwork, TrafficType.Public, null);
|
||||||
publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering);
|
publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering);
|
||||||
@ -2047,7 +2048,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
long currentTime = System.currentTimeMillis() >> 10;
|
long currentTime = System.currentTimeMillis() >> 10;
|
||||||
HashMap<Long, Long> stillFree = new HashMap<Long, Long>();
|
HashMap<Long, Long> stillFree = new HashMap<Long, Long>();
|
||||||
|
|
||||||
List<Long> networkIds = _nicDao.listNetworksWithNoActiveNics();
|
List<Long> networkIds = _networksDao.findNetworksToGarbageCollect();
|
||||||
for (Long networkId : networkIds) {
|
for (Long networkId : networkIds) {
|
||||||
Long time = _lastNetworkIdsToFree.remove(networkId);
|
Long time = _lastNetworkIdsToFree.remove(networkId);
|
||||||
if (time == null) {
|
if (time == null) {
|
||||||
@ -2055,7 +2056,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||||||
s_logger.debug("We found network " + networkId + " to be free for the first time. Adding it to the list: " + currentTime);
|
s_logger.debug("We found network " + networkId + " to be free for the first time. Adding it to the list: " + currentTime);
|
||||||
}
|
}
|
||||||
stillFree.put(networkId, currentTime);
|
stillFree.put(networkId, currentTime);
|
||||||
} else if (time < (currentTime + 600)) {
|
} else if (time < (currentTime + _networkGcWait)) {
|
||||||
if (s_logger.isDebugEnabled()) {
|
if (s_logger.isDebugEnabled()) {
|
||||||
s_logger.debug("Network " + networkId + " is still free but it's not time to shutdown yet: " + time);
|
s_logger.debug("Network " + networkId + " is still free but it's not time to shutdown yet: " + time);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,4 +52,6 @@ public interface NetworkDao extends GenericDao<NetworkVO, Long> {
|
|||||||
void changeActiveNicsBy(long networkId, int nicsCount);
|
void changeActiveNicsBy(long networkId, int nicsCount);
|
||||||
|
|
||||||
int getActiveNicsIn(long networkId);
|
int getActiveNicsIn(long networkId);
|
||||||
|
List<Long> findNetworksToGarbageCollect();
|
||||||
|
void clearCheckForGc(long networkId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -219,4 +219,14 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements N
|
|||||||
public int getActiveNicsIn(long networkId) {
|
public int getActiveNicsIn(long networkId) {
|
||||||
return _opDao.getActiveNics(networkId);
|
return _opDao.getActiveNics(networkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> findNetworksToGarbageCollect() {
|
||||||
|
return _opDao.getNetworksToGarbageCollect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearCheckForGc(long networkId) {
|
||||||
|
_opDao.clearCheckForGc(networkId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,6 +51,7 @@ public class NetworkOpDaoImpl extends GenericDaoBase<NetworkOpVO, Long> implemen
|
|||||||
GarbageCollectSearch.selectField(GarbageCollectSearch.entity().getId());
|
GarbageCollectSearch.selectField(GarbageCollectSearch.entity().getId());
|
||||||
GarbageCollectSearch.and("activenics", GarbageCollectSearch.entity().getActiveNicsCount(), Op.EQ);
|
GarbageCollectSearch.and("activenics", GarbageCollectSearch.entity().getActiveNicsCount(), Op.EQ);
|
||||||
GarbageCollectSearch.and("gc", GarbageCollectSearch.entity().isGarbageCollected(), Op.EQ);
|
GarbageCollectSearch.and("gc", GarbageCollectSearch.entity().isGarbageCollected(), Op.EQ);
|
||||||
|
GarbageCollectSearch.and("check", GarbageCollectSearch.entity().isCheckForGc(), Op.EQ);
|
||||||
GarbageCollectSearch.done();
|
GarbageCollectSearch.done();
|
||||||
|
|
||||||
_activeNicsAttribute = _allAttributes.get("activeNicsCount");
|
_activeNicsAttribute = _allAttributes.get("activeNicsCount");
|
||||||
@ -61,6 +62,7 @@ public class NetworkOpDaoImpl extends GenericDaoBase<NetworkOpVO, Long> implemen
|
|||||||
SearchCriteria<Long> sc = GarbageCollectSearch.create();
|
SearchCriteria<Long> sc = GarbageCollectSearch.create();
|
||||||
sc.setParameters("activenics", 0);
|
sc.setParameters("activenics", 0);
|
||||||
sc.setParameters("gc", true);
|
sc.setParameters("gc", true);
|
||||||
|
sc.setParameters("check", true);
|
||||||
|
|
||||||
return customSearch(sc, null);
|
return customSearch(sc, null);
|
||||||
}
|
}
|
||||||
@ -77,9 +79,16 @@ public class NetworkOpDaoImpl extends GenericDaoBase<NetworkOpVO, Long> implemen
|
|||||||
sc.setParameters("network", networkId);
|
sc.setParameters("network", networkId);
|
||||||
|
|
||||||
NetworkOpVO vo = createForUpdate();
|
NetworkOpVO vo = createForUpdate();
|
||||||
|
vo.setCheckForGc(true);
|
||||||
UpdateBuilder builder = getUpdateBuilder(vo);
|
UpdateBuilder builder = getUpdateBuilder(vo);
|
||||||
builder.incr(_activeNicsAttribute, count);
|
builder.incr(_activeNicsAttribute, count);
|
||||||
|
|
||||||
update(builder, sc, null);
|
update(builder, sc, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearCheckForGc(long networkId) {
|
||||||
|
NetworkOpVO vo = createForUpdate();
|
||||||
|
vo.setCheckForGc(false);
|
||||||
|
update(networkId, vo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,12 +36,16 @@ public class NetworkOpVO {
|
|||||||
@Column(name="gc")
|
@Column(name="gc")
|
||||||
boolean garbageCollected;
|
boolean garbageCollected;
|
||||||
|
|
||||||
|
@Column(name="check_for_gc")
|
||||||
|
boolean checkForGc;
|
||||||
|
|
||||||
protected NetworkOpVO() {
|
protected NetworkOpVO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkOpVO(long id, boolean gc) {
|
public NetworkOpVO(long id, boolean gc) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.garbageCollected = gc;
|
this.garbageCollected = gc;
|
||||||
|
this.checkForGc = gc;
|
||||||
this.activeNicsCount = 0;
|
this.activeNicsCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,4 +64,12 @@ public class NetworkOpVO {
|
|||||||
public boolean isGarbageCollected() {
|
public boolean isGarbageCollected() {
|
||||||
return garbageCollected;
|
return garbageCollected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCheckForGc() {
|
||||||
|
return checkForGc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCheckForGc(boolean check) {
|
||||||
|
checkForGc = check;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,6 +115,7 @@ CREATE TABLE `cloud`.`op_networks`(
|
|||||||
`mac_address_seq` bigint unsigned NOT NULL DEFAULT 1 COMMENT 'mac address',
|
`mac_address_seq` bigint unsigned NOT NULL DEFAULT 1 COMMENT 'mac address',
|
||||||
`nics_count` int unsigned NOT NULL DEFAULT 0 COMMENT '# of nics',
|
`nics_count` int unsigned NOT NULL DEFAULT 0 COMMENT '# of nics',
|
||||||
`gc` tinyint unsigned NOT NULL DEFAULT 1 COMMENT 'gc this network or not',
|
`gc` tinyint unsigned NOT NULL DEFAULT 1 COMMENT 'gc this network or not',
|
||||||
|
`check_for_gc` tinyint unsigned NOT NULL DEFAULT 1 COMMENT 'check this network for gc or not',
|
||||||
PRIMARY KEY(`id`),
|
PRIMARY KEY(`id`),
|
||||||
CONSTRAINT `fk_op_networks__id` FOREIGN KEY (`id`) REFERENCES `networks`(`id`) ON DELETE CASCADE
|
CONSTRAINT `fk_op_networks__id` FOREIGN KEY (`id`) REFERENCES `networks`(`id`) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
@ -485,7 +486,7 @@ CREATE TABLE `cloud`.`load_balancer_vm_map` (
|
|||||||
`id` bigint unsigned NOT NULL auto_increment,
|
`id` bigint unsigned NOT NULL auto_increment,
|
||||||
`load_balancer_id` bigint unsigned NOT NULL,
|
`load_balancer_id` bigint unsigned NOT NULL,
|
||||||
`instance_id` bigint unsigned NOT NULL,
|
`instance_id` bigint unsigned NOT NULL,
|
||||||
`revoke` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '1 when vm is set for revoke from load balancer',
|
`pending` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT 'whether the vm is being applied to the load balancer (pending=1) or has already been applied (pending=0)',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY (`load_balancer_id`, `instance_id`),
|
UNIQUE KEY (`load_balancer_id`, `instance_id`),
|
||||||
CONSTRAINT `fk_load_balancer_vm_map__load_balancer_id` FOREIGN KEY(`load_balancer_id`) REFERENCES `load_balancing_rules`(`id`) ON DELETE CASCADE,
|
CONSTRAINT `fk_load_balancer_vm_map__load_balancer_id` FOREIGN KEY(`load_balancer_id`) REFERENCES `load_balancing_rules`(`id`) ON DELETE CASCADE,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user